aeeb40681f3ab839e432f81616ea60a863f1ed58
[groupbasedpolicy.git] / renderers / vpp / src / test / java / org / opendaylight / groupbasedpolicy / renderer / vpp / commands / TapPortCommandTest.java
1 /*\r
2  * Copyright (c) 2016 Cisco Systems. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.groupbasedpolicy.renderer.vpp.commands;\r
10 \r
11 import com.google.common.base.Optional;\r
12 import org.junit.Assert;\r
13 import org.junit.Before;\r
14 import org.junit.Test;\r
15 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
16 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
17 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;\r
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
19 import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest;\r
20 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;\r
21 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;\r
22 import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;\r
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;\r
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;\r
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.Tap;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentation;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VppInterfaceAugmentationBuilder;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.L2Builder;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.interfaces._interface.TapBuilder;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.l2.config.attributes.interconnection.BridgeBasedBuilder;\r
33 \r
34 import java.util.concurrent.ExecutionException;\r
35 \r
36 public class TapPortCommandTest extends VppRendererDataBrokerTest {\r
37 \r
38     private final static String DESCRIPTION = "used for testing";\r
39     private final static String INTERFACE_NAME = "testInterface";\r
40     private final static String TAP_NAME = "testTap00:11:22:33:44:55";\r
41     private final static String BRIDGE_DOMAIN = "testBD";\r
42     private final static Long DEVICE_ID = 0L;\r
43     private final static PhysAddress MAC_ADDRESS = new PhysAddress("00:11:22:33:44:55");\r
44 \r
45     private final static String UPD_DESCRIPTION = "updated description";\r
46     private final static PhysAddress UPD_MAC_ADDRESS = new PhysAddress("55:44:33:22:11:00");\r
47     private final static String UPD_TAP_NAME = "testTapUpd";\r
48     private final static Long UPD_DEVICE_ID = 1L;\r
49 \r
50     private final static VppInterfaceAugmentationBuilder vppAugmentationBuilder = new VppInterfaceAugmentationBuilder()\r
51         .setTap(new TapBuilder().setMac(MAC_ADDRESS).setTapName(TAP_NAME).setDeviceInstance(DEVICE_ID).build());\r
52 \r
53     private final static VppInterfaceAugmentationBuilder vppAugmentationBuilderWithBD =\r
54             new VppInterfaceAugmentationBuilder(vppAugmentationBuilder.build())\r
55                 .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN)\r
56                     .setBridgedVirtualInterface(false).setSplitHorizonGroup((short)0)\r
57                     .build()).build());\r
58 \r
59     private final static InterfaceBuilder interfaceBuilder =\r
60             new InterfaceBuilder().setKey(new InterfaceKey(INTERFACE_NAME))\r
61                 .setEnabled(true)\r
62                 .setDescription(DESCRIPTION)\r
63                 .setType(Tap.class)\r
64                 .setName(INTERFACE_NAME)\r
65                 .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled);\r
66 \r
67     private final static Interface BASIC_INTERFACE =\r
68             interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilder.build()).build();\r
69     private final static Interface BASIC_INTERFACE_WITH_BD = interfaceBuilder\r
70         .addAugmentation(VppInterfaceAugmentation.class, vppAugmentationBuilderWithBD.build()).build();\r
71 \r
72     private DataBroker dataBroker;\r
73 \r
74     @Before\r
75     public void init() {\r
76         dataBroker = getDataBroker();\r
77     }\r
78 \r
79     @Test\r
80     public void testAddTapPort() throws ExecutionException, InterruptedException {\r
81         ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
82         TapPortCommand addCommand = TapPortCommand.builder()\r
83             .setOperation(General.Operations.PUT)\r
84             .setInterfaceName(INTERFACE_NAME)\r
85             .setTapName(TAP_NAME)\r
86             .setDescription(DESCRIPTION)\r
87             .setDeviceInstance(DEVICE_ID)\r
88             .setPhysAddress(MAC_ADDRESS)\r
89             .setEnabled(true)\r
90             .build();\r
91 \r
92         Optional<Interface> optional = executeCommand(rwTx, addCommand);\r
93 \r
94         Assert.assertTrue(optional.isPresent());\r
95         Assert.assertEquals(BASIC_INTERFACE, optional.get());\r
96 \r
97     }\r
98 \r
99     @Test\r
100     public void testAddTapPort_WithBridgeDomain() throws ExecutionException, InterruptedException {\r
101         ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
102         TapPortCommand addCommand = TapPortCommand.builder()\r
103             .setOperation(General.Operations.PUT)\r
104             .setInterfaceName(INTERFACE_NAME)\r
105             .setTapName(TAP_NAME)\r
106             .setDescription(DESCRIPTION)\r
107             .setDeviceInstance(DEVICE_ID)\r
108             .setPhysAddress(MAC_ADDRESS)\r
109             .setBridgeDomain(BRIDGE_DOMAIN)\r
110             .setEnabled(true)\r
111             .build();\r
112 \r
113         Optional<Interface> optional = executeCommand(rwTx, addCommand);\r
114 \r
115         Assert.assertTrue(optional.isPresent());\r
116         Assert.assertEquals(BASIC_INTERFACE_WITH_BD, optional.get());\r
117 \r
118     }\r
119 \r
120     private Optional<Interface> executeCommand(ReadWriteTransaction rwTx, TapPortCommand addCommand)\r
121             throws ExecutionException, InterruptedException {\r
122         addCommand.execute(rwTx);\r
123 \r
124         rwTx.submit().get();\r
125 \r
126         ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();\r
127 \r
128         return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
129                 VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), rTx);\r
130     }\r
131 \r
132     @Test\r
133     public void testDeleteTapPort() throws ExecutionException, InterruptedException {\r
134         ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
135 \r
136         rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),\r
137                 BASIC_INTERFACE, true);\r
138         rwTx.submit().get();\r
139 \r
140         Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
141                 VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());\r
142 \r
143         Assert.assertTrue(optional.isPresent());\r
144 \r
145         TapPortCommand deleteCommand = TapPortCommand.builder()\r
146             .setOperation(General.Operations.DELETE)\r
147             .setInterfaceName(INTERFACE_NAME)\r
148             .setTapName(TAP_NAME)\r
149             .build();\r
150 \r
151         ReadWriteTransaction rwTxDel = dataBroker.newReadWriteTransaction();\r
152         deleteCommand.execute(rwTxDel);\r
153         rwTxDel.submit();\r
154 \r
155         Optional<Interface> optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
156                 VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())),\r
157                 dataBroker.newReadOnlyTransaction());\r
158 \r
159         Assert.assertFalse(optionalDeleted.isPresent());\r
160     }\r
161 \r
162     @Test\r
163     public void testUpdateTapPort() throws ExecutionException, InterruptedException {\r
164         ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();\r
165 \r
166         rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),\r
167                 BASIC_INTERFACE, true);\r
168         rwTx.submit().get();\r
169 \r
170         Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
171                 VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());\r
172 \r
173         Assert.assertTrue(optional.isPresent());\r
174 \r
175         TapPortCommand updateCommand = TapPortCommand.builder()\r
176             .setOperation(General.Operations.MERGE)\r
177             .setInterfaceName(INTERFACE_NAME)\r
178             .setTapName(UPD_TAP_NAME)\r
179             .setDescription(UPD_DESCRIPTION)\r
180             .setPhysAddress(UPD_MAC_ADDRESS)\r
181             .setDeviceInstance(UPD_DEVICE_ID)\r
182             .setEnabled(false)\r
183             .build();\r
184 \r
185         ReadWriteTransaction rwTxUpd = dataBroker.newReadWriteTransaction();\r
186         updateCommand.execute(rwTxUpd);\r
187         rwTxUpd.submit().get();\r
188 \r
189         Optional<Interface> optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
190                 VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())),\r
191                 dataBroker.newReadOnlyTransaction());\r
192 \r
193         Assert.assertTrue(optionalUpdated.isPresent());\r
194         Interface updatedInterface = optionalUpdated.get();\r
195 \r
196         Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription());\r
197         Assert.assertFalse(updatedInterface.isEnabled());\r
198         VppInterfaceAugmentation augmentation = updatedInterface.getAugmentation(VppInterfaceAugmentation.class);\r
199         Assert.assertEquals(INTERFACE_NAME, updatedInterface.getName());\r
200         Assert.assertEquals(UPD_DEVICE_ID, augmentation.getTap().getDeviceInstance());\r
201         Assert.assertEquals(UPD_MAC_ADDRESS, augmentation.getTap().getMac());\r
202         Assert.assertEquals(UPD_TAP_NAME, augmentation.getTap().getTapName());\r
203 \r
204     }\r
205 }\r