Introduced InterfaceManager in VPP renderer
[groupbasedpolicy.git] / renderers / vpp / src / test / java / org / opendaylight / groupbasedpolicy / renderer / vpp / commands / VhostUserCommandTest.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 org.junit.Assert;\r
12 import org.junit.Before;\r
13 import org.junit.Test;\r
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
15 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
16 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;\r
17 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
18 import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest;\r
19 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;\r
20 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;\r
21 import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;\r
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;\r
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;\r
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VhostUserRole;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentation;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentationBuilder;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.L2Builder;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VhostUser;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VhostUserBuilder;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.attributes.interconnection.BridgeBased;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.attributes.interconnection.BridgeBasedBuilder;\r
33 \r
34 import com.google.common.base.Optional;\r
35 \r
36 public class VhostUserCommandTest extends VppRendererDataBrokerTest {\r
37 \r
38     private final static String BRIDGE_DOMAIN = "testBD";\r
39     private final static String DESCRIPTION = "used for testing";\r
40     private final static String INTERFACE_NAME = "testInterface";\r
41     private final static String SOCKET_NAME = "soc1";\r
42 \r
43     private final static String UPD_BRIDGE_DOMAIN = "testBD2";\r
44     private final static String UPD_DESCRIPTION = "updated description";\r
45     private final static String UPD_SOCKET_NAME = "soc2";\r
46     private final static short SPLIT_HORIZON_GROUP_DEFAULT = 0;\r
47     private final static boolean IS_BRIDGED_DEFAULT = false;\r
48 \r
49     private static Interface BASIC_INTERFACE;\r
50 \r
51     private DataBroker dataBroker;\r
52 \r
53     @Before\r
54     public void init() {\r
55         dataBroker = getDataBroker();\r
56 \r
57         VhostUser vhostUser = new VhostUserBuilder().setRole(VhostUserRole.Server).setSocket(SOCKET_NAME).build();\r
58 \r
59         VppInterfaceAugmentation vppAugmentation = new VppInterfaceAugmentationBuilder().setVhostUser(vhostUser)\r
60             .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN)\r
61                 .setSplitHorizonGroup(SPLIT_HORIZON_GROUP_DEFAULT)\r
62                 .setBridgedVirtualInterface(IS_BRIDGED_DEFAULT)\r
63                 .build()).build())\r
64             .build();\r
65 \r
66         BASIC_INTERFACE =\r
67                 new InterfaceBuilder().setDescription(DESCRIPTION)\r
68                     .setEnabled(true)\r
69                     .setKey(new InterfaceKey(INTERFACE_NAME))\r
70                     .setName(INTERFACE_NAME)\r
71                     .setType(\r
72                             org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VhostUser.class)\r
73                     .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled)\r
74                     .addAugmentation(VppInterfaceAugmentation.class, vppAugmentation)\r
75                     .build();\r
76     }\r
77 \r
78     @Test\r
79     public void AddVhostTest() {\r
80         ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();\r
81         VhostUserCommand addCommand = VhostUserCommand.builder()\r
82             .setOperation(General.Operations.PUT)\r
83             .setName(INTERFACE_NAME)\r
84             .setDescription(DESCRIPTION)\r
85             .setRole(VhostUserRole.Server)\r
86             .setSocket(SOCKET_NAME)\r
87             .setBridgeDomain(BRIDGE_DOMAIN)\r
88             .setEnabled(true)\r
89             .build();\r
90 \r
91         addCommand.execute(transaction);\r
92 \r
93         transaction.submit();\r
94 \r
95         ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction();\r
96 \r
97         Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
98                 VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), readOnlyTransaction);\r
99 \r
100         Assert.assertTrue("Interface was not written to DS", optional.isPresent());\r
101 \r
102         Interface anInterface = optional.get();\r
103 \r
104         Assert.assertEquals(BASIC_INTERFACE, anInterface);\r
105 \r
106     }\r
107 \r
108     @Test\r
109     public void DeleteVhostTest() {\r
110         ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();\r
111 \r
112         transaction.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),\r
113                 BASIC_INTERFACE, true);\r
114         transaction.submit();\r
115 \r
116         Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
117                 VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());\r
118 \r
119         Assert.assertTrue("Interface was not written to DS", optional.isPresent());\r
120 \r
121         VhostUserCommand deleteCommand = VhostUserCommand.builder()\r
122                 .setOperation(General.Operations.DELETE)\r
123                 .setName(INTERFACE_NAME)\r
124                 .setSocket(SOCKET_NAME)\r
125                 .build();\r
126 \r
127         ReadWriteTransaction deleteTransaction = dataBroker.newReadWriteTransaction();\r
128         deleteCommand.execute(deleteTransaction);\r
129         deleteTransaction.submit();\r
130 \r
131         Optional<Interface> optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
132                 VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())),\r
133                 dataBroker.newReadOnlyTransaction());\r
134 \r
135         Assert.assertFalse("Interface was not deleted from DS", optionalDeleted.isPresent());\r
136     }\r
137 \r
138     @Test\r
139     public void UpdateVhostTest() {\r
140         ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();\r
141 \r
142         transaction.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),\r
143                 BASIC_INTERFACE, true);\r
144         transaction.submit();\r
145 \r
146         Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
147                 VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());\r
148 \r
149         Assert.assertTrue("Interface was not written to DS", optional.isPresent());\r
150 \r
151         VhostUserCommand updateCommand = VhostUserCommand.builder()\r
152             .setOperation(General.Operations.MERGE)\r
153             .setName(INTERFACE_NAME)\r
154             .setDescription(UPD_DESCRIPTION)\r
155             .setEnabled(false)\r
156             .setRole(VhostUserRole.Client)\r
157             .setSocket(UPD_SOCKET_NAME)\r
158             .setBridgeDomain(UPD_BRIDGE_DOMAIN)\r
159             .build();\r
160 \r
161         ReadWriteTransaction deleteTransaction = dataBroker.newReadWriteTransaction();\r
162         updateCommand.execute(deleteTransaction);\r
163         deleteTransaction.submit();\r
164 \r
165         Optional<Interface> optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
166                 VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())),\r
167                 dataBroker.newReadOnlyTransaction());\r
168 \r
169         Assert.assertTrue("Interface was not found in DS", optionalUpdated.isPresent());\r
170         Interface updatedInterface = optionalUpdated.get();\r
171 \r
172         Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription());\r
173         Assert.assertFalse(updatedInterface.isEnabled());\r
174         VppInterfaceAugmentation vppInterfaceAugmentation =\r
175                 updatedInterface.getAugmentation(VppInterfaceAugmentation.class);\r
176         Assert.assertEquals(VhostUserRole.Client, vppInterfaceAugmentation.getVhostUser().getRole());\r
177         Assert.assertEquals(UPD_SOCKET_NAME, vppInterfaceAugmentation.getVhostUser().getSocket());\r
178 \r
179         Assert.assertTrue(vppInterfaceAugmentation.getL2().getInterconnection() instanceof BridgeBased);\r
180 \r
181         Assert.assertEquals(UPD_BRIDGE_DOMAIN,\r
182                 ((BridgeBased) vppInterfaceAugmentation.getL2().getInterconnection()).getBridgeDomain());\r
183     }\r
184 }\r