d6540f9e6f11fb357a281ffb4894e2e7209ca367
[vpnservice.git] / nexthopmgr / nexthopmgr-impl / src / test / java / org / opendaylight / vpnservice / nexthopmgr / test / NexthopManagerTest.java
1 /*
2  * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All
3  * rights reserved.
4  * 
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
8  */
9 package org.opendaylight.vpnservice.nexthopmgr.test;
10
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Mockito.doReturn;
13 import static org.mockito.Mockito.when;
14
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.L3nexthop;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.VpnNexthopsKey;
17 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
18
19 import com.google.common.base.Optional;
20 import com.google.common.util.concurrent.Futures;
21 import java.lang.reflect.InvocationTargetException;
22 import java.util.ArrayList;
23 import java.util.HashMap;
24 import java.util.HashSet;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.Set;
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.junit.runner.RunWith;
31 import org.mockito.Mock;
32 import org.mockito.runners.MockitoJUnitRunner;
33 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
34 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
35 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
36 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
37 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
38 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
39 import org.opendaylight.idmanager.IdManager;
40 import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
41 import org.opendaylight.vpnservice.nexthopmgr.NexthopManager;
42 import org.opendaylight.vpnservice.nexthopmgr.VpnInterfaceChangeListener;
43 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces;
44 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance;
45 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface;
46 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder;
47 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.Adjacencies;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.AdjacenciesBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.Adjacency;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.AdjacencyKey;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.VpnNexthops;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.vpnnexthops.VpnNexthop;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.vpnnexthops.VpnNexthopBuilder;
55 import org.opendaylight.yangtools.concepts.ListenerRegistration;
56 import org.opendaylight.yangtools.yang.binding.Augmentation;
57 import org.opendaylight.yangtools.yang.binding.DataContainer;
58 import org.opendaylight.yangtools.yang.binding.DataObject;
59 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
60 import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager;
61
62 @RunWith(MockitoJUnitRunner.class)
63 public class NexthopManagerTest {
64
65   private final String ifName = "dpn1-if0";
66   private final String vpnName = "vpn1";
67   private final String ipAddress = "1.1.1.1";
68   private final String macAddress = "11:22:33:44:55:66";
69   private final int groupId = 5000;
70   private final long dpId = 1L;
71   private final long vpnId = 2L;
72
73   Map<InstanceIdentifier<?>, DataObject> written = new HashMap<>();
74   Map<InstanceIdentifier<?>, DataObject> updated = new HashMap<>();
75   Set<InstanceIdentifier<?>> removed = new HashSet<>();
76
77   @Mock
78   DataBroker dataBroker;
79   @Mock
80   IdManager idManager;
81   @Mock
82   IInterfaceManager interfacemanager;
83   @Mock
84   ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
85   @Mock
86   ReadOnlyTransaction mockReadTx;
87   @Mock
88   WriteTransaction mockWriteTx;
89   @Mock
90   IMdsalApiManager mdsalmanager;
91
92   MockDataChangedEvent dataChangeEvent;
93   NexthopManager nhmgr;
94   VpnInterfaceChangeListener vpnchglistener;
95   VpnInstance vpninstance;
96   VpnInterface vpninterface;
97   VpnNexthops vpnnexthops;
98   VpnNexthop vpnNexthop;
99
100   InstanceIdentifier<VpnInterface> vpnInterfaceIdent;
101   InstanceIdentifier<Adjacencies> adjacencies;
102   Adjacencies adjacency;
103   List<Adjacency> adjList = new ArrayList<Adjacency>();
104
105   Adjacency adjacencyobject = new Adjacency() {
106
107     @Override
108     public <E extends Augmentation<Adjacency>> E getAugmentation(Class<E> augmentationType) {
109       return null;
110     }
111
112     @Override
113     public Class<? extends DataContainer> getImplementedInterface() {
114       return null;
115     }
116
117     @Override
118     public Long getNextHopId() {
119       return null;
120     }
121
122     @Override
123     public String getMacAddress() {
124       return macAddress;
125     }
126
127     @Override
128     public Long getLabel() {
129       return null;
130     }
131
132     @Override
133     public AdjacencyKey getKey() {
134       return null;
135     }
136
137     @Override
138     public String getIpAddress() {
139       return ipAddress;
140     }
141   };
142
143   @Before
144   public void setUp() throws Exception {
145     adjacency = getVpnInterfaceAugmentation(adjList);
146     adjacencies =
147             InstanceIdentifier.create(VpnInterfaces.class).child(VpnInterface.class).augmentation(Adjacencies.class);
148     vpnInterfaceIdent = adjacencies.firstIdentifierOf(VpnInterface.class);
149     vpninterface = getVpnInterface(ifName, vpnName, adjacency);
150     adjList.add(adjacencyobject);
151
152     when(
153             dataBroker.registerDataChangeListener(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
154                     any(DataChangeListener.class), any(DataChangeScope.class))).thenReturn(
155             dataChangeListenerRegistration);
156
157     dataChangeEvent = new MockDataChangedEvent();
158     vpnNexthop = new VpnNexthopBuilder().setEgressPointer(10L).setIpAddress(ipAddress).build();
159     nhmgr = new NexthopManager(dataBroker) {
160       protected int createNextHopPointer(String nexthopKey) {
161         return groupId;
162       }
163
164       protected long getVpnId(String vpnName) {
165         return vpnId;
166       }
167
168       protected VpnNexthop getVpnNexthop(long vpnId, String ipAddress) {
169         return vpnNexthop;
170       }
171
172       protected void addVpnNexthopToDS(long vpnId, String ipPrefix, long egressPointer) {
173         return;
174       }
175     };
176
177     nhmgr.setInterfaceManager(interfacemanager);
178     nhmgr.setMdsalManager(mdsalmanager);
179     vpnchglistener = new VpnInterfaceChangeListener(dataBroker, nhmgr);
180     setupMocks();
181   }
182
183   private void setupMocks() {
184     when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
185     when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
186   }
187
188   @Test
189   public void testAdd() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
190     Optional<VpnInterface> vpnIf = Optional.of(vpninterface);
191
192     doReturn(Futures.immediateCheckedFuture(vpnIf)).when(mockReadTx).read(LogicalDatastoreType.OPERATIONAL,
193             vpnInterfaceIdent);
194     InstanceIdentifierBuilder<VpnNexthops> idBuilder =
195                     InstanceIdentifier.builder(L3nexthop.class).child(VpnNexthops.class, new VpnNexthopsKey(vpnId));
196     InstanceIdentifier<VpnNexthops> id = idBuilder.build();
197     doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(LogicalDatastoreType.OPERATIONAL,id);
198
199     when(interfacemanager.getDpnForInterface(ifName)).thenReturn(dpId);
200     dataChangeEvent.created.put(adjacencies, adjacency);
201     vpnchglistener.onDataChanged(dataChangeEvent);
202
203  // FIXME: Add some verifications
204   }
205
206   private Adjacencies getVpnInterfaceAugmentation(List<Adjacency> nextHops) {
207     return new AdjacenciesBuilder().setAdjacency(nextHops).build();
208   }
209
210   private VpnInterface getVpnInterface(String intfName, String vpnName, Adjacencies aug) {
211     return new VpnInterfaceBuilder().setKey(new VpnInterfaceKey(intfName)).setVpnInstanceName(vpnName)
212             .addAugmentation(Adjacencies.class, aug).build();
213   }
214 }