Bug 1186 - of-flow: pop-mpls-action different in config and operational data store
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / ActionConvertorTest.java
index 652df87fd2a44718a5b3906e22885d20d14c8ca6..8f0571c89b6235347c12df6bcf52cb691be6e06e 100644 (file)
@@ -1,5 +1,15 @@
+/**
+ * Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributor: usha.m.s@ericsson.com
+ */
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
+import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -7,14 +17,14 @@ import junit.framework.Assert;
 
 import org.junit.Test;
 import org.opendaylight.controller.sal.action.PopVlan;
-import org.opendaylight.controller.sal.core.NodeConnector.NodeConnectorIDType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
@@ -24,6 +34,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
@@ -40,19 +54,28 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl;
@@ -63,15 +86,20 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;
+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.SetNwSrc;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
 
 public class ActionConvertorTest {
 
-    List<Action> actions = new ArrayList<Action>();
+    List<Action> actions = new ArrayList<>();
     static Integer actionItem = 0;
 
     @Test
@@ -87,7 +115,8 @@ public class ActionConvertorTest {
         pbbActionData();
         setFieldData();
         setExperimenterData();
-        List<ActionsList> OFActionsList = ActionConvertor.getActionList(actions, (short) 0X4);
+        List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731
+        .actions.grouping.Action> OFActionsList = ActionConvertor.getActions(actions, (short) 0X4,BigInteger.valueOf(1));
 
        // OutputActions(OFActionsList);
 
@@ -105,7 +134,7 @@ public class ActionConvertorTest {
 
         SetFieldBuilder matchBuilder = setFA;
 
-        matchBuilder.setInPort(2125L);
+        matchBuilder.setInPort(new NodeConnectorId("openflow:1:2125"));
 
         SetFieldBuilder setFB = new SetFieldBuilder();
 
@@ -165,12 +194,14 @@ public class ActionConvertorTest {
 
     }
 
-    private void OutputActions(List<ActionsList> oFActionsList) {
+    // TODO - check if this method is needed (private and never used locally) - see line 94
+    private void OutputActions(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common
+            .action.rev130731.actions.grouping.Action> oFActionsList) {
 
         for (int item = 0; item < oFActionsList.size(); item++) {
 
-            org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = oFActionsList
-                    .get(item).getAction();
+            org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action action = oFActionsList
+                    .get(item);
 
             if (action.getType().equals(Output.class)) {
                 Assert.assertEquals((Integer) 10, (action.getAugmentation(MaxLengthAction.class)).getMaxLength());
@@ -388,6 +419,24 @@ public class ActionConvertorTest {
         actions.add(actionItem++, AB1.build());
     }
 
+    /**
+     * testing {@link ActionConvertor#ofToSALPushMplsAction(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action)}
+     * with OF-1.3, IPv6 
+     */
+    @Test
+    public void testOFtoSALPushMplsAction() {
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder 
+        = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
+        
+        actionBuilder.setType(PushVlan.class);
+        EthertypeActionBuilder ethertypeActionBuilder = new EthertypeActionBuilder();
+        ethertypeActionBuilder.setEthertype(new EtherType(new Integer(34888)));
+        actionBuilder.addAugmentation(EthertypeAction.class, ethertypeActionBuilder.build());
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action action = actionBuilder.build(); 
+
+        Assert.assertEquals(34888, ActionConvertor.ofToSALPushMplsAction(action).getPushMplsAction().getEthernetType().intValue());
+    }
+
     private void setQueueActionData() {
 
         SetQueueActionBuilder setQB = new SetQueueActionBuilder();
@@ -399,5 +448,177 @@ public class ActionConvertorTest {
         actions.add(actionItem++, AB1.build());
 
     }
+    
+    /**
+     * testing {@link ActionConvertor#SalToOFSetNwDst(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
+     * with OF-1.0, IPv4 
+     */
+    @Test
+    public void testSalToOFSetNwDst10v4() {
+        short version = 1;
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
+        Address address;
+        address = new Ipv4Builder().setIpv4Address(new Ipv4Prefix("10.0.0.1")).build();
+        SetNwDstActionCase action = provisionNwDstActionBuilder(address);
+        ActionConvertor.SalToOFSetNwDst(action, actionBuilder, version);
+        Assert.assertEquals(SetNwDst.class, actionBuilder.getType());
+        Assert.assertEquals("10.0.0.1", actionBuilder.getAugmentation(IpAddressAction.class).getIpAddress().getValue());
+    }
+
+    /**
+     * testing {@link ActionConvertor#SalToOFSetNwDst(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
+     * with OF-1.0, IPv6 
+     */
+    @Test
+    public void testSalToOFSetNwDst10v6() {
+        short version = 1;
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
+        Address address;
+        address = new Ipv6Builder().setIpv6Address(new Ipv6Prefix("2001:0db8:85a3:0042:1000:8a2e:0370:7334")).build();
+        SetNwDstActionCase action = provisionNwDstActionBuilder(address);
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action ofAction = ActionConvertor.SalToOFSetNwDst(action, actionBuilder, version);
+        Assert.assertNull(ofAction);
+    }
+    
+    
+    /**
+     * testing {@link ActionConvertor#SalToOFSetNwDst(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
+     * with OF-1.3, IPv4 
+     */
+    @Test
+    public void testSalToOFSetNwDst13v4() {
+        short version = 4;
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
+        Address address;
+        address = new Ipv4Builder().setIpv4Address(new Ipv4Prefix("10.0.0.1")).build();
+        SetNwDstActionCase action = provisionNwDstActionBuilder(address);
+        ActionConvertor.SalToOFSetNwDst(action, actionBuilder, version);
+        Assert.assertEquals(SetField.class, actionBuilder.getType());
+        MatchEntries matchEntry = actionBuilder.getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0);
+        Assert.assertEquals(Ipv4Dst.class, matchEntry.getOxmMatchField());
+        Assert.assertEquals("10.0.0.1", matchEntry.getAugmentation(Ipv4AddressMatchEntry.class).getIpv4Address().getValue());
+    }
+    
+    
+    /**
+     * testing {@link ActionConvertor#SalToOFSetNwDst(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
+     * with OF-1.3, IPv6 
+     */
+    @Test
+    public void testSalToOFSetNwDst13v6() {
+        short version = 4;
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
+        Address address;
+        address = new Ipv6Builder().setIpv6Address(new Ipv6Prefix("2001:0db8:85a3:0042:1000:8a2e:0370:7334")).build();
+        SetNwDstActionCase action = provisionNwDstActionBuilder(address);
+        ActionConvertor.SalToOFSetNwDst(action, actionBuilder, version);
+        Assert.assertEquals(SetField.class, actionBuilder.getType());
+        MatchEntries matchEntry = actionBuilder.getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0);
+        Assert.assertEquals(Ipv6Dst.class, matchEntry.getOxmMatchField());
+        Assert.assertEquals("2001:0db8:85a3:0042:1000:8a2e:0370:7334", matchEntry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue());
+    }
+    
+   
+    
+    /**
+     * testing {@link ActionConvertor#SalToOFSetNwSrc(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
+     * with OF-1.0, IPv4 
+     */
+    @Test
+    public void testSalToOFSetNwSrc10v4() {
+        short version = 1;
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
+        Address address;
+        address = new Ipv4Builder().setIpv4Address(new Ipv4Prefix("10.0.0.1")).build();
+        SetNwSrcActionCase action = provisionNwSrcActionBuilder(address);
+        ActionConvertor.SalToOFSetNwSrc(action, actionBuilder, version);
+        Assert.assertEquals(SetNwSrc.class, actionBuilder.getType());
+        Assert.assertEquals("10.0.0.1", actionBuilder.getAugmentation(IpAddressAction.class).getIpAddress().getValue());
+    }
+
+    /**
+     * testing {@link ActionConvertor#SalToOFSetNwSrc(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
+     * with OF-1.0, IPv6 
+     */
+    @Test
+    public void testSalToOFSetNwSrc10v6() {
+        short version = 1;
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
+        Address address;
+        address = new Ipv6Builder().setIpv6Address(new Ipv6Prefix("2001:0db8:85a3:0042:1000:8a2e:0370:7334")).build();
+        SetNwSrcActionCase action = provisionNwSrcActionBuilder(address);
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action ofAction = ActionConvertor.SalToOFSetNwSrc(action, actionBuilder, version);
+        Assert.assertNull(ofAction);
+    }
+
+    /**
+     * testing {@link ActionConvertor#SalToOFSetNwSrc(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
+     * with OF-1.3, IPv4 
+     */
+    @Test
+    public void testSalToOFSetNwSrc13v4() {
+        short version = 4;
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
+        Address address;
+        address = new Ipv4Builder().setIpv4Address(new Ipv4Prefix("10.0.0.1")).build();
+        SetNwSrcActionCase action = provisionNwSrcActionBuilder(address);
+        ActionConvertor.SalToOFSetNwSrc(action, actionBuilder, version);
+        Assert.assertEquals(SetField.class, actionBuilder.getType());
+        MatchEntries matchEntry = actionBuilder.getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0);
+        Assert.assertEquals(Ipv4Src.class, matchEntry.getOxmMatchField());
+        Assert.assertEquals("10.0.0.1", matchEntry.getAugmentation(Ipv4AddressMatchEntry.class).getIpv4Address().getValue());
+    }
+
+    /**
+     * testing {@link ActionConvertor#SalToOFSetNwSrc(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
+     * with OF-1.3, IPv6 
+     */
+    @Test
+    public void testSalToOFSetNwSrc13v6() {
+        short version = 4;
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
+        Address address;
+        address = new Ipv6Builder().setIpv6Address(new Ipv6Prefix("2001:0db8:85a3:0042:1000:8a2e:0370:7334")).build();
+        SetNwSrcActionCase action = provisionNwSrcActionBuilder(address);
+        ActionConvertor.SalToOFSetNwSrc(action, actionBuilder, version);
+        Assert.assertEquals(SetField.class, actionBuilder.getType());
+        MatchEntries matchEntry = actionBuilder.getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0);
+        Assert.assertEquals(Ipv6Src.class, matchEntry.getOxmMatchField());
+        Assert.assertEquals("2001:0db8:85a3:0042:1000:8a2e:0370:7334", matchEntry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue());
+    }
+
+    /**
+     * testing {@link ActionConvertor#ofToSALPopMplsAction(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action)}
+     * with OF-1.3, IPv6 
+     */
+    @Test
+    public void testOFtoSALPopMplsAction() {
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder 
+        = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
+        
+        actionBuilder.setType(PopMpls.class);
+        EthertypeActionBuilder ethertypeActionBuilder = new EthertypeActionBuilder();
+        ethertypeActionBuilder.setEthertype(new EtherType(new Integer(34888)));
+        actionBuilder.addAugmentation(EthertypeAction.class, ethertypeActionBuilder.build());
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action action = actionBuilder.build(); 
+
+        Assert.assertEquals(34888, ActionConvertor.ofToSALPopMplsAction(action).getPopMplsAction().getEthernetType().intValue());
+    }
+
+    private static SetNwDstActionCase provisionNwDstActionBuilder(Address address) {
+        SetNwDstAction nwDstAction = new SetNwDstActionBuilder().setAddress(address).build();
+        SetNwDstActionCase action = new SetNwDstActionCaseBuilder()
+            .setSetNwDstAction(nwDstAction)
+            .build(); 
+        return action;
+    }
+    
+    private static SetNwSrcActionCase provisionNwSrcActionBuilder(Address address) {
+        SetNwSrcAction nwSrcAction = new SetNwSrcActionBuilder().setAddress(address).build();
+        SetNwSrcActionCase action = new SetNwSrcActionCaseBuilder()
+            .setSetNwSrcAction(nwSrcAction)
+            .build(); 
+        return action;
+    }
 
 }
\ No newline at end of file