Initial opendaylight infrastructure commit!!
[controller.git] / opendaylight / sal / api / src / test / java / org / opendaylight / controller / sal / action / ActionTest.java
diff --git a/opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/action/ActionTest.java b/opendaylight/sal/api/src/test/java/org/opendaylight/controller/sal/action/ActionTest.java
new file mode 100644 (file)
index 0000000..cf0f022
--- /dev/null
@@ -0,0 +1,237 @@
+
+/*
+ * Copyright (c) 2013 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;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+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.utils.EtherTypes;
+import org.opendaylight.controller.sal.utils.NodeConnectorCreator;
+
+public class ActionTest {
+    @Test
+    public void tesActionCreationValidation() {
+        Action action = new PopVlan();
+        Assert.assertTrue(action.isValid());
+
+        byte mac[] = { (byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0x11,
+                (byte) 0x22, (byte) 0x33 };
+
+        action = new SetDlSrc(mac);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetDlSrc(mac);
+        Assert.assertTrue(action.isValid());
+    }
+
+    @Test
+    public void testSetVlanActionCreation() {
+        Action action = null;
+
+        action = new SetVlanId(2);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetVlanId(4095);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetVlanId(0);
+        Assert.assertFalse(action.isValid());
+
+        action = new SetVlanId(1);
+        Assert.assertFalse(action.isValid());
+
+        action = new SetVlanId(4096);
+        Assert.assertFalse(action.isValid());
+    }
+
+    @Test
+    public void testPushVlanActionCreation() {
+        Action action = null;
+
+        action = new PushVlan(EtherTypes.QINQ, 0x4, 0x1, 2000);
+        Assert.assertTrue(action.isValid());
+
+        action = new PushVlan(EtherTypes.QINQ.intValue(), 0x4, 0x1, 2000);
+        Assert.assertTrue(action.isValid());
+
+        action = new PushVlan(EtherTypes.OLDQINQ, 0x4, 2, 2000);
+        Assert.assertFalse(action.isValid());
+
+        action = new PushVlan(EtherTypes.VLANTAGGED, 0x4, 0, 2000);
+        Assert.assertTrue(action.isValid());
+
+        action = new PushVlan(EtherTypes.QINQ.intValue(), 0x4, 0x1, 5000);
+        Assert.assertFalse(action.isValid());
+
+        action = new PushVlan(EtherTypes.LLDP, 0x4, 0x1, 2000);
+        Assert.assertFalse(action.isValid());
+
+        action = new PushVlan(EtherTypes.PVSTP, 0x4, 2, 2000);
+        Assert.assertFalse(action.isValid());
+
+        action = new PushVlan(EtherTypes.QINQ, 0x4, -1, 2000);
+        Assert.assertFalse(action.isValid());
+    }
+
+    @Test
+    public void testSetVlanPcpActionCreation() {
+        Action action = null;
+
+        action = new SetVlanPcp(0x4);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetVlanPcp(0x8);
+        Assert.assertFalse(action.isValid());
+
+        action = new SetVlanPcp(-1);
+        Assert.assertFalse(action.isValid());
+    }
+
+    @Test
+    public void testSetVlanCfiActionCreation() {
+        Action action = null;
+
+        action = new SetVlanCfi(0x0);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetVlanCfi(0x1);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetVlanCfi(0x2);
+        Assert.assertFalse(action.isValid());
+
+        action = new SetVlanCfi(-1);
+        Assert.assertFalse(action.isValid());
+    }
+
+    @Test
+    public void testNetworkSetActionCreation() {
+        Action action = null;
+
+        InetAddress ip = null;
+        try {
+            ip = InetAddress.getByName("171.71.9.52");
+        } catch (UnknownHostException e) {
+            e.printStackTrace();
+        }
+
+        action = new SetNwSrc(ip);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetNwDst(ip);
+        Assert.assertTrue(action.isValid());
+
+        try {
+            ip = InetAddress.getByName("2001:420:281:1003:f2de:f1ff:fe71:728d");
+        } catch (UnknownHostException e) {
+            e.printStackTrace();
+        }
+        action = new SetNwSrc(ip);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetNwDst(ip);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetNwTos(0xf);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetNwTos(0xff);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetNwTos(0xff1);
+        Assert.assertFalse(action.isValid());
+
+        action = new SetNwTos(-1);
+        Assert.assertFalse(action.isValid());
+    }
+
+    @Test
+    public void testTransportSetActionCreation() {
+        Action action = null;
+
+        action = new SetTpSrc(50000);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetTpDst(65535);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetTpDst(0);
+        Assert.assertTrue(action.isValid());
+
+        action = new SetTpSrc(-1);
+        Assert.assertFalse(action.isValid());
+
+        action = new SetTpDst(-1);
+        Assert.assertFalse(action.isValid());
+
+        action = new SetTpSrc(65536);
+        Assert.assertFalse(action.isValid());
+
+        action = new SetTpDst(65536);
+        Assert.assertFalse(action.isValid());
+    }
+
+    @Test
+    public void testActionList() {
+        List<Action> actions = new ArrayList<Action>();
+        short portId = (short) 9;
+        Node node = null;
+        try {
+            node = new Node(Node.NodeIDType.OPENFLOW, new Long(0x55667788L));
+        } catch (ConstructionException e) {
+            // If we reach this point the exception was raised
+            // which is not expected
+            Assert.assertTrue(false);
+        }
+        NodeConnector nc = NodeConnectorCreator.createNodeConnector(portId,
+                node);
+        byte mac[] = { (byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0x11,
+                (byte) 0x22, (byte) 0x33 };
+        InetAddress ip = null;
+        try {
+            ip = InetAddress.getByName("1.1.1.1");
+        } catch (UnknownHostException e) {
+            e.printStackTrace();
+        }
+
+        actions.add(new SetDlSrc(mac));
+        actions.add(new SetNwSrc(ip));
+        actions.add(new Output(nc));
+        Assert.assertTrue(actions.size() == 3);
+        Assert.assertTrue(actions.get(0).isValid());
+
+        Action probe = new Output(nc);
+        Assert.assertTrue(actions.contains(probe));
+        Assert.assertFalse(actions.contains(new Output(NodeConnectorCreator
+                .createNodeConnector((short) 5, node))));
+        Assert.assertFalse(actions.contains(new Controller()));
+    }
+}