BUG 2667 : Handle null value type
[controller.git] / opendaylight / md-sal / sal-clustering-commons / src / test / java / org / opendaylight / controller / cluster / datastore / node / utils / serialization / ValueSerializerTest.java
index af7a385cbbe0876000eb6d8a457ef4e5312f8fa3..f5eecf33d90aa0df9afe164c3d72fc3663c2b14d 100644 (file)
@@ -1,23 +1,24 @@
 package org.opendaylight.controller.cluster.datastore.node.utils.serialization;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
+import com.google.protobuf.ByteString;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Set;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.mockito.Mockito;
 import org.opendaylight.controller.cluster.datastore.util.TestModel;
 import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.util.Set;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-
 public class ValueSerializerTest{
 
     @Rule
@@ -27,14 +28,15 @@ public class ValueSerializerTest{
     public void testSerializeShort(){
         short v1 = 5;
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.SHORT_TYPE.ordinal(), builder.getIntValueType());
         assertEquals("5", builder.getValue());
 
-        NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+        NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 =
+                NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
 
-        ValueSerializer.serialize(builder1, mock(NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.SHORT_TYPE.ordinal(), builder1.getType());
         assertEquals("5", builder.getValue());
@@ -49,16 +51,15 @@ public class ValueSerializerTest{
 
 
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class), expected);
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class), expected);
 
         assertEquals(ValueType.INT_TYPE.ordinal(), builder.getIntValueType());
         assertEquals("243", builder.getValue());
 
-        NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+        NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 =
+                NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
 
-        ValueSerializer.serialize(builder1, mock(
-            NormalizedNodeSerializationContext.class), expected);
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class), expected);
 
         assertEquals(ValueType.INT_TYPE.ordinal(), builder1.getType());
         assertEquals("243", builder1.getValue());
@@ -71,16 +72,14 @@ public class ValueSerializerTest{
     public void testSerializeLong(){
         long v1 = 5;
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.LONG_TYPE.ordinal(), builder.getIntValueType());
         assertEquals("5", builder.getValue());
 
         NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
 
-        ValueSerializer.serialize(builder1, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.LONG_TYPE.ordinal(), builder1.getType());
         assertEquals("5", builder1.getValue());
@@ -91,16 +90,14 @@ public class ValueSerializerTest{
     public void testSerializeByte(){
         byte v1 = 5;
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.BYTE_TYPE.ordinal(), builder.getIntValueType());
         assertEquals("5", builder.getValue());
 
         NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
 
-        ValueSerializer.serialize(builder1, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.BYTE_TYPE.ordinal(), builder1.getType());
         assertEquals("5", builder1.getValue());
@@ -110,8 +107,7 @@ public class ValueSerializerTest{
     @Test
     public void testSerializeBits(){
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class),
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class),
             ImmutableSet.of("foo", "bar"));
 
         assertEquals(ValueType.BITS_TYPE.ordinal(), builder.getIntValueType());
@@ -120,12 +116,12 @@ public class ValueSerializerTest{
 
         NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
 
-        ValueSerializer.serialize(builder1, mock(
-            NormalizedNodeSerializationContext.class),
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class),
             ImmutableSet.of("foo", "bar"));
 
         assertEquals(ValueType.BITS_TYPE.ordinal(), builder1.getType());
-        assertEquals("[foo, bar]", builder1.getValue());
+        assertTrue( "foo not in bits", builder1.getBitsValueList().contains("foo"));
+        assertTrue( "bar not in bits", builder1.getBitsValueList().contains("bar"));
 
     }
 
@@ -134,8 +130,7 @@ public class ValueSerializerTest{
         expectedException.expect(IllegalArgumentException.class);
         expectedException.expectMessage("Expected value type to be Bits but was :");
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-                NormalizedNodeSerializationContext.class),
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class),
             ImmutableSet.of(1, 2));
 
     }
@@ -143,16 +138,14 @@ public class ValueSerializerTest{
     @Test
     public void testSerializeEmptyString(){
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class),"");
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class),"");
 
         assertEquals(ValueType.STRING_TYPE.ordinal(), builder.getIntValueType());
         assertEquals("", builder.getValue());
 
         NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
 
-        ValueSerializer.serialize(builder1, mock(
-            NormalizedNodeSerializationContext.class),"");
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class),"");
 
         assertEquals(ValueType.STRING_TYPE.ordinal(), builder1.getType());
         assertEquals("", builder1.getValue());
@@ -162,16 +155,15 @@ public class ValueSerializerTest{
     @Test
     public void testSerializeString(){
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class),"foo");
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class),"foo");
 
         assertEquals(ValueType.STRING_TYPE.ordinal(), builder.getIntValueType());
         assertEquals("foo", builder.getValue());
 
