[ONOS-7302] UT for value namespace in identifier. JSON/XML serializer change for value ns.

Change-Id: Ia5e77c2af822455d36cd307a38c91ba6a28597cd
diff --git a/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java b/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java
index 185c90c..081ade2 100644
--- a/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java
+++ b/serializers/json/src/test/java/org/onosproject/yang/serializers/json/JsonSerializerTest.java
@@ -20,7 +20,9 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.commons.io.IOUtils;
 import org.junit.BeforeClass;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 import org.onosproject.yang.model.DataNode;
 import org.onosproject.yang.model.DefaultResourceData;
 import org.onosproject.yang.model.NodeKey;
@@ -60,6 +62,16 @@
     private static YangSerializerContext context;
     private static YangSerializer jsonSerializer;
 
+    private static String outputIdTestJson = "{\"identity-test:con\":{\"inte" +
+            "rface\":\"identity-types:physical\",\"interfaces\":{\"int-list" +
+            "\":[{\"iden\":\"identity-types-second:virtual\",\"available\":" +
+            "{\"ll\":[\"Loopback:identity-types\",\"Giga:identity-test\",\"" +
+            "Ethernet:identity-types-second\"]}},{\"iden\":\"optical\",\"av" +
+            "ailable\":{\"ll\":[\"Giga\"]}}]}}}";
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
     @Test
     public void demo1Test() throws IOException {
         String path = "src/test/resources/test.json";
@@ -97,6 +109,52 @@
     }
 
     @Test
+    public void identityValueNsTest() throws IOException {
+        String path = "src/test/resources/id-test1.json";
+        // decode
+        DefaultCompositeStream external =
+                new DefaultCompositeStream("identity-test:test", parseInput(path));
+        CompositeData compositeData = jsonSerializer.decode(external, context);
+        ResourceData resourceData = compositeData.resourceData();
+        ResourceId rid = resourceData.resourceId();
+        DataNode rootNode = resourceData.dataNodes().get(0);
+
+        // encode
+        RuntimeContext.Builder runtimeContextBuilder = DefaultRuntimeContext.builder();
+        runtimeContextBuilder.setDataFormat("JSON");
+        DefaultResourceData.Builder resourceDataBuilder = DefaultResourceData.builder();
+        resourceDataBuilder.addDataNode(rootNode);
+        resourceDataBuilder.resourceId(rid);
+
+        ResourceData resourceDataOutput = resourceDataBuilder.build();
+        DefaultCompositeData.Builder compositeDataBuilder = DefaultCompositeData.builder();
+        compositeDataBuilder.resourceData(resourceDataOutput);
+        CompositeData compositeData1 = compositeDataBuilder.build();
+        // CompositeData --- YangRuntimeService ---> CompositeStream.
+        CompositeStream compositeStreamOutPut = jsonSerializer.encode(compositeData1,
+                                                                      context);
+        InputStream inputStreamOutput = compositeStreamOutPut.resourceData();
+        ObjectNode rootNodeOutput;
+        ObjectMapper mapper = new ObjectMapper();
+        try {
+            rootNodeOutput = (ObjectNode) mapper.readTree(inputStreamOutput);
+            assertEquals(rootNodeOutput.toString(), outputIdTestJson);
+        } catch (IOException e) {
+            throw e;
+        }
+    }
+
+    @Test
+    public void identityValueNsErrorTest() throws IOException {
+        thrown.expect(IllegalArgumentException.class);
+        thrown.expectMessage("Invalid input for value namespace");
+        String path = "src/test/resources/id-test2.json";
+        DefaultCompositeStream external =
+                new DefaultCompositeStream("identity-test:test", parseInput(path));
+        jsonSerializer.decode(external, context);
+    }
+
+    @Test
     public void testContainerInResourceIdToUri() {
         ResourceId rid = ResourceId.builder().addBranchPointSchema("/", null)
                 .addBranchPointSchema("device", "namespace1")
diff --git a/serializers/json/src/test/resources/id-test1.json b/serializers/json/src/test/resources/id-test1.json
new file mode 100644
index 0000000..95aabb9
--- /dev/null
+++ b/serializers/json/src/test/resources/id-test1.json
@@ -0,0 +1,28 @@
+{
+  "identity-test:con": {
+    "identity-test:interface": "identity-types:physical",
+    "identity-test:interfaces": {
+      "int-list": [
+        {
+          "iden": "identity-types-second:virtual",
+          "available": {
+            "ll": [
+              "identity-types:Loopback",
+              "identity-test:Giga",
+              "identity-types-second:Ethernet"
+            ]
+          }
+        },
+        {
+          "iden": "optical",
+          "available": {
+            "ll": [
+              "Giga"
+            ]
+          }
+        }
+      ]
+    }
+  }
+}
+
diff --git a/serializers/json/src/test/resources/id-test2.json b/serializers/json/src/test/resources/id-test2.json
new file mode 100644
index 0000000..296c4e9
--- /dev/null
+++ b/serializers/json/src/test/resources/id-test2.json
@@ -0,0 +1,5 @@
+{
+  "identity-test:con": {
+    "identity-test:interface": "physical"
+  }
+}
\ No newline at end of file
diff --git a/serializers/json/src/test/resources/identity-test.yang b/serializers/json/src/test/resources/identity-test.yang
new file mode 100644
index 0000000..960e1ef
--- /dev/null
+++ b/serializers/json/src/test/resources/identity-test.yang
@@ -0,0 +1,61 @@
+module identity-test {
+    yang-version 1;
+    namespace "identity:ns:test:json:ser";
+    prefix "id";
+
+    import identity-types {
+        prefix "type";
+    }
+
+    revision "2013-07-15";
+
+    identity optical {
+        base type:int-type;
+    }
+
+    identity Giga {
+        base type:physical;
+    }
+
+    typedef available {
+        type identityref {
+            base "type:physical";
+        }
+    }
+
+    typedef typed{
+        type union {
+            type int32;
+            type int8;
+            type identityref {
+                base type:int-type;
+            }
+        }
+    }
+
+    container test {
+        leaf l {
+            type string;
+        }
+        container con {
+            leaf interface {
+                type identityref {
+                    base "type:int-type";
+                }
+            }
+            container interfaces {
+                list int-list {
+                    key "iden";
+                    leaf iden {
+                        type "id:typed";
+                    }
+                    container available {
+                        leaf-list ll {
+                            type available;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/serializers/json/src/test/resources/identity-types-second.yang b/serializers/json/src/test/resources/identity-types-second.yang
new file mode 100644
index 0000000..f5742b2
--- /dev/null
+++ b/serializers/json/src/test/resources/identity-types-second.yang
@@ -0,0 +1,19 @@
+module  identity-types-second{
+    yang-version 1;
+    namespace "identity:list:second:ns:test:json:ser";
+    prefix "sec";
+
+    import identity-types {
+        prefix "type";
+    }
+
+    revision "2013-07-15";
+
+    identity virtual {
+        base type:int-type;
+    }
+
+    identity Ethernet {
+        base type:physical;
+    }
+}
diff --git a/serializers/json/src/test/resources/identity-types.yang b/serializers/json/src/test/resources/identity-types.yang
new file mode 100644
index 0000000..25c8fa5
--- /dev/null
+++ b/serializers/json/src/test/resources/identity-types.yang
@@ -0,0 +1,17 @@
+module identity-types {
+    yang-version 1;
+    namespace "identity:list:ns:test:json:ser";
+    prefix "type";
+    revision "2013-07-15";
+
+    identity int-type {
+    }
+
+    identity physical {
+        base int-type;
+    }
+
+    identity Loopback {
+        base physical;
+    }
+}