[ONOS-4016] Enhance unit test to check the content inside masters

Change-Id: I461b76457d4abdadad3b458cad8bf9d1a8a38f6b
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/RegionCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/RegionCodec.java
index fd06101..0c48934 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/RegionCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/RegionCodec.java
@@ -99,12 +99,12 @@
 
         if (mastersJson != null) {
             IntStream.range(0, mastersJson.size()).forEach(i -> {
-                ObjectNode setsJson = get(mastersJson, i);
+                JsonNode setsJson = mastersJson.get(i);
                 final Set<NodeId> nodeIds = Sets.newHashSet();
                 if (setsJson != null && setsJson.isArray()) {
                     Set<NodeId> localNodeIds = Sets.newHashSet();
-                    IntStream.range(0, mastersJson.size()).forEach(j -> {
-                        ObjectNode nodeIdJson = get(setsJson, j);
+                    IntStream.range(0, setsJson.size()).forEach(j -> {
+                        JsonNode nodeIdJson = setsJson.get(j);
                         localNodeIds.add(decodeNodeId(nodeIdJson));
                     });
                     nodeIds.addAll(localNodeIds);
@@ -136,7 +136,7 @@
      * @param json json object
      * @return decoded node id object
      */
-    private NodeId decodeNodeId(ObjectNode json) {
+    private NodeId decodeNodeId(JsonNode json) {
         NodeId nodeId = NodeId.nodeId(nullIsIllegal(json, NODE_ID +
                 MISSING_MEMBER_MESSAGE).asText());
 
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/RegionCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/RegionCodecTest.java
index 8b8d276..fbaf54b 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/RegionCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/RegionCodecTest.java
@@ -91,6 +91,13 @@
         checkCommonData(region);
 
         assertThat(region.masters().size(), is(2));
+
+        NodeId nodeId1 = NodeId.nodeId("1");
+        NodeId nodeId2 = NodeId.nodeId("2");
+        Set<NodeId> nodeIds1 = region.masters().get(0);
+        Set<NodeId> nodeIds2 = region.masters().get(1);
+        assertThat(nodeIds1.containsAll(ImmutableSet.of(nodeId1)), is(true));
+        assertThat(nodeIds2.containsAll(ImmutableSet.of(nodeId1, nodeId2)), is(true));
     }
 
     /**
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/RegionJsonMatcher.java b/core/common/src/test/java/org/onosproject/codec/impl/RegionJsonMatcher.java
index b87162b..ad1158a 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/RegionJsonMatcher.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/RegionJsonMatcher.java
@@ -16,10 +16,14 @@
 package org.onosproject.codec.impl;
 
 import com.fasterxml.jackson.databind.JsonNode;
+import com.google.common.collect.Sets;
 import org.hamcrest.Description;
 import org.hamcrest.TypeSafeDiagnosingMatcher;
+import org.onosproject.cluster.NodeId;
 import org.onosproject.net.region.Region;
 
+import java.util.Set;
+
 /**
  * Hamcrest matcher for region.
  */
@@ -64,11 +68,36 @@
             return false;
         }
 
-        // TODO: check the content inside masters
+        // check master
+        for (Set<NodeId> set : region.masters()) {
+            boolean masterFound = false;
+            for (int masterIndex = 0; masterIndex < jsonMasters.size(); masterIndex++) {
+                masterFound = checkEquality(jsonMasters.get(masterIndex), set);
+            }
+
+            if (!masterFound) {
+                description.appendText("master not found " + set.toString());
+                return false;
+            }
+        }
 
         return true;
     }
 
+    private Set<NodeId> jsonToSet(JsonNode nodes) {
+        final Set<NodeId> nodeIds = Sets.newHashSet();
+        nodes.forEach(node -> nodeIds.add(NodeId.nodeId(node.asText())));
+        return nodeIds;
+    }
+
+    private boolean checkEquality(JsonNode nodes, Set<NodeId> nodeIds) {
+        Set<NodeId> jsonSet = jsonToSet(nodes);
+        if (jsonSet.size() == nodes.size()) {
+            return jsonSet.containsAll(nodeIds);
+        }
+        return false;
+    }
+
     @Override
     public void describeTo(Description description) {
         description.appendText(region.toString());