2 * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All
5 * This program and the accompanying materials are made available under the
6 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
7 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.vpnservice.nexthopmgr.test;
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Mockito.doReturn;
13 import static org.mockito.Mockito.when;
15 import com.google.common.base.Optional;
16 import com.google.common.util.concurrent.Futures;
18 import java.lang.reflect.InvocationTargetException;
19 import java.util.ArrayList;
20 import java.util.HashMap;
21 import java.util.HashSet;
22 import java.util.List;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.mockito.Mock;
30 import org.mockito.runners.MockitoJUnitRunner;
31 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
32 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
33 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
34 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
35 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
36 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
37 import org.opendaylight.idmanager.IdManager;
38 import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
39 import org.opendaylight.vpnservice.nexthopmgr.NexthopManager;
40 import org.opendaylight.vpnservice.nexthopmgr.VpnInterfaceChangeListener;
41 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces;
42 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance;
43 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface;
44 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder;
45 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.Adjacencies;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.AdjacenciesBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.Adjacency;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.AdjacencyKey;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.VpnNexthops;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.vpnnexthops.VpnNexthop;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.vpnnexthops.VpnNexthopBuilder;
53 import org.opendaylight.yangtools.concepts.ListenerRegistration;
54 import org.opendaylight.yangtools.yang.binding.Augmentation;
55 import org.opendaylight.yangtools.yang.binding.DataContainer;
56 import org.opendaylight.yangtools.yang.binding.DataObject;
57 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
58 import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager;
60 @RunWith(MockitoJUnitRunner.class)
61 public class NexthopManagerTest {
63 private final String ifName = "dpn1-if0";
64 private final String vpnName = "vpn1";
65 private final String ipAddress = "1.1.1.1";
66 private final String macAddress = "11:22:33:44:55:66";
67 private final int groupId = 5000;
68 private final long dpId = 1L;
69 private final long vpnId = 2L;
71 Map<InstanceIdentifier<?>, DataObject> written = new HashMap<>();
72 Map<InstanceIdentifier<?>, DataObject> updated = new HashMap<>();
73 Set<InstanceIdentifier<?>> removed = new HashSet<>();
76 DataBroker dataBroker;
80 IInterfaceManager interfacemanager;
82 ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
84 ReadOnlyTransaction mockReadTx;
86 WriteTransaction mockWriteTx;
88 IMdsalApiManager mdsalmanager;
90 MockDataChangedEvent dataChangeEvent;
92 VpnInterfaceChangeListener vpnchglistener;
93 VpnInstance vpninstance;
94 VpnInterface vpninterface;
95 VpnNexthops vpnnexthops;
96 VpnNexthop vpnNexthop;
98 InstanceIdentifier<VpnInterface> vpnInterfaceIdent;
99 InstanceIdentifier<Adjacencies> adjacencies;
100 Adjacencies adjacency;
101 List<Adjacency> adjList = new ArrayList<Adjacency>();
103 Adjacency adjacencyobject = new Adjacency() {
106 public <E extends Augmentation<Adjacency>> E getAugmentation(Class<E> augmentationType) {
111 public Class<? extends DataContainer> getImplementedInterface() {
116 public Long getNextHopId() {
121 public String getMacAddress() {
126 public Long getLabel() {
131 public AdjacencyKey getKey() {
136 public String getIpAddress() {
142 public void setUp() throws Exception {
143 adjacency = getVpnInterfaceAugmentation(adjList);
145 InstanceIdentifier.create(VpnInterfaces.class).child(VpnInterface.class).augmentation(Adjacencies.class);
146 vpnInterfaceIdent = adjacencies.firstIdentifierOf(VpnInterface.class);
147 vpninterface = getVpnInterface(ifName, vpnName, adjacency);
148 adjList.add(adjacencyobject);
151 dataBroker.registerDataChangeListener(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
152 any(DataChangeListener.class), any(DataChangeScope.class))).thenReturn(
153 dataChangeListenerRegistration);
155 dataChangeEvent = new MockDataChangedEvent();
156 vpnNexthop = new VpnNexthopBuilder().setEgressPointer(10L).setIpAddress(ipAddress).build();
157 nhmgr = new NexthopManager(dataBroker) {
158 protected int createNextHopPointer(String nexthopKey) {
162 protected long getVpnId(String vpnName) {
166 protected VpnNexthop getVpnNexthop(long vpnId, String ipAddress) {
170 protected void addVpnNexthopToDS(long vpnId, String ipPrefix, long egressPointer) {
175 nhmgr.setInterfaceManager(interfacemanager);
176 nhmgr.setMdsalManager(mdsalmanager);
177 vpnchglistener = new VpnInterfaceChangeListener(dataBroker, nhmgr);
181 private void setupMocks() {
182 when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
183 when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
187 public void testAdd() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
188 Optional<VpnInterface> vpnIf = Optional.of(vpninterface);
190 doReturn(Futures.immediateCheckedFuture(vpnIf)).when(mockReadTx).read(LogicalDatastoreType.OPERATIONAL,
193 when(interfacemanager.getDpnForInterface(ifName)).thenReturn(dpId);
194 dataChangeEvent.created.put(adjacencies, adjacency);
195 vpnchglistener.onDataChanged(dataChangeEvent);
197 // FIXME: Add some verifications
200 private Adjacencies getVpnInterfaceAugmentation(List<Adjacency> nextHops) {
201 return new AdjacenciesBuilder().setAdjacency(nextHops).build();
204 private VpnInterface getVpnInterface(String intfName, String vpnName, Adjacencies aug) {
205 return new VpnInterfaceBuilder().setKey(new VpnInterfaceKey(intfName)).setVpnInstanceName(vpnName)
206 .addAugmentation(Adjacencies.class, aug).build();