Remove trailing whitespace
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / HelloMessageFactoryTest.java
index 0ab67a9ae871efd5cf5bcbd7648a4c5ae3d68c44..47bd8ddf0cd7e7dc3164944b62e7a5e575ed8a19 100644 (file)
@@ -8,14 +8,20 @@
 
 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 
+import io.netty.buffer.ByteBuf;
+
 import java.util.ArrayList;
 import java.util.List;
 
-import io.netty.buffer.ByteBuf;
-
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
+import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
+import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;
 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloElementType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.Elements;
@@ -24,33 +30,74 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 /**
  * @author michal.polkorab
  * @author timotej.kubas
+ * @author madamjak
  */
 public class HelloMessageFactoryTest {
 
-    /** Number of currently supported version / codec */
-    public static final Short VERSION_YET_SUPPORTED = 0x04;
+    private OFDeserializer<HelloMessage> helloFactory;
+
+    /**
+     * Initializes deserializer registry and lookups correct deserializer
+     */
+    @Before
+    public void startUp() {
+        DeserializerRegistry registry = new DeserializerRegistryImpl();
+        registry.init();
+        helloFactory = registry.getDeserializer(
+                new MessageCodeKey(EncodeConstants.OF13_VERSION_ID, 0, HelloMessage.class));
+    }
 
     /**
-     * Testing {@link HelloMessageFactory} for correct translation into POJO
+     * Testing {@link HelloMessageFactory} for correct length without padding
      */
     @Test
-    public void test() {
+    public void testWithoutPadding() {
+        ByteBuf bb = BufferHelper.buildBuffer("00 01 " // type
+                                            + "00 08 " // length
+                                            + "00 00 00 11" // bitmap 1
+                                            );
+        HelloMessage builtByFactory = BufferHelper.deserialize(helloFactory, bb);
+        BufferHelper.checkHeaderV13(builtByFactory);
+        List<Elements> element = createElement(4,HelloElementType.VERSIONBITMAP.getIntValue());
+        Assert.assertEquals("Wrong type", element.get(0).getType(), builtByFactory.getElements().get(0).getType());
+        Assert.assertEquals("Wrong versionBitmap", element.get(0).getVersionBitmap(), builtByFactory.getElements().get(0).getVersionBitmap());
+    }
+
+    /**
+     * Testing {@link HelloMessageFactory} for correct length with padding
+     */
+    @Test
+    public void testWithPadding() {
         ByteBuf bb = BufferHelper.buildBuffer("00 01 " // type
                                             + "00 0c " // length
                                             + "00 00 00 11 " // bitmap 1
                                             + "00 00 00 00 " // bitmap 2
                                             + "00 00 00 00"  // padding
-                );
-        HelloMessage builtByFactory = BufferHelper.decodeV13(
-                HelloMessageFactory.getInstance(), bb);
-
+                                            );
+        HelloMessage builtByFactory = BufferHelper.deserialize(helloFactory, bb);
         BufferHelper.checkHeaderV13(builtByFactory);
-        List<Elements> element = createElement();
+        List<Elements> element = createElement(8,HelloElementType.VERSIONBITMAP.getIntValue());
         Assert.assertEquals("Wrong type", element.get(0).getType(), builtByFactory.getElements().get(0).getType());
         Assert.assertEquals("Wrong versionBitmap", element.get(0).getVersionBitmap(), builtByFactory.getElements().get(0).getVersionBitmap());
     }
-    
-    private static List<Elements> createElement() {
+
+    /**
+     * Testing {@link HelloMessageFactory} if incorrect version is set
+     */
+    @Test
+    public void testBadType(){
+        ByteBuf bb = BufferHelper.buildBuffer("00 02 " // type
+                                            + "00 0c " // length
+                                            + "00 00 00 11 " // bitmap 1
+                                            + "00 00 00 00 " // bitmap 2
+                                            + "00 00 00 00"  // padding
+                                            );
+        HelloMessage builtByFactory = BufferHelper.deserialize(helloFactory, bb);
+        BufferHelper.checkHeaderV13(builtByFactory);
+        Assert.assertEquals("Wrong - no element has been expected", 0, builtByFactory.getElements().size());
+    }
+
+    private static List<Elements> createElement(int lengthInByte, int type) {
         ElementsBuilder elementsBuilder = new ElementsBuilder();
         List<Elements> elementsList = new ArrayList<>();
         List<Boolean> booleanList = new ArrayList<>();
@@ -59,13 +106,13 @@ public class HelloMessageFactoryTest {
         booleanList.add(false);
         booleanList.add(false);
         booleanList.add(true);
-        for (int i = 1; i < 60; i++) {
+        int inSize = booleanList.size();
+        for (int i = 1; i < ((lengthInByte * 8) - inSize + 1); i++) {
             booleanList.add(false);
         }
-        elementsBuilder.setType(HelloElementType.forValue(1));
+        elementsBuilder.setType(HelloElementType.forValue(type));
         elementsBuilder.setVersionBitmap(booleanList);
         elementsList.add(elementsBuilder.build());
-        
         return elementsList;
     }
 }