-        NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+        NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 =
+                NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
 
-        ValueSerializer.serialize(builder1, mock(
-            NormalizedNodeSerializationContext.class),"foo");
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class),"foo");
 
         assertEquals(ValueType.STRING_TYPE.ordinal(), builder1.getType());
         assertEquals("foo", builder1.getValue());
@@ -183,15 +175,14 @@ public class ValueSerializerTest{
     public void testSerializeBoolean(){
         boolean v1 = true;
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.BOOL_TYPE.ordinal(), builder.getIntValueType());
         assertEquals("true", builder.getValue());
 
-        NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
-        ValueSerializer.serialize(builder1, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 =
+                NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.BOOL_TYPE.ordinal(), builder1.getType());
         assertEquals("true", builder1.getValue());
@@ -201,16 +192,14 @@ public class ValueSerializerTest{
     public void testSerializeQName(){
         QName v1 = TestModel.TEST_QNAME;
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.QNAME_TYPE.ordinal(), builder.getIntValueType());
         assertEquals("(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)test", builder.getValue());
 
         NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
 
-        ValueSerializer.serialize(builder1, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.QNAME_TYPE.ordinal(), builder1.getType());
         assertEquals("(urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test?revision=2014-03-13)test", builder1.getValue());
@@ -222,32 +211,45 @@ public class ValueSerializerTest{
         YangInstanceIdentifier v1 = TestModel.TEST_PATH;
 
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class), v1);
-
+        QNameSerializationContext mockContext = mock(QNameSerializationContext.class);
+        ValueSerializer.serialize(builder, mockContext, v1);
 
         assertEquals(ValueType.YANG_IDENTIFIER_TYPE.ordinal(), builder.getIntValueType());
         NormalizedNodeMessages.InstanceIdentifier serializedYangInstanceIdentifier =
             builder.getInstanceIdentifierValue();
 
         assertEquals(1, serializedYangInstanceIdentifier.getArgumentsCount());
-        assertEquals(TestModel.TEST_QNAME.toString(), serializedYangInstanceIdentifier.getArguments(0).getNodeType().getValue());
+        Mockito.verify(mockContext).addLocalName(TestModel.TEST_QNAME.getLocalName());
+        Mockito.verify(mockContext).addNamespace(TestModel.TEST_QNAME.getNamespace());
+
+        NormalizedNodeMessages.PathArgumentAttribute.Builder argumentBuilder
+                = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+
+        mockContext = mock(QNameSerializationContext.class);
+
+        ValueSerializer.serialize(argumentBuilder, mockContext, v1);
+
+        serializedYangInstanceIdentifier =
+                argumentBuilder.getInstanceIdentifierValue();
+
+        assertEquals(1, serializedYangInstanceIdentifier.getArgumentsCount());
+        Mockito.verify(mockContext).addLocalName(TestModel.TEST_QNAME.getLocalName());
+        Mockito.verify(mockContext).addNamespace(TestModel.TEST_QNAME.getNamespace());
+
     }
 
     @Test
     public void testSerializeBigInteger(){
         BigInteger v1 = new BigInteger("1000000000000000000000000");
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.BIG_INTEGER_TYPE.ordinal(), builder.getIntValueType());
         assertEquals("1000000000000000000000000", builder.getValue());
 
         NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
 
-        ValueSerializer.serialize(builder1, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.BIG_INTEGER_TYPE.ordinal(), builder1.getType());
         assertEquals("1000000000000000000000000", builder1.getValue());
@@ -258,21 +260,56 @@ public class ValueSerializerTest{
     public void testSerializeBigDecimal(){
         BigDecimal v1 = new BigDecimal("1000000000000000000000000.51616");
         NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
-        ValueSerializer.serialize(builder, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.BIG_DECIMAL_TYPE.ordinal(), builder.getIntValueType());
         assertEquals("1000000000000000000000000.51616", builder.getValue());
 
         NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
-        ValueSerializer.serialize(builder1, mock(
-            NormalizedNodeSerializationContext.class), v1);
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class), v1);
 
         assertEquals(ValueType.BIG_DECIMAL_TYPE.ordinal(), builder1.getType());
         assertEquals("1000000000000000000000000.51616", builder1.getValue());
 
     }
 
