Tap Port implementation in VPP renderer
[groupbasedpolicy.git] / renderers / vpp / src / test / java / org / opendaylight / groupbasedpolicy / renderer / vpp / commands / TapPortCommandTest.java
diff --git a/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/TapPortCommandTest.java b/renderers/vpp/src/test/java/org/opendaylight/groupbasedpolicy/renderer/vpp/commands/TapPortCommandTest.java
new file mode 100644 (file)
index 0000000..1e4bdcd
--- /dev/null
@@ -0,0 +1,205 @@
+/*\r
+ * Copyright (c) 2016 Cisco Systems. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.groupbasedpolicy.renderer.vpp.commands;\r
+\r
+import com.google.common.base.Optional;\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;\r
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
+import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest;\r
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;\r
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;\r
+import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.Tap;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentation;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentationBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.L2Builder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.TapBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.base.attributes.interconnection.BridgeBasedBuilder;\r
+\r
+import java.util.concurrent.ExecutionException;\r
+\r
+public class TapPortCommandTest extends VppRendererDataBrokerTest {\r
+\r
+    private final static String DESCRIPTION = "used for testing";\r
+    private final static String INTERFACE_NAME = "testInterface";\r
+    private final static String TAP_NAME = "testTap00:11:22:33:44:55";\r
+    private final static String BRIDGE_DOMAIN = "testBD";\r
+    private final static Long DEVICE_ID = 0L;\r
+    private final static PhysAddress MAC_ADDRESS = new PhysAddress("00:11:22:33:44:55");\r
+\r
+    private final static String UPD_DESCRIPTION = "updated description";\r
+    private final static PhysAddress UPD_MAC_ADDRESS = new PhysAddress("55:44:33:22:11:00");\r
+    private final static String UPD_TAP_NAME = "testTapUpd";\r
+    private final static Long UPD_DEVICE_ID = 1L;\r
+\r
+    private final static VppInterfaceAugmentationBuilder vppAugmentationBuilder = new VppInterfaceAugmentationBuilder()\r
+        .setTap(new TapBuilder().setMac(MAC_ADDRESS).setTapName(TAP_NAME).setDeviceInstance(DEVICE_ID).build());\r
+\r
+    private final static VppInterfaceAugmentationBuilder vppAugmentationBuilderWithBD =\r
+            new VppInterfaceAugmentationBuilder(vppAugmentationBuilder.build())\r
+                .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN)\r
+                    .setBridgedVirtualInterface(false)\r
+                    .build()).build());\r
+\r
+    private final static InterfaceBuilder interfaceBuilder =\r
+            new InterfaceBuilder().setKey(new InterfaceKey(INTERFACE_NAME))\r
+                .setEnabled(true)\r
+                .setDescription(DESCRIPTION)\r
+                .setType(Tap.class)\r
+                .setName(INTERFACE_NAME)\r
+                .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled);\r
+\r
+    private final static Interface BASIC_INTERFACE =\r
+            interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilder.build()).build();\r
+    private final static Interface BASIC_INTERFACE_WITH_BD = interfaceBuilder\r
+        .addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilderWithBD.build()).build();\r
+\r
+    private DataBroker dataBroker;\r
+\r
+    @Before\r
+    public void init() {\r
+        dataBroker = getDataBroker();\r
+    }\r
+\r
+    @Test\r
+    public void testAddTapPort() throws ExecutionException, InterruptedException {\r
+        ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
+        TapPortCommand addCommand = TapPortCommand.builder()\r
+            .setOperation(General.Operations.PUT)\r
+            .setInterfaceName(INTERFACE_NAME)\r
+            .setTapName(TAP_NAME)\r
+            .setDescription(DESCRIPTION)\r
+            .setDeviceInstance(DEVICE_ID)\r
+            .setPhysAddress(MAC_ADDRESS)\r
+            .setEnabled(true)\r
+            .build();\r
+\r
+        Optional<Interface> optional = executeCommand(rwTx, addCommand);\r
+\r
+        Assert.assertTrue(optional.isPresent());\r
+        Assert.assertEquals(BASIC_INTERFACE, optional.get());\r
+\r
+    }\r
+\r
+    @Test\r
+    public void testAddTapPort_WithBridgeDomain() throws ExecutionException, InterruptedException {\r
+        ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
+        TapPortCommand addCommand = TapPortCommand.builder()\r
+            .setOperation(General.Operations.PUT)\r
+            .setInterfaceName(INTERFACE_NAME)\r
+            .setTapName(TAP_NAME)\r
+            .setDescription(DESCRIPTION)\r
+            .setDeviceInstance(DEVICE_ID)\r
+            .setPhysAddress(MAC_ADDRESS)\r
+            .setBridgeDomain(BRIDGE_DOMAIN)\r
+            .setEnabled(true)\r
+            .build();\r
+\r
+        Optional<Interface> optional = executeCommand(rwTx, addCommand);\r
+\r
+        Assert.assertTrue(optional.isPresent());\r
+        Assert.assertEquals(BASIC_INTERFACE_WITH_BD, optional.get());\r
+\r
+    }\r
+\r
+    private Optional<Interface> executeCommand(ReadWriteTransaction rwTx, TapPortCommand addCommand)\r
+            throws ExecutionException, InterruptedException {\r
+        addCommand.execute(rwTx);\r
+\r
+        rwTx.submit().get();\r
+\r
+        ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();\r
+\r
+        return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
+                VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), rTx);\r
+    }\r
+\r
+    @Test\r
+    public void testDeleteTapPort() throws ExecutionException, InterruptedException {\r
+        ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
+\r
+        rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),\r
+                BASIC_INTERFACE, true);\r
+        rwTx.submit().get();\r
+\r
+        Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
+                VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());\r
+\r
+        Assert.assertTrue(optional.isPresent());\r
+\r
+        TapPortCommand deleteCommand = TapPortCommand.builder()\r
+            .setOperation(General.Operations.DELETE)\r
+            .setInterfaceName(INTERFACE_NAME)\r
+            .setTapName(TAP_NAME)\r
+            .build();\r
+\r
+        ReadWriteTransaction rwTxDel = dataBroker.newReadWriteTransaction();\r
+        deleteCommand.execute(rwTxDel);\r
+        rwTxDel.submit();\r
+\r
+        Optional<Interface> optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
+                VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())),\r
+                dataBroker.newReadOnlyTransaction());\r
+\r
+        Assert.assertFalse(optionalDeleted.isPresent());\r
+    }\r
+\r
+    @Test\r
+    public void testUpdateTapPort() throws ExecutionException, InterruptedException {\r
+        ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
+\r
+        rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),\r
+                BASIC_INTERFACE, true);\r
+        rwTx.submit().get();\r
+\r
+        Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
+                VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());\r
+\r
+        Assert.assertTrue(optional.isPresent());\r
+\r
+        TapPortCommand updateCommand = TapPortCommand.builder()\r
+            .setOperation(General.Operations.MERGE)\r
+            .setInterfaceName(INTERFACE_NAME)\r
+            .setTapName(UPD_TAP_NAME)\r
+            .setDescription(UPD_DESCRIPTION)\r
+            .setPhysAddress(UPD_MAC_ADDRESS)\r
+            .setDeviceInstance(UPD_DEVICE_ID)\r
+            .setEnabled(false)\r
+            .build();\r
+\r
+        ReadWriteTransaction rwTxUpd = dataBroker.newReadWriteTransaction();\r
+        updateCommand.execute(rwTxUpd);\r
+        rwTxUpd.submit().get();\r
+\r
+        Optional<Interface> optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
+                VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())),\r
+                dataBroker.newReadOnlyTransaction());\r
+\r
+        Assert.assertTrue(optionalUpdated.isPresent());\r
+        Interface updatedInterface = optionalUpdated.get();\r
+\r
+        Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription());\r
+        Assert.assertFalse(updatedInterface.isEnabled());\r
+        VppInterfaceAugmentation augmentation = updatedInterface.getAugmentation(VppInterfaceAugmentation.class);\r
+        Assert.assertEquals(INTERFACE_NAME, updatedInterface.getName());\r
+        Assert.assertEquals(UPD_DEVICE_ID, augmentation.getTap().getDeviceInstance());\r
+        Assert.assertEquals(UPD_MAC_ADDRESS, augmentation.getTap().getMac());\r
+        Assert.assertEquals(UPD_TAP_NAME, augmentation.getTap().getTapName());\r
+\r
+    }\r
+}\r