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