2 * Copyright (c) 2016 Cisco Systems. All rights reserved.
\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
9 package org.opendaylight.groupbasedpolicy.renderer.vpp.commands;
\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.rev161214.Tap;
\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.VppInterfaceAugmentation;
\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.VppInterfaceAugmentationBuilder;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.interfaces._interface.L2Builder;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.interfaces._interface.TapBuilder;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.l2.base.attributes.interconnection.BridgeBasedBuilder;
\r
34 import java.util.concurrent.ExecutionException;
\r
36 public class TapPortCommandTest extends VppRendererDataBrokerTest {
\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
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
50 private final static VppInterfaceAugmentationBuilder vppAugmentationBuilder = new VppInterfaceAugmentationBuilder()
\r
51 .setTap(new TapBuilder().setMac(MAC_ADDRESS).setTapName(TAP_NAME).setDeviceInstance(DEVICE_ID).build());
\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
59 private final static InterfaceBuilder interfaceBuilder =
\r
60 new InterfaceBuilder().setKey(new InterfaceKey(INTERFACE_NAME))
\r
62 .setDescription(DESCRIPTION)
\r
64 .setName(INTERFACE_NAME)
\r
65 .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled);
\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
72 private DataBroker dataBroker;
\r
75 public void init() {
\r
76 dataBroker = getDataBroker();
\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
92 Optional<Interface> optional = executeCommand(rwTx, addCommand);
\r
94 Assert.assertTrue(optional.isPresent());
\r
95 Assert.assertEquals(BASIC_INTERFACE, optional.get());
\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
113 Optional<Interface> optional = executeCommand(rwTx, addCommand);
\r
115 Assert.assertTrue(optional.isPresent());
\r
116 Assert.assertEquals(BASIC_INTERFACE_WITH_BD, optional.get());
\r
120 private Optional<Interface> executeCommand(ReadWriteTransaction rwTx, TapPortCommand addCommand)
\r
121 throws ExecutionException, InterruptedException {
\r
122 addCommand.execute(rwTx);
\r
124 rwTx.submit().get();
\r
126 ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
\r
128 return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
\r
129 VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), rTx);
\r
133 public void testDeleteTapPort() throws ExecutionException, InterruptedException {
\r
134 ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
\r
136 rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),
\r
137 BASIC_INTERFACE, true);
\r
138 rwTx.submit().get();
\r
140 Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
\r
141 VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());
\r
143 Assert.assertTrue(optional.isPresent());
\r
145 TapPortCommand deleteCommand = TapPortCommand.builder()
\r
146 .setOperation(General.Operations.DELETE)
\r
147 .setInterfaceName(INTERFACE_NAME)
\r
148 .setTapName(TAP_NAME)
\r
151 ReadWriteTransaction rwTxDel = dataBroker.newReadWriteTransaction();
\r
152 deleteCommand.execute(rwTxDel);
\r
155 Optional<Interface> optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
\r
156 VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())),
\r
157 dataBroker.newReadOnlyTransaction());
\r
159 Assert.assertFalse(optionalDeleted.isPresent());
\r
163 public void testUpdateTapPort() throws ExecutionException, InterruptedException {
\r
164 ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
\r
166 rwTx.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()),
\r
167 BASIC_INTERFACE, true);
\r
168 rwTx.submit().get();
\r
170 Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
\r
171 VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction());
\r
173 Assert.assertTrue(optional.isPresent());
\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
185 ReadWriteTransaction rwTxUpd = dataBroker.newReadWriteTransaction();
\r
186 updateCommand.execute(rwTxUpd);
\r
187 rwTxUpd.submit().get();
\r
189 Optional<Interface> optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
\r
190 VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())),
\r
191 dataBroker.newReadOnlyTransaction());
\r
193 Assert.assertTrue(optionalUpdated.isPresent());
\r
194 Interface updatedInterface = optionalUpdated.get();
\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