Bug 2756 - Action model update
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / OF10FlowModInputMessageFactoryTest.java
index fbb007575f283dbc78821880a9cde034b279fe86..0d765be156518e3b442e1eef5fbb4acc8866a250 100644 (file)
@@ -16,26 +16,28 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
+import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
-import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
-import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
+import org.opendaylight.openflowjava.util.ByteBufUtils;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressAction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwDst;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetTpSrc;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsListBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwDstCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetTpSrcCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.nw.dst._case.SetNwDstActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.tp.src._case.SetTpSrcActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModCommand;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlagsV10;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowWildcardsV10;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.v10.grouping.MatchV10Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.v10.grouping.MatchV10Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;
 
@@ -45,8 +47,22 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  */
 public class OF10FlowModInputMessageFactoryTest {
 
+    private SerializerRegistry registry;
+    private OFSerializer<FlowModInput> flowModFactory;
+
     /**
-     * @throws Exception 
+     * Initializes serializer registry and stores correct factory in field
+     */
+    @Before
+    public void startUp() {
+        registry = new SerializerRegistryImpl();
+        registry.init();
+        flowModFactory = registry.getSerializer(
+                new MessageTypeKey<>(EncodeConstants.OF10_VERSION_ID, FlowModInput.class));
+    }
+
+    /**
+     * @throws Exception
      * Testing of {@link OF10FlowModInputMessageFactory} for correct translation from POJO
      */
     @Test
@@ -54,7 +70,7 @@ public class OF10FlowModInputMessageFactoryTest {
         FlowModInputBuilder builder = new FlowModInputBuilder();
         BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID);
         MatchV10Builder matchBuilder = new MatchV10Builder();
-        matchBuilder.setWildcards(new FlowWildcardsV10(true, true, true, true, true, true, true, true, true, true, true));
+        matchBuilder.setWildcards(new FlowWildcardsV10(true, true, true, true, true, true, true, true, true, true));
         matchBuilder.setNwSrcMask((short) 0);
         matchBuilder.setNwDstMask((short) 0);
         matchBuilder.setInPort(58);
@@ -70,8 +86,8 @@ public class OF10FlowModInputMessageFactoryTest {
         matchBuilder.setTpSrc(6653);
         matchBuilder.setTpDst(6633);
         builder.setMatchV10(matchBuilder.build());
-        byte[] cookie = new byte[]{0x00, 0x01, 0x04, 0x01, 0x06, 0x00, 0x07, 0x01};
-        builder.setCookie(new BigInteger(cookie));
+        byte[] cookie = new byte[]{(byte) 0xFF, 0x01, 0x04, 0x01, 0x06, 0x00, 0x07, 0x01};
+        builder.setCookie(new BigInteger(1, cookie));
         builder.setCommand(FlowModCommand.forValue(0));
         builder.setIdleTimeout(12);
         builder.setHardTimeout(16);
@@ -79,31 +95,29 @@ public class OF10FlowModInputMessageFactoryTest {
         builder.setBufferId(2L);
         builder.setOutPort(new PortNumber(4422L));
         builder.setFlagsV10(new FlowModFlagsV10(true, false, true));
-        List<ActionsList> actions = new ArrayList<>();
-        ActionsListBuilder actionsListBuilder = new ActionsListBuilder();
+        List<Action> actions = new ArrayList<>();
         ActionBuilder actionBuilder = new ActionBuilder();
-        actionBuilder.setType(SetNwDst.class);
-        IpAddressActionBuilder ipBuilder = new IpAddressActionBuilder();
-        ipBuilder.setIpAddress(new Ipv4Address("2.2.2.2"));
-        actionBuilder.addAugmentation(IpAddressAction.class, ipBuilder.build());
-        actionsListBuilder.setAction(actionBuilder.build());
-        actions.add(actionsListBuilder.build());
+        SetNwDstCaseBuilder nwDstCaseBuilder = new SetNwDstCaseBuilder();
+        SetNwDstActionBuilder nwDstBuilder = new SetNwDstActionBuilder();
+        nwDstBuilder.setIpAddress(new Ipv4Address("2.2.2.2"));
+        nwDstCaseBuilder.setSetNwDstAction(nwDstBuilder.build());
+        actionBuilder.setActionChoice(nwDstCaseBuilder.build());
+        actions.add(actionBuilder.build());
         actionBuilder = new ActionBuilder();
-        actionBuilder.setType(SetTpSrc.class);
-        PortActionBuilder portBuilder = new PortActionBuilder();
-        portBuilder.setPort(new PortNumber(42L));
-        actionBuilder.addAugmentation(PortAction.class, portBuilder.build());
-        actionsListBuilder.setAction(actionBuilder.build());
-        actions.add(actionsListBuilder.build());
-        builder.setActionsList(actions);
+        SetTpSrcCaseBuilder tpSrcCaseBuilder = new SetTpSrcCaseBuilder();
+        SetTpSrcActionBuilder tpSrcBuilder = new SetTpSrcActionBuilder();
+        tpSrcBuilder.setPort(new PortNumber(42L));
+        tpSrcCaseBuilder.setSetTpSrcAction(tpSrcBuilder.build());
+        actionBuilder.setActionChoice(tpSrcCaseBuilder.build());
+        actions.add(actionBuilder.build());
+        builder.setAction(actions);
         FlowModInput message = builder.build();
-        
+
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
-        OF10FlowModInputMessageFactory factory = OF10FlowModInputMessageFactory.getInstance();
-        factory.messageToBuffer(EncodeConstants.OF10_VERSION_ID, out, message);
-        
-        BufferHelper.checkHeaderV10(out, factory.getMessageType(), factory.computeLength(message));
-        Assert.assertEquals("Wrong wildcards", 4194303, out.readUnsignedInt());
+        flowModFactory.serialize(message, out);
+
+        BufferHelper.checkHeaderV10(out, (byte) 14, 88);
+        Assert.assertEquals("Wrong wildcards", 3678463, out.readUnsignedInt());
         Assert.assertEquals("Wrong inPort", 58, out.readUnsignedShort());
         byte[] dlSrc = new byte[6];
         out.readBytes(dlSrc);