+    @Test
+    public void testSerializeBinary(){
+        NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
+        byte[] bytes = new byte[] {1,2,3,4};
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class),bytes);
+
+        assertEquals(ValueType.BINARY_TYPE.ordinal(), builder.getIntValueType());
+        assertEquals(ByteString.copyFrom(bytes), builder.getBytesValue());
+
+        NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class),bytes);
+
+        assertEquals(ValueType.BINARY_TYPE.ordinal(), builder1.getType());
+        assertEquals(ByteString.copyFrom(bytes), builder1.getBytesValue());
+
+    }
+
+    @Test
+    public void testSerializeNull(){
+        NormalizedNodeMessages.Node.Builder builder = NormalizedNodeMessages.Node.newBuilder();
+        Object none = null;
+        ValueSerializer.serialize(builder, mock(QNameSerializationContext.class),none);
+
+        assertEquals(ValueType.NULL_TYPE.ordinal(), builder.getIntValueType());
+        assertEquals("", builder.getValue());
+
+        NormalizedNodeMessages.PathArgumentAttribute.Builder builder1 = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+
+        ValueSerializer.serialize(builder1, mock(QNameSerializationContext.class),none);
+
+        assertEquals(ValueType.NULL_TYPE.ordinal(), builder1.getType());
+        assertEquals("", builder.getValue());
+
+    }
+
+
     @Test
     public void testDeSerializeShort(){
         NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
@@ -280,7 +317,7 @@ public class ValueSerializerTest{
         nodeBuilder.setValue("25");
 
         Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
+            .deSerialize(mock(QNameDeSerializationContext.class),
                 nodeBuilder.build());
 
         assertTrue(o instanceof Short);
@@ -294,7 +331,7 @@ public class ValueSerializerTest{
         nodeBuilder.setValue("25");
 
         Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
+            .deSerialize(mock(QNameDeSerializationContext.class),
                 nodeBuilder.build());
 
         assertTrue(o instanceof Byte);
@@ -309,7 +346,7 @@ public class ValueSerializerTest{
         nodeBuilder.setValue("25");
 
         Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
+            .deSerialize(mock(QNameDeSerializationContext.class),
                 nodeBuilder.build());
 
         assertTrue(o instanceof Integer);
@@ -324,7 +361,7 @@ public class ValueSerializerTest{
         nodeBuilder.setValue("25");
 
         Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
+            .deSerialize(mock(QNameDeSerializationContext.class),
                 nodeBuilder.build());
 
         assertTrue(o instanceof Long);
@@ -339,7 +376,7 @@ public class ValueSerializerTest{
         nodeBuilder.setValue("false");
 
         Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
+            .deSerialize(mock(QNameDeSerializationContext.class),
                 nodeBuilder.build());
 
         assertTrue(o instanceof Boolean);
@@ -354,7 +391,7 @@ public class ValueSerializerTest{
         nodeBuilder.setValue(TestModel.TEST_QNAME.toString());
 
         Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
+            .deSerialize(mock(QNameDeSerializationContext.class),
                 nodeBuilder.build());
 
         assertTrue(o instanceof QName);
@@ -369,12 +406,26 @@ public class ValueSerializerTest{
         nodeBuilder.addAllBitsValue(ImmutableList.of("foo", "bar"));
 
         Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
+            .deSerialize(mock(QNameDeSerializationContext.class),
                 nodeBuilder.build());
 
         assertTrue(o instanceof Set);
-        assertTrue(((Set)o).contains("foo"));
-        assertTrue(((Set) o).contains("bar"));
+        assertTrue(((Set<?>)o).contains("foo"));
+        assertTrue(((Set<?>) o).contains("bar"));
+
+        NormalizedNodeMessages.PathArgumentAttribute.Builder argumentBuilder
+                = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+
+        argumentBuilder.setType(ValueType.BITS_TYPE.ordinal());
+        argumentBuilder.addAllBitsValue(ImmutableList.of("foo", "bar"));
+
+        o = ValueSerializer
+                .deSerialize(mock(QNameDeSerializationContext.class),
+                        argumentBuilder.build());
+
+        assertTrue(o instanceof Set);
+        assertTrue(((Set<?>)o).contains("foo"));
+        assertTrue(((Set<?>) o).contains("bar"));
 
     }
 
@@ -384,7 +435,6 @@ public class ValueSerializerTest{
         NormalizedNodeMessages.InstanceIdentifier.Builder idBuilder = NormalizedNodeMessages.InstanceIdentifier.newBuilder();
         NormalizedNodeMessages.PathArgument.Builder pathBuilder = NormalizedNodeMessages.PathArgument.newBuilder();
 
-        pathBuilder.setValue(TestModel.TEST_QNAME.toString());
         pathBuilder.setIntType(PathArgumentType.NODE_IDENTIFIER.ordinal());
 
         idBuilder.addArguments(pathBuilder);
@@ -392,13 +442,29 @@ public class ValueSerializerTest{
         nodeBuilder.setIntValueType(ValueType.YANG_IDENTIFIER_TYPE.ordinal());
         nodeBuilder.setInstanceIdentifierValue(idBuilder);
 
-        Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
-                nodeBuilder.build());
+        QNameDeSerializationContext mockContext = mock(QNameDeSerializationContext.class);
+        Mockito.doReturn(TestModel.TEST_QNAME.getNamespace().toString()).when(mockContext).
+                getNamespace(Mockito.anyInt());
+        Mockito.doReturn(TestModel.TEST_QNAME.getLocalName()).when(mockContext).
+                getLocalName(Mockito.anyInt());
+        Mockito.doReturn(TestModel.TEST_QNAME.getFormattedRevision()).when(mockContext).
+                getRevision(Mockito.anyInt());
+
+        Object o = ValueSerializer.deSerialize(mockContext, nodeBuilder.build());
 
         assertTrue(o instanceof YangInstanceIdentifier);
         assertEquals(TestModel.TEST_PATH, o);
 
+        NormalizedNodeMessages.PathArgumentAttribute.Builder argumentBuilder =
+                NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+
+        argumentBuilder.setType(ValueType.YANG_IDENTIFIER_TYPE.ordinal());
+        argumentBuilder.setInstanceIdentifierValue(idBuilder);
+
+        o = ValueSerializer.deSerialize(mockContext, argumentBuilder.build());
+
+        assertTrue(o instanceof YangInstanceIdentifier);
+        assertEquals(TestModel.TEST_PATH, o);
     }
 
     @Test
@@ -407,8 +473,7 @@ public class ValueSerializerTest{
         nodeBuilder.setIntValueType(ValueType.STRING_TYPE.ordinal());
         nodeBuilder.setValue("25");
 
-        Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
+        Object o = ValueSerializer.deSerialize(mock(QNameDeSerializationContext.class),
                 nodeBuilder.build());
 
         assertTrue(o instanceof String);
@@ -423,7 +488,7 @@ public class ValueSerializerTest{
         nodeBuilder.setValue("25");
 
         Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
+            .deSerialize(mock(QNameDeSerializationContext.class),
                 nodeBuilder.build());
 
         assertTrue(o instanceof BigInteger);
@@ -438,7 +503,7 @@ public class ValueSerializerTest{
         nodeBuilder.setValue("25");
 
         Object o = ValueSerializer
-            .deSerialize(mock(NormalizedNodeDeSerializationContext.class),
+            .deSerialize(mock(QNameDeSerializationContext.class),
                 nodeBuilder.build());
 
         assertTrue(o instanceof BigDecimal);
@@ -446,4 +511,57 @@ public class ValueSerializerTest{
 
     }
 
+
+    @Test
+    public void testDeSerializeBinaryType(){
+        NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
+        nodeBuilder.setIntValueType(ValueType.BINARY_TYPE.ordinal());
+        byte[] bytes = new byte[] {1,2,3,4};
+        nodeBuilder.setBytesValue(ByteString.copyFrom(bytes));
+
+        Object o = ValueSerializer.deSerialize(mock(QNameDeSerializationContext.class),nodeBuilder.build());
+
+        assertTrue("not a byte array", o instanceof byte[]);
+        assertTrue("bytes value does not match" , Arrays.equals(bytes, (byte[]) o));
+
+        NormalizedNodeMessages.PathArgumentAttribute.Builder argumentBuilder =
+                NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+        argumentBuilder.setType(ValueType.BINARY_TYPE.ordinal());
+        argumentBuilder.setBytesValue(ByteString.copyFrom(bytes));
+
+        o = ValueSerializer.deSerialize(mock(QNameDeSerializationContext.class), argumentBuilder.build());
+
+        assertTrue("not a byte array", o instanceof byte[]);
+        assertTrue("bytes value does not match" ,Arrays.equals(bytes, (byte[]) o));
+
+
+    }
+
+    @Test
+    public void testDeSerializeNullType(){
+        NormalizedNodeMessages.Node.Builder nodeBuilder = NormalizedNodeMessages.Node.newBuilder();
+        nodeBuilder.setIntValueType(ValueType.NULL_TYPE.ordinal());
+        nodeBuilder.setValue("");
+
+        Object o = ValueSerializer
+                .deSerialize(mock(QNameDeSerializationContext.class),
+                        nodeBuilder.build());
+
+        assertEquals(null, o);
+
+        NormalizedNodeMessages.PathArgumentAttribute.Builder argumentBuilder
+                = NormalizedNodeMessages.PathArgumentAttribute.newBuilder();
+
+        argumentBuilder.setType(ValueType.NULL_TYPE.ordinal());
+        argumentBuilder.setValue("");
+
+        o = ValueSerializer
+                .deSerialize(mock(QNameDeSerializationContext.class),
+                        argumentBuilder.build());
+
+        assertEquals(null, o);
+
+    }
+
+
 }