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