Merge "Cleanup RpcRoutingStrategy definition"
[controller.git] / opendaylight / sal / api / src / test / java / org / opendaylight / controller / sal / action / ActionTest.java
index eeddc0b9b0dc33df0424936535907ef651b13d4f..edcb3e2761fd1e8e02117eecb96c4685fa47d5fc 100644 (file)
@@ -1,12 +1,10 @@
-
 /*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ * Copyright (c) 2013-2014 Cisco Systems, Inc. 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
  */
-
 package org.opendaylight.controller.sal.action;
 
 import org.opendaylight.controller.sal.core.ConstructionException;
@@ -17,26 +15,19 @@ import java.util.List;
 
 import org.junit.Test;
 import org.junit.Assert;
-import org.opendaylight.controller.sal.action.Action;
-import org.opendaylight.controller.sal.action.Controller;
-import org.opendaylight.controller.sal.action.Output;
-import org.opendaylight.controller.sal.action.PopVlan;
-import org.opendaylight.controller.sal.action.PushVlan;
-import org.opendaylight.controller.sal.action.SetDlSrc;
-import org.opendaylight.controller.sal.action.SetNwDst;
-import org.opendaylight.controller.sal.action.SetNwSrc;
-import org.opendaylight.controller.sal.action.SetNwTos;
-import org.opendaylight.controller.sal.action.SetTpDst;
-import org.opendaylight.controller.sal.action.SetTpSrc;
-import org.opendaylight.controller.sal.action.SetVlanCfi;
-import org.opendaylight.controller.sal.action.SetVlanId;
-import org.opendaylight.controller.sal.action.SetVlanPcp;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.core.Property;
+import org.opendaylight.controller.sal.core.Tables;
+import org.opendaylight.controller.sal.core.Tier;
 import org.opendaylight.controller.sal.utils.EtherTypes;
 import org.opendaylight.controller.sal.utils.NodeConnectorCreator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ActionTest {
+    protected static final Logger logger = LoggerFactory
+    .getLogger(ActionTest.class);
     @Test
     public void tesActionCreationValidation() {
         Action action = new PopVlan();
@@ -99,6 +90,24 @@ public class ActionTest {
 
         action = new PushVlan(EtherTypes.QINQ, 0x4, -1, 2000);
         Assert.assertFalse(action.isValid());
+
+        // OF 1.3 PUSH_VLAN test.
+        for (EtherTypes tag: EtherTypes.values()) {
+            int t = tag.intValue();
+            boolean valid =
+                (tag == EtherTypes.VLANTAGGED || tag == EtherTypes.QINQ);
+            PushVlan pv = new PushVlan(tag);
+            Assert.assertEquals(valid, pv.isValid());
+            if (valid) {
+                Assert.assertEquals(t, pv.getTag());
+            }
+
+            pv = new PushVlan(t);
+            Assert.assertEquals(valid, pv.isValid());
+            if (valid) {
+                Assert.assertEquals(t, pv.getTag());
+            }
+        }
     }
 
     @Test
@@ -140,7 +149,7 @@ public class ActionTest {
         try {
             ip = InetAddress.getByName("171.71.9.52");
         } catch (UnknownHostException e) {
-            e.printStackTrace();
+            logger.error("",e);
         }
 
         action = new SetNwSrc(ip);
@@ -152,7 +161,7 @@ public class ActionTest {
         try {
             ip = InetAddress.getByName("2001:420:281:1003:f2de:f1ff:fe71:728d");
         } catch (UnknownHostException e) {
-            e.printStackTrace();
+            logger.error("", e);
         }
         action = new SetNwSrc(ip);
         Assert.assertTrue(action.isValid());
@@ -163,9 +172,12 @@ public class ActionTest {
         action = new SetNwTos(0xf);
         Assert.assertTrue(action.isValid());
 
-        action = new SetNwTos(0xff);
+        action = new SetNwTos(0x3f);
         Assert.assertTrue(action.isValid());
 
+        action = new SetNwTos(0x40);
+        Assert.assertFalse(action.isValid());
+
         action = new SetNwTos(0xff1);
         Assert.assertFalse(action.isValid());
 
@@ -183,8 +195,11 @@ public class ActionTest {
         action = new SetTpDst(65535);
         Assert.assertTrue(action.isValid());
 
+        action = new SetTpSrc(0);
+        Assert.assertTrue(action.isValid());
+
         action = new SetTpDst(0);
-        Assert.assertFalse(action.isValid());
+        Assert.assertTrue(action.isValid());
 
         action = new SetTpSrc(-1);
         Assert.assertFalse(action.isValid());
@@ -199,6 +214,29 @@ public class ActionTest {
         Assert.assertFalse(action.isValid());
     }
 
+    @Test
+    public void testNextHopActionCreation() {
+        SetNextHop action = null;
+
+        InetAddress ip = null;
+        try {
+            ip = InetAddress.getByName("171.71.9.52");
+        } catch (UnknownHostException e) {
+            logger.error("", e);
+        }
+
+        action = new SetNextHop(ip);
+        Assert.assertTrue(action.getAddress().equals(ip));
+
+        try {
+            ip = InetAddress.getByName("2001:420:281:1003:f2de:f1ff:fe71:728d");
+        } catch (UnknownHostException e) {
+            logger.error("", e);
+        }
+        action = new SetNextHop(ip);
+        Assert.assertTrue(action.getAddress().equals(ip));
+    }
+
     @Test
     public void testActionList() {
         List<Action> actions = new ArrayList<Action>();
@@ -219,7 +257,7 @@ public class ActionTest {
         try {
             ip = InetAddress.getByName("1.1.1.1");
         } catch (UnknownHostException e) {
-            e.printStackTrace();
+            logger.error("",e);
         }
 
         actions.add(new SetDlSrc(mac));
@@ -234,4 +272,89 @@ public class ActionTest {
                 .createNodeConnector((short) 5, node))));
         Assert.assertFalse(actions.contains(new Controller()));
     }
+
+    @Test
+    public void testMetadata() {
+        Property tier1 = new Tier(1);
+        Property tier2 = new Tier(2);
+        Property table1 = new Tables((byte)0x7f);
+        Action a1 = new PopVlan();
+        List<Property> resprops = null;
+        resprops = a1.getMetadatas();
+        // This should be an empty list
+        Assert.assertTrue(resprops.isEmpty());
+        a1.setMetadata("tier1", tier1);
+        a1.setMetadata("tier2", tier2);
+        a1.setMetadata("table1", table1);
+        resprops = a1.getMetadatas();
+        // Check for the number of elements in it
+        Assert.assertTrue(resprops.size() == 3);
+        // Check if the elements are in it
+        Assert.assertTrue(resprops.contains(tier1));
+        Assert.assertTrue(resprops.contains(tier2));
+        Assert.assertTrue(resprops.contains(table1));
+        // Check for single elements retrieve
+        Assert.assertTrue(a1.getMetadata("tier1").equals(tier1));
+        Assert.assertTrue(a1.getMetadata("tier2").equals(tier2));
+        Assert.assertTrue(a1.getMetadata("table1").equals(table1));
+        // Now remove an element and make sure the remaining are
+        // correct
+        a1.removeMetadata("tier1");
+
+        resprops = a1.getMetadatas();
+        // Check for the number of elements in it
+        Assert.assertTrue(resprops.size() == 2);
+        // Check if the elements are in it
+        Assert.assertFalse(resprops.contains(tier1));
+        Assert.assertTrue(resprops.contains(tier2));
+        Assert.assertTrue(resprops.contains(table1));
+        // Check for single elements retrieve
+        Assert.assertTrue(a1.getMetadata("table1").equals(table1));
+        Assert.assertTrue(a1.getMetadata("tier2").equals(tier2));
+        Assert.assertNull(a1.getMetadata("tier1"));
+
+        // Check for an element never existed
+        Assert.assertNull(a1.getMetadata("table100"));
+
+        // Remove them all
+        a1.removeMetadata("tier2");
+        a1.removeMetadata("table1");
+
+        // Remove also a non-existent one
+        a1.removeMetadata("table100");
+
+        resprops = a1.getMetadatas();
+        // Check there are no elements left
+        Assert.assertTrue(resprops.size() == 0);
+
+        // Now check for exception on setting null values
+        try {
+            a1.setMetadata("foo", null);
+            // The line below should never be reached
+            Assert.assertTrue(false);
+        } catch (NullPointerException nue) {
+            // NPE should be raised for null value
+            Assert.assertTrue(true);
+        }
+
+        // Now check on using null key
+        try {
+            a1.setMetadata(null, table1);
+            // The line below should never be reached
+            Assert.assertTrue(false);
+        } catch (NullPointerException nue) {
+            // NPE should be raised for null value
+            Assert.assertTrue(true);
+        }
+
+        // Now check on using null key and null value
+        try {
+            a1.setMetadata(null, null);
+            // The line below should never be reached
+            Assert.assertTrue(false);
+        } catch (NullPointerException nue) {
+            // NPE should be raised for null value
+            Assert.assertTrue(true);
+        }
+    }
 }