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