Merge "L2 Gw create changes related to ITM Tunnels creation in neutronvpn module"
[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.IfmConstants;
20 import org.opendaylight.vpnservice.interfacemgr.IfmUtil;
21 import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceManagerCommonUtils;
22 import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceMetaUtils;
23 import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.statehelpers.*;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.flow.capable.port.StateBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.*;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.*;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.IfIndexesInterfaceMap;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._if.indexes._interface.map.IfIndexInterface;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._if.indexes._interface.map.IfIndexInterfaceKey;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntry;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007._interface.child.info.InterfaceParentEntryKey;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.BridgeEntry;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.BridgeEntryKey;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.bridge.entry.BridgeInterfaceEntry;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.bridge.entry.BridgeInterfaceEntryBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge._interface.info.bridge.entry.BridgeInterfaceEntryKey;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge.ref.info.BridgeRefEntry;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge.ref.info.BridgeRefEntryBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.meta.rev151007.bridge.ref.info.BridgeRefEntryKey;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.ParentRefs;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeGre;
50 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
51 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
52 import org.opendaylight.yangtools.concepts.ListenerRegistration;
53 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
54 import org.opendaylight.yangtools.yang.common.RpcResult;
55 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
56
57 import javax.swing.plaf.nimbus.State;
58 import java.math.BigInteger;
59 import java.util.ArrayList;
60 import java.util.List;
61 import java.util.concurrent.Future;
62
63 import static org.mockito.Mockito.*;
64
65
66 @RunWith(MockitoJUnitRunner.class)
67 public class TopologyStateInterfaceTest {
68
69     BigInteger dpId = BigInteger.valueOf(1);
70     InstanceIdentifier<OvsdbBridgeAugmentation>bridgeIid = null;
71     InstanceIdentifier<BridgeEntry> bridgeEntryIid = null;
72     OvsdbBridgeAugmentation bridgeNew;
73     OvsdbBridgeAugmentation bridgeOld;
74     BridgeEntry bridgeEntry = null;
75     ParentRefs parentRefs = null;
76     InstanceIdentifier<Interface> interfaceInstanceIdentifier = null;
77     Interface tunnelInterfaceEnabled = null;
78     BridgeInterfaceEntry bridgeInterfaceEntry;
79     BridgeInterfaceEntryKey bridgeInterfaceEntryKey;
80
81     @Mock DataBroker dataBroker;
82     @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
83     @Mock ReadOnlyTransaction mockReadTx;
84     @Mock WriteTransaction mockWriteTx;
85
86     OvsInterfaceTopologyStateAddHelper addHelper;
87     OvsInterfaceTopologyStateRemoveHelper removeHelper;
88
89     @Before
90     public void setUp() throws Exception {
91         when(dataBroker.registerDataChangeListener(
92                 any(LogicalDatastoreType.class),
93                 any(InstanceIdentifier.class),
94                 any(DataChangeListener.class),
95                 any(DataChangeScope.class)))
96                 .thenReturn(dataChangeListenerRegistration);
97         setupMocks();
98     }
99
100     private void setupMocks()
101     {
102         Node node = new NodeBuilder().setKey(null).setNodeId(null).build();
103         tunnelInterfaceEnabled = InterfaceManagerTestUtil.buildTunnelInterface(dpId, InterfaceManagerTestUtil.tunnelInterfaceName, "Test Interface1", true, TunnelTypeGre.class
104                 , "192.168.56.101", "192.168.56.102");
105         bridgeIid = InterfaceManagerTestUtil.getOvsdbAugmentationInstanceIdentifier(InterfaceManagerTestUtil.interfaceName, node);
106         bridgeNew = InterfaceManagerTestUtil.getOvsdbBridgeRef("s1");
107         bridgeOld = InterfaceManagerTestUtil.getOvsdbBridgeRef("s1");
108         bridgeEntryIid = InterfaceMetaUtils.getBridgeEntryIdentifier(new BridgeEntryKey(dpId));
109         interfaceInstanceIdentifier = IfmUtil.buildId(InterfaceManagerTestUtil.tunnelInterfaceName);
110         bridgeInterfaceEntryKey = new BridgeInterfaceEntryKey(InterfaceManagerTestUtil.tunnelInterfaceName);
111         bridgeInterfaceEntry =
112                 new BridgeInterfaceEntryBuilder().setKey(bridgeInterfaceEntryKey)
113                         .setInterfaceName(tunnelInterfaceEnabled.getName()).build();
114         bridgeEntry = InterfaceManagerTestUtil.buildBridgeEntry(dpId, bridgeInterfaceEntry);
115
116         when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
117         when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
118     }
119
120     @Test
121     public void testAddTopologyStateInterface()
122     {
123         Optional<OvsdbBridgeAugmentation>expectedOvsdbBridgeAugmentation = Optional.of(bridgeNew);
124         Optional<BridgeEntry> expectedBridgeEntry = Optional.of(bridgeEntry);
125         Optional<Interface> expectedInterface = Optional.of(tunnelInterfaceEnabled);
126
127         doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
128                 LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
129         doReturn(Futures.immediateCheckedFuture(expectedBridgeEntry)).when(mockReadTx).read(
130                 LogicalDatastoreType.CONFIGURATION,bridgeEntryIid);
131
132         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentation = new OvsdbBridgeAugmentationBuilder(bridgeNew);
133         ovsdbBridgeAugmentation.setDatapathId(DatapathId.getDefaultInstance("00:00:00:00:00:00:00:01"));
134         ovsdbBridgeAugmentation.setBridgeName(OvsdbBridgeName.getDefaultInstance("a"));
135         bridgeNew = ovsdbBridgeAugmentation.build();
136
137         addHelper.addPortToBridge(bridgeIid,bridgeNew,dataBroker);
138
139         BigInteger ovsdbDpId = BigInteger.valueOf(1);
140         BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(ovsdbDpId);
141         InstanceIdentifier<BridgeRefEntry> bridgeEntryId =
142                 InterfaceMetaUtils.getBridgeRefEntryIdentifier(bridgeRefEntryKey);
143         BridgeRefEntryBuilder tunnelDpnBridgeEntryBuilder =
144                 new BridgeRefEntryBuilder().setKey(bridgeRefEntryKey).setDpid(ovsdbDpId)
145                         .setBridgeReference(new OvsdbBridgeRef(bridgeIid));
146
147         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, bridgeEntryId, tunnelDpnBridgeEntryBuilder.build(), true);
148     }
149
150     @Test
151     public void testDeleteTopologyStateInterface()
152     {
153         doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
154                 LogicalDatastoreType.OPERATIONAL, bridgeIid);
155         OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentation = new OvsdbBridgeAugmentationBuilder(bridgeOld);
156         ovsdbBridgeAugmentation.setDatapathId(DatapathId.getDefaultInstance("00:00:00:00:00:00:00:01"));
157         ovsdbBridgeAugmentation.setBridgeName(OvsdbBridgeName.getDefaultInstance("b"));
158         bridgeOld = ovsdbBridgeAugmentation.build();
159
160         removeHelper.removePortFromBridge(bridgeIid,bridgeOld,dataBroker);
161
162         BigInteger ovsdbDpId = BigInteger.valueOf(1);
163         BridgeRefEntryKey bridgeRefEntryKey = new BridgeRefEntryKey(ovsdbDpId);
164         InstanceIdentifier<BridgeRefEntry> bridgeEntryId =
165                 InterfaceMetaUtils.getBridgeRefEntryIdentifier(bridgeRefEntryKey);
166
167         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL,bridgeEntryId);
168     }
169 }