2 * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
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
9 package org.opendaylight.vpnservice.interfacemgr.test;
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Mockito.*;
14 import com.google.common.base.Optional;
15 import com.google.common.util.concurrent.Futures;
16 import com.google.common.util.concurrent.ListenableFuture;
18 import java.math.BigInteger;
20 import org.junit.After;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 import org.mockito.Mock;
25 import org.mockito.Mockito;
26 import org.mockito.runners.MockitoJUnitRunner;
27 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
28 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
29 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
30 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
31 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
32 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
33 import org.opendaylight.idmanager.IdManager;
34 import org.opendaylight.vpnservice.interfacemgr.IfmUtil;
35 import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.confighelpers.OvsInterfaceConfigAddHelper;
36 import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.confighelpers.OvsInterfaceConfigRemoveHelper;
37 import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.alivenessmonitor.rev150629.AlivenessMonitorService;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.AllocateIdInput;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.AllocateIdOutput;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.AllocateIdOutputBuilder;
47 import org.opendaylight.yangtools.concepts.ListenerRegistration;
48 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
49 import org.opendaylight.yangtools.yang.common.RpcResult;
50 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
52 @RunWith(MockitoJUnitRunner.class)
53 public class VlanInterfaceConfigurationTest {
56 DataBroker dataBroker;
58 AlivenessMonitorService alivenessMonitorService;
59 @Mock IdManager idManager;
60 @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
61 @Mock ReadOnlyTransaction mockReadTx;
62 @Mock WriteTransaction mockWriteTx;
63 @Mock IMdsalApiManager mdsalApiManager;
64 OvsInterfaceConfigAddHelper addHelper;
65 OvsInterfaceConfigRemoveHelper removeHelper;
67 NodeConnectorId nodeConnectorId;
68 NodeConnector nodeConnector;
69 Interface vlanInterfaceEnabled;
70 Interface vlanInterfaceDisabled;
71 InstanceIdentifier<Interface> interfaceInstanceIdentifier;
72 InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifier;
73 InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> interfaceStateIdentifier;
74 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateInterface;
77 public void setUp() throws Exception {
78 when(dataBroker.registerDataChangeListener(
79 any(LogicalDatastoreType.class),
80 any(InstanceIdentifier.class),
81 any(DataChangeListener.class),
82 any(DataChangeScope.class)))
83 .thenReturn(dataChangeListenerRegistration);
88 public void cleanUp(){
91 private void setupMocks() {
92 nodeConnectorId = InterfaceManagerTestUtil.buildNodeConnectorId(BigInteger.valueOf(1), 1);
93 nodeConnector = InterfaceManagerTestUtil.buildNodeConnector(nodeConnectorId);
94 vlanInterfaceEnabled = InterfaceManagerTestUtil.buildInterface(InterfaceManagerTestUtil.interfaceName, "Test Vlan Interface1", true, L2vlan.class, BigInteger.valueOf(1));
95 vlanInterfaceDisabled = InterfaceManagerTestUtil.buildInterface(InterfaceManagerTestUtil.interfaceName, "Test Vlan Interface1", false, L2vlan.class, BigInteger.valueOf(1));
96 interfaceInstanceIdentifier = IfmUtil.buildId(InterfaceManagerTestUtil.interfaceName);
97 nodeConnectorInstanceIdentifier = InterfaceManagerTestUtil.getNcIdent("openflow:1", nodeConnectorId);
98 interfaceStateIdentifier = IfmUtil.buildStateInterfaceId(vlanInterfaceEnabled.getName());
99 stateInterface = InterfaceManagerTestUtil.buildStateInterface(InterfaceManagerTestUtil.interfaceName, nodeConnectorId);
100 AllocateIdOutput output = new AllocateIdOutputBuilder().setIdValue((long)1).build();
101 RpcResultBuilder<AllocateIdOutput> allocateIdRpcBuilder = RpcResultBuilder.success();
102 allocateIdRpcBuilder.withResult(output);
103 ListenableFuture<RpcResult<AllocateIdOutput>> future = Futures.immediateFuture(allocateIdRpcBuilder.build());
106 when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
107 when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
109 when(idManager.allocateId(any(AllocateIdInput.class))).thenReturn(future);
113 public void testAddVlanInterfaceWhenSwitchIsNotConnected() {
114 Optional<Interface> expectedInterface = Optional.of(vlanInterfaceEnabled);
115 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> expectedStateInterface = Optional.of(stateInterface);
117 doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
118 LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
119 doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
120 LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
122 addHelper.addConfiguration(dataBroker, null, vlanInterfaceEnabled, idManager,
123 alivenessMonitorService, mdsalApiManager);
125 //Nothing to verify, since when switch is not connected we don't do any datastore operation
130 public void testAddVlanInterfaceWhenSwitchIsConnected() {
131 Optional<Interface> expectedInterface = Optional.of(vlanInterfaceEnabled);
132 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> expectedStateInterface = Optional.of(stateInterface);
134 doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
135 LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
136 doReturn(Futures.immediateCheckedFuture(expectedStateInterface)).when(mockReadTx).read(
137 LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
139 addHelper.addConfiguration(dataBroker, null, vlanInterfaceEnabled, idManager,
140 alivenessMonitorService, mdsalApiManager);
142 //Nothing to verify, since when adminstate is enabled and switch opstate is already up,
143 //we don't do any datastore operation
147 public void testAddVlanInterfaceWhenAdminStateDisabled() {
148 Optional<Interface> expectedInterface = Optional.of(vlanInterfaceEnabled);
149 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> expectedStateInterface =
150 Optional.of(stateInterface);
152 doReturn(Futures.immediateCheckedFuture(expectedInterface)).when(mockReadTx).read(
153 LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
154 doReturn(Futures.immediateCheckedFuture(expectedStateInterface)).when(mockReadTx).read(
155 LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
157 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder ifaceBuilder = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder();
158 ifaceBuilder.setOperStatus(OperStatus.Down);
159 ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(vlanInterfaceEnabled.getName()));
160 ifaceBuilder.setType(L2vlan.class);
161 stateInterface = ifaceBuilder.build();
163 addHelper.addConfiguration(dataBroker, null, vlanInterfaceDisabled, idManager,
164 alivenessMonitorService, mdsalApiManager);
167 verify(mockWriteTx).merge(LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier, stateInterface);
171 public void testDeleteVlanInterface() {
172 Optional<Interface> expected = Optional.of(vlanInterfaceEnabled);
173 Optional<NodeConnector> expectedNc = Optional.of(nodeConnector);
174 Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> expectedStateIf = Optional.of(stateInterface);
175 doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
176 LogicalDatastoreType.CONFIGURATION, interfaceInstanceIdentifier);
177 doReturn(Futures.immediateCheckedFuture(expectedNc)).when(mockReadTx).read(
178 LogicalDatastoreType.OPERATIONAL, nodeConnectorInstanceIdentifier);
179 doReturn(Futures.immediateCheckedFuture(expectedStateIf)).when(mockReadTx).read(
180 LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier);
182 org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder ifaceBuilder = new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder();
183 ifaceBuilder.setOperStatus(OperStatus.Down);
184 ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(vlanInterfaceEnabled.getName()));
185 stateInterface = ifaceBuilder.build();
187 removeHelper.removeConfiguration(dataBroker,alivenessMonitorService, vlanInterfaceEnabled, idManager,
188 mdsalApiManager, null);
191 verify(mockWriteTx).merge(LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier, stateInterface);