2 * Copyright (c) 2016 Cisco Systems. All rights reserved.
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
9 package org.opendaylight.groupbasedpolicy.renderer.vpp.commands;
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;
34 import com.google.common.base.Optional;
36 public class VhostUserCommandTest extends VppRendererDataBrokerTest {
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";
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;
48 private static Interface BASIC_INTERFACE;
50 private DataBroker dataBroker;
54 dataBroker = getDataBroker();
56 VhostUser vhostUser = new VhostUserBuilder().setRole(VhostUserRole.Server).setSocket(SOCKET_NAME).build();
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)
65 new InterfaceBuilder().setDescription(DESCRIPTION)
67 .setKey(new InterfaceKey(INTERFACE_NAME))
68 .setName(INTERFACE_NAME)
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)
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)
89 addCommand.execute(transaction);
93 ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction();
95 Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
96 VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), readOnlyTransaction);
98 Assert.assertTrue("Interface was not written to DS", optional.isPresent());
100 Interface anInterface = optional.get();
102 Assert.assertEquals(BASIC_INTERFACE, anInterface);
107 public void DeleteVhostTest() {
108 ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
110 transaction.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),
111 BASIC_INTERFACE, true);
112 transaction.submit();
114 Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
115 VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());
117 Assert.assertTrue("Interface was not written to DS", optional.isPresent());
119 VhostUserCommand deleteCommand = VhostUserCommand.builder()
120 .setOperation(General.Operations.DELETE)
121 .setName(INTERFACE_NAME)
122 .setSocket(SOCKET_NAME)
125 ReadWriteTransaction deleteTransaction = dataBroker.newReadWriteTransaction();
126 deleteCommand.execute(deleteTransaction);
127 deleteTransaction.submit();
129 Optional<Interface> optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
130 VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())),
131 dataBroker.newReadOnlyTransaction());
133 Assert.assertFalse("Interface was not deleted from DS", optionalDeleted.isPresent());
137 public void UpdateVhostTest() {
138 ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction();
140 transaction.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),
141 BASIC_INTERFACE, true);
142 transaction.submit();
144 Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
145 VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());
147 Assert.assertTrue("Interface was not written to DS", optional.isPresent());
149 VhostUserCommand updateCommand = VhostUserCommand.builder()
150 .setOperation(General.Operations.MERGE)
151 .setName(INTERFACE_NAME)
152 .setDescription(UPD_DESCRIPTION)
154 .setRole(VhostUserRole.Client)
155 .setSocket(UPD_SOCKET_NAME)
156 .setBridgeDomain(UPD_BRIDGE_DOMAIN)
159 ReadWriteTransaction deleteTransaction = dataBroker.newReadWriteTransaction();
160 updateCommand.execute(deleteTransaction);
161 deleteTransaction.submit();
163 Optional<Interface> optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
164 VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())),
165 dataBroker.newReadOnlyTransaction());
167 Assert.assertTrue("Interface was not found in DS", optionalUpdated.isPresent());
168 Interface updatedInterface = optionalUpdated.get();
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());
177 Assert.assertTrue(vppInterfaceAugmentation.getL2().getInterconnection() instanceof BridgeBased);
179 Assert.assertEquals(UPD_BRIDGE_DOMAIN,
180 ((BridgeBased) vppInterfaceAugmentation.getL2().getInterconnection()).getBridgeDomain());