6938837b246beb99e51a4fab5884ae53aadf8f12
[vpnservice.git] / interfacemgr / interfacemgr-impl / src / test / java / org / opendaylight / vpnservice / interfacemgr / test / TopologyStateInterfaceTest.java
1 /**
2  * Created by eranjsu on 28-Dec-15.
3  */
4 package org.opendaylight.vpnservice.interfacemgr.test;
5
6 import com.google.common.base.Optional;
7 import com.google.common.util.concurrent.Futures;
8 import org.junit.Before;
9 import org.junit.Test;
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.vpnservice.interfacemgr.IfmUtil;
20 import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceMetaUtils;
21 import org.opendaylight.vpnservice.interfacemgr.renderer.hwvtep.utilities.SouthboundUtils;
22 import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.statehelpers.OvsInterfaceTopologyStateAddHelper;
23 import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.statehelpers.OvsInterfaceTopologyStateRemoveHelper;
24 import org.opendaylight.vpnservice.interfacemgr.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.opendaylight.params.xml.ns.yang.ovsdb.rev150105.*;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdStatus;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdStatusBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.BridgeEntry;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.BridgeEntryKey;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.bridge.entry.BridgeInterfaceEntry;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.bridge.entry.BridgeInterfaceEntryBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.bridge.entry.BridgeInterfaceEntryKey;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge.ref.info.BridgeRefEntry;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge.ref.info.BridgeRefEntryBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge.ref.info.BridgeRefEntryKey;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.ParentRefs;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeGre;
40 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
41 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
42 import org.opendaylight.yangtools.concepts.ListenerRegistration;
43 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
44
45 import java.math.BigInteger;
46 import java.util.ArrayList;
47 import java.util.List;
48
49 import static org.mockito.Mockito.*;
50
51
52 @RunWith(MockitoJUnitRunner.class)
53 public class TopologyStateInterfaceTest {
54
55     BigInteger dpId = BigInteger.valueOf(1);
56     InstanceIdentifier<OvsdbBridgeAugmentation>bridgeIid = null;
57     InstanceIdentifier<BridgeEntry> bridgeEntryIid = null;
58     OvsdbBridgeAugmentation bridgeNew;
59     OvsdbBridgeAugmentation bridgeOld;
60     BridgeEntry bridgeEntry = null;
61     ParentRefs parentRefs = null;
62     InstanceIdentifier<Interface> interfaceInstanceIdentifier = null;
63     Interface tunnelInterfaceEnabled = null;
64     BridgeInterfaceEntry bridgeInterfaceEntry;
65     BridgeInterfaceEntryKey bridgeInterfaceEntryKey;
66
67     @Mock DataBroker dataBroker;
68     @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
69     @Mock ReadOnlyTransaction mockReadTx;
70     @Mock WriteTransaction mockWriteTx;
71     @Mock OvsdbTerminationPointAugmentation newTerminationPoint;
72
73     OvsInterfaceTopologyStateAddHelper addHelper;
74     OvsInterfaceTopologyStateRemoveHelper removeHelper;
75     OvsInterfaceTopologyStateUpdateHelper updateHelper;
76
77     @Before
78     public void setUp() throws Exception {
79         when(dataBroker.registerDataChangeListener(
80                 any(LogicalDatastoreType.class),
81                 any(InstanceIdentifier.class),
82                 any(DataChangeListener.class),
83                 any(DataChangeScope.class)))
84                 .thenReturn(dataChangeListenerRegistration);
85         setupMocks();
86     }
87
88     private void setupMocks()
89     {
90         Node node = new NodeBuilder().setKey(null).setNodeId(null).build();
91         tunnelInterfaceEnabled = InterfaceManagerTestUtil.buildTunnelInterface(dpId, InterfaceManagerTestUtil.tunnelInterfaceName, "Test Interface1", true, TunnelTypeGre.class
92                 , "192.168.56.101", "192.168.56.102");
93         bridgeIid = InterfaceManagerTestUtil.getOvsdbAugmentationInstanceIdentifier(InterfaceManagerTestUtil.interfaceName, node);
94         bridgeNew = InterfaceManagerTestUtil.getOvsdbBridgeRef("s1");
95         bridgeOld = InterfaceManagerTestUtil.getOvsdbBridgeRef("s1");
96         bridgeEntryIid = InterfaceMetaUtils.getBridgeEntryIdentifier(new BridgeEntryKey(dpId));
97         interfaceInstanceIdentifier = IfmUtil.buildId(InterfaceManagerTestUtil.tunnelInterfaceName);
98         bridgeInterfaceEntryKey = new BridgeInterfaceEntryKey(InterfaceManagerTestUtil.tunnelInterfaceName);
99         bridgeInterfaceEntry =
100                 new BridgeInterfaceEntryBuilder().setKey(bridgeInterfaceEntryKey)
101                         .setInterfaceName(tunnelInterfaceEnabled.getName()).build();
102         bridgeEntry = InterfaceManagerTestUtil.buildBridgeEntry(dpId, bridgeInterfaceEntry);
103
104         when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
105         when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
106     }
107
108     @Test
109     public void testAddTopologyStateInterface()
110     {
111         Optional<OvsdbBridgeAugmentation>expectedOvsdbBridgeAugmentation = Optional.of(bridgeNew);
112         Optional<BridgeEntry> expectedBridgeEntry = Optional.of(bridgeEntry);
113         Optional<Interface> expectedInterface = Optional.of(tunnelInterfaceEnabled);
114
115         doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
116                 LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
117         doReturn(Futures.immediateCheckedFuture(expectedBridgeEntry)).when(mockReadTx).read(
118                 LogicalDatastoreType.CONFIGURATION,bridgeEntryIid);
119
120         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentation = new OvsdbBridgeAugmentationBuilder(bridgeNew);
121         ovsdbBridgeAugmentation.setDatapathId(DatapathId.getDefaultInstance("00:00:00:00:00:00:00:01"));
122         ovsdbBridgeAugmentation.setBridgeName(OvsdbBridgeName.getDefaultInstance("a"));
123         bridgeNew = ovsdbBridgeAugmentation.build();
124
125         addHelper.addPortToBridge(bridgeIid,bridgeNew,dataBroker);
126
127         BigInteger ovsdbDpId = BigInteger.valueOf(1);
128         BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(ovsdbDpId);
129         InstanceIdentifier<BridgeRefEntry> bridgeEntryId =
130                 InterfaceMetaUtils.getBridgeRefEntryIdentifier(bridgeRefEntryKey);
131         BridgeRefEntryBuilder tunnelDpnBridgeEntryBuilder =
132                 new BridgeRefEntryBuilder().setKey(bridgeRefEntryKey).setDpid(ovsdbDpId)
133                         .setBridgeReference(new OvsdbBridgeRef(bridgeIid));
134
135         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, bridgeEntryId, tunnelDpnBridgeEntryBuilder.build(), true);
136     }
137
138     @Test
139     public void testDeleteTopologyStateInterface()
140     {
141         doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
142                 LogicalDatastoreType.OPERATIONAL, bridgeIid);
143         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentation = new OvsdbBridgeAugmentationBuilder(bridgeOld);
144         ovsdbBridgeAugmentation.setDatapathId(DatapathId.getDefaultInstance("00:00:00:00:00:00:00:01"));
145         ovsdbBridgeAugmentation.setBridgeName(OvsdbBridgeName.getDefaultInstance("b"));
146         bridgeOld = ovsdbBridgeAugmentation.build();
147
148         removeHelper.removePortFromBridge(bridgeIid,bridgeOld,dataBroker);
149
150         BigInteger ovsdbDpId = BigInteger.valueOf(1);
151         BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(ovsdbDpId);
152         InstanceIdentifier<BridgeRefEntry> bridgeEntryId =
153                 InterfaceMetaUtils.getBridgeRefEntryIdentifier(bridgeRefEntryKey);
154
155         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL,bridgeEntryId);
156     }
157
158     @Test
159     public void testUpdateBridgeReferenceEntry()
160     {
161         Optional<OvsdbBridgeAugmentation>expectedOvsdbBridgeAugmentation = Optional.of(bridgeNew);
162         Optional<BridgeEntry> expectedBridgeEntry = Optional.of(bridgeEntry);
163         Optional<Interface> expectedInterface = Optional.of(tunnelInterfaceEnabled);
164
165         doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
166                 LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
167         doReturn(Futures.immediateCheckedFuture(expectedBridgeEntry)).when(mockReadTx).read(
168                 LogicalDatastoreType.CONFIGURATION,bridgeEntryIid);
169         doReturn(Futures.immediateCheckedFuture(expectedOvsdbBridgeAugmentation)).when(mockReadTx).read(
170                 LogicalDatastoreType.OPERATIONAL, bridgeIid);
171
172         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentation = new OvsdbBridgeAugmentationBuilder(bridgeNew);
173         ovsdbBridgeAugmentation.setDatapathId(DatapathId.getDefaultInstance("00:00:00:00:00:00:00:01"));
174         ovsdbBridgeAugmentation.setBridgeName(OvsdbBridgeName.getDefaultInstance("a"));
175         bridgeNew = ovsdbBridgeAugmentation.build();
176
177         updateHelper.updateBridgeRefEntry(bridgeIid, bridgeNew, bridgeOld, dataBroker);
178     }
179
180     @Test
181     public void testUpdateTunnelState(){
182
183         List<InterfaceBfdStatus> interfaceBfdStatus = new ArrayList<InterfaceBfdStatus>();
184         interfaceBfdStatus.add(new InterfaceBfdStatusBuilder().setBfdStatusKey(SouthboundUtils.BFD_OP_STATE).setBfdStatusValue(SouthboundUtils.BFD_STATE_UP).build());
185         List bfdStatusSpy = spy(interfaceBfdStatus);
186         when(newTerminationPoint.getInterfaceBfdStatus()).thenReturn(bfdStatusSpy);
187         updateHelper.updateTunnelState(dataBroker, newTerminationPoint, null);
188
189         //verify
190         InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> ifStateId =
191                 IfmUtil.buildStateInterfaceId(null);
192         InterfaceBuilder ifaceBuilder = new InterfaceBuilder().setOperStatus(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus.Up);
193         ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(null));
194         verify(mockWriteTx).merge(LogicalDatastoreType.OPERATIONAL, ifStateId, ifaceBuilder.build());
195
196     }
197 }