2 * Created by eranjsu on 28-Dec-15.
4 package org.opendaylight.genius.interfacemanager.test;
6 import com.google.common.base.Optional;
7 import com.google.common.util.concurrent.Futures;
8 import org.junit.Before;
10 import org.junit.runner.RunWith;
11 import org.mockito.Mock;
12 import org.mockito.runners.MockitoJUnitRunner;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
15 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
16 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
17 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
19 import org.opendaylight.genius.interfacemanager.IfmUtil;
20 import org.opendaylight.genius.interfacemanager.commons.InterfaceMetaUtils;
21 import org.opendaylight.genius.interfacemanager.renderer.hwvtep.utilities.SouthboundUtils;
22 import org.opendaylight.genius.interfacemanager.renderer.ovs.statehelpers.OvsInterfaceTopologyStateAddHelper;
23 import org.opendaylight.genius.interfacemanager.renderer.ovs.statehelpers.OvsInterfaceTopologyStateRemoveHelper;
24 import org.opendaylight.genius.interfacemanager.renderer.ovs.statehelpers.OvsInterfaceTopologyStateUpdateHelper;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.*;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdStatus;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdStatusBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntry;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.BridgeEntryKey;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntry;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntryBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge._interface.info.bridge.entry.BridgeInterfaceEntryKey;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntry;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntryBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.meta.rev160406.bridge.ref.info.BridgeRefEntryKey;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeGre;
41 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
42 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
43 import org.opendaylight.yangtools.concepts.ListenerRegistration;
44 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
46 import java.math.BigInteger;
47 import java.util.ArrayList;
48 import java.util.List;
50 import static org.mockito.Mockito.*;
53 @RunWith(MockitoJUnitRunner.class)
54 public class TopologyStateInterfaceTest {
56 BigInteger dpId = BigInteger.valueOf(1);
57 InstanceIdentifier<OvsdbBridgeAugmentation>bridgeIid = null;
58 InstanceIdentifier<BridgeEntry> bridgeEntryIid = null;
59 OvsdbBridgeAugmentation bridgeNew;
60 OvsdbBridgeAugmentation bridgeOld;
61 BridgeEntry bridgeEntry = null;
62 ParentRefs parentRefs = null;
63 InstanceIdentifier<Interface> interfaceInstanceIdentifier = null;
64 InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> interfaceStateIdentifier = null;
65 Interface tunnelInterfaceEnabled = null;
66 BridgeInterfaceEntry bridgeInterfaceEntry;
67 BridgeInterfaceEntryKey bridgeInterfaceEntryKey;
69 @Mock DataBroker dataBroker;
70 @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
71 @Mock ReadOnlyTransaction mockReadTx;
72 @Mock WriteTransaction mockWriteTx;
73 @Mock OvsdbTerminationPointAugmentation newTerminationPoint;
75 OvsInterfaceTopologyStateAddHelper addHelper;
76 OvsInterfaceTopologyStateRemoveHelper removeHelper;
77 OvsInterfaceTopologyStateUpdateHelper updateHelper;
80 public void setUp() throws Exception {
81 when(dataBroker.registerDataChangeListener(
82 any(LogicalDatastoreType.class),
83 any(InstanceIdentifier.class),
84 any(DataChangeListener.class),
85 any(DataChangeScope.class)))
86 .thenReturn(dataChangeListenerRegistration);
90 private void setupMocks()
92 Node node = new NodeBuilder().setKey(null).setNodeId(null).build();
93 tunnelInterfaceEnabled = InterfaceManagerTestUtil.buildTunnelInterface(dpId, InterfaceManagerTestUtil.tunnelInterfaceName, "Test Interface1", true, TunnelTypeGre.class
94 , "192.168.56.101", "192.168.56.102");
95 bridgeIid = InterfaceManagerTestUtil.getOvsdbAugmentationInstanceIdentifier(InterfaceManagerTestUtil.interfaceName, node);
96 bridgeNew = InterfaceManagerTestUtil.getOvsdbBridgeRef("s1");
97 bridgeOld = InterfaceManagerTestUtil.getOvsdbBridgeRef("s1");
98 bridgeEntryIid = InterfaceMetaUtils.getBridgeEntryIdentifier(new BridgeEntryKey(dpId));
99 interfaceInstanceIdentifier = IfmUtil.buildId(InterfaceManagerTestUtil.tunnelInterfaceName);
100 interfaceStateIdentifier = IfmUtil.buildStateInterfaceId(newTerminationPoint.getName());
101 bridgeInterfaceEntryKey = new BridgeInterfaceEntryKey(InterfaceManagerTestUtil.tunnelInterfaceName);
102 bridgeInterfaceEntry =
103 new BridgeInterfaceEntryBuilder().setKey(bridgeInterfaceEntryKey)
104 .setInterfaceName(tunnelInterfaceEnabled.getName()).build();
105 bridgeEntry = InterfaceManagerTestUtil.buildBridgeEntry(dpId, bridgeInterfaceEntry);
107 when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
108 when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
112 public void testAddTopologyStateInterface()
114 Optional<OvsdbBridgeAugmentation>expectedOvsdbBridgeAugmentation = Optional.of(bridgeNew);
115 Optional<BridgeEntry> expectedBridgeEntry = Optional.of(bridgeEntry);
116 Optional<Interface> expectedInterface = Optional.of(tunnelInterfaceEnabled);
118 doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
119 LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
120 doReturn(Futures.immediateCheckedFuture(expectedBridgeEntry)).when(mockReadTx).read(
121 LogicalDatastoreType.CONFIGURATION,bridgeEntryIid);
123 OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentation = new OvsdbBridgeAugmentationBuilder(bridgeNew);
124 ovsdbBridgeAugmentation.setDatapathId(DatapathId.getDefaultInstance("00:00:00:00:00:00:00:01"));
125 ovsdbBridgeAugmentation.setBridgeName(OvsdbBridgeName.getDefaultInstance("a"));
126 bridgeNew = ovsdbBridgeAugmentation.build();
128 addHelper.addPortToBridge(bridgeIid,bridgeNew,dataBroker);
130 BigInteger ovsdbDpId = BigInteger.valueOf(1);
131 BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(ovsdbDpId);
132 InstanceIdentifier<BridgeRefEntry> bridgeEntryId =
133 InterfaceMetaUtils.getBridgeRefEntryIdentifier(bridgeRefEntryKey);
134 BridgeRefEntryBuilder tunnelDpnBridgeEntryBuilder =
135 new BridgeRefEntryBuilder().setKey(bridgeRefEntryKey).setDpid(ovsdbDpId)
136 .setBridgeReference(new OvsdbBridgeRef(bridgeIid));
138 verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, bridgeEntryId, tunnelDpnBridgeEntryBuilder.build(), true);
142 public void testDeleteTopologyStateInterface()
144 Optional<BridgeEntry> expectedBridgeEntry = Optional.of(bridgeEntry);
145 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
146 LogicalDatastoreType.OPERATIONAL, bridgeIid);
147 doReturn(Futures.immediateCheckedFuture(expectedBridgeEntry)).when(mockReadTx).read(
148 LogicalDatastoreType.CONFIGURATION,bridgeEntryIid);
149 Optional<Interface> expectedInterface = Optional.of(tunnelInterfaceEnabled);
150 doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
151 LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
152 OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentation = new OvsdbBridgeAugmentationBuilder(bridgeOld);
153 ovsdbBridgeAugmentation.setDatapathId(DatapathId.getDefaultInstance("00:00:00:00:00:00:00:01"));
154 ovsdbBridgeAugmentation.setBridgeName(OvsdbBridgeName.getDefaultInstance("b"));
155 bridgeOld = ovsdbBridgeAugmentation.build();
157 removeHelper.removePortFromBridge(bridgeIid,bridgeOld,dataBroker);
159 BigInteger ovsdbDpId = BigInteger.valueOf(1);
160 BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(ovsdbDpId);
161 InstanceIdentifier<BridgeRefEntry> bridgeEntryId =
162 InterfaceMetaUtils.getBridgeRefEntryIdentifier(bridgeRefEntryKey);
164 verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL,bridgeEntryId);
168 public void testUpdateBridgeReferenceEntry()
170 Optional<OvsdbBridgeAugmentation>expectedOvsdbBridgeAugmentation = Optional.of(bridgeNew);
171 Optional<BridgeEntry> expectedBridgeEntry = Optional.of(bridgeEntry);
172 Optional<Interface> expectedInterface = Optional.of(tunnelInterfaceEnabled);
174 doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
175 LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
176 doReturn(Futures.immediateCheckedFuture(expectedBridgeEntry)).when(mockReadTx).read(
177 LogicalDatastoreType.CONFIGURATION,bridgeEntryIid);
178 doReturn(Futures.immediateCheckedFuture(expectedOvsdbBridgeAugmentation)).when(mockReadTx).read(
179 LogicalDatastoreType.OPERATIONAL, bridgeIid);
181 OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentation = new OvsdbBridgeAugmentationBuilder(bridgeNew);
182 ovsdbBridgeAugmentation.setDatapathId(DatapathId.getDefaultInstance("00:00:00:00:00:00:00:01"));
183 ovsdbBridgeAugmentation.setBridgeName(OvsdbBridgeName.getDefaultInstance("a"));
184 bridgeNew = ovsdbBridgeAugmentation.build();
186 updateHelper.updateBridgeRefEntry(bridgeIid, bridgeNew, bridgeOld, dataBroker);
190 public void testUpdateTunnelState(){
192 List<InterfaceBfdStatus> interfaceBfdStatus = new ArrayList<InterfaceBfdStatus>();
193 interfaceBfdStatus.add(new InterfaceBfdStatusBuilder().setBfdStatusKey(SouthboundUtils.BFD_OP_STATE).setBfdStatusValue(SouthboundUtils.BFD_STATE_UP).build());
194 List bfdStatusSpy = spy(interfaceBfdStatus);
195 when(newTerminationPoint.getInterfaceBfdStatus()).thenReturn(bfdStatusSpy);
197 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState = new InterfaceBuilder().setKey(new InterfaceKey(InterfaceManagerTestUtil.interfaceName)).build();
198 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> expectedInterface = Optional.of(ifState);
200 doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
201 LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
202 updateHelper.updateTunnelState(dataBroker, newTerminationPoint);
205 InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> ifStateId =
206 IfmUtil.buildStateInterfaceId(null);
207 InterfaceBuilder ifaceBuilder = new InterfaceBuilder().setOperStatus(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus.Up);
208 ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(null));
209 verify(mockWriteTx).merge(LogicalDatastoreType.OPERATIONAL, ifStateId, ifaceBuilder.build());