2 * Copyright (c) 2015 - 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the terms of the Eclipse
5 * Public License v1.0 which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netvirt.fibmanager.test;
10 import java.math.BigInteger;
12 import org.junit.Before;
13 import org.junit.Test;
15 import static org.mockito.Matchers.any;
16 import static org.mockito.Mockito.when;
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
22 import org.junit.runner.RunWith;
23 import org.mockito.Mock;
24 import org.mockito.runners.MockitoJUnitRunner;
25 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
26 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
27 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
28 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
29 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
30 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
31 import org.opendaylight.netvirt.bgpmanager.api.RouteOrigin;
32 import org.opendaylight.netvirt.vpnmanager.api.IVpnManager;
33 import org.opendaylight.netvirt.fibmanager.FibManager;
34 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntry;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntryKey;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnListKey;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpn.to.dpn.list.IpAddresses;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpn.to.dpn.list.VpnInterfaces;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.FibEntries;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.fibentries.VrfTables;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.fibentries.VrfTablesKey;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntryBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntryKey;
47 import org.opendaylight.yangtools.concepts.ListenerRegistration;
48 import org.opendaylight.yangtools.yang.binding.Augmentation;
49 import org.opendaylight.yangtools.yang.binding.DataContainer;
50 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
51 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
53 @RunWith(MockitoJUnitRunner.class)
54 public class FibManagerTest {
57 DataBroker dataBroker;
59 ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
61 ReadOnlyTransaction mockReadTx;
63 WriteTransaction mockWriteTx;
65 IMdsalApiManager mdsalManager;
67 IVpnManager vpnmanager;
69 VrfTablesKey vrfTableKey;
71 MockDataChangedEvent dataChangeEvent;
73 private static final Long EgressPointer = 11L;
75 InstanceIdentifier<VrfEntry> identifier;
76 VrfEntryBuilder vrfbuilder;
77 private static final String testVpnInstanceName = "95486250-4ad7-418f-9030-2df37f98ad24";
78 private static final String testRd = "100:1";
79 private static final String prefix = "1.1.2.3";
80 private static final String nexthop = "1.1.1.1";
81 private static final int label = 10;
82 RouteOrigin origin = RouteOrigin.STATIC;
84 private static final long vpnId = 101L;
85 private static final long vpnIntfCnt = 2;
86 private static final Boolean isCleanupComplete = Boolean.FALSE;
88 private void SetupMocks() {
89 Dpn = BigInteger.valueOf(100000L);
90 identifier = buildVrfEntryId(testRd, prefix);
91 vrfEntry = buildVrfEntry(testRd, prefix, Arrays.asList(nexthop), label, origin);
92 fibmgr.setMdsalManager(mdsalManager);
93 fibmgr.setVpnmanager(vpnmanager);
94 when(vrfTableKey.getRouteDistinguisher()).thenReturn(testRd);
98 public void setUp() throws Exception {
100 dataBroker.registerDataChangeListener(any(LogicalDatastoreType.class),
101 any(InstanceIdentifier.class), any(DataChangeListener.class),
102 any(DataChangeScope.class))).thenReturn(dataChangeListenerRegistration);
103 dataChangeEvent = new MockDataChangedEvent();
104 vrfbuilder = new VrfEntryBuilder();
105 fibmgr = new FibManager(dataBroker) {
108 protected VpnInstanceOpDataEntry getVpnInstance(String rd) {
109 return new VpnInstanceOpDataEntry() {
112 public <E extends Augmentation<VpnInstanceOpDataEntry>> E getAugmentation(Class<E> aClass) {
117 public Long getVpnId() {
122 public String getVrfId() {
127 public String getVpnInstanceName() {
128 return testVpnInstanceName;
132 public Long getVpnInterfaceCount() { return vpnIntfCnt; }
135 public Boolean isCleanupComplete(){return isCleanupComplete;}
138 public List<VpnToDpnList> getVpnToDpnList() {
139 List <VpnToDpnList> vpnToDpnLists = new ArrayList<>();
140 vpnToDpnLists.add(new VpnToDpnList() {
142 public BigInteger getDpnId() {
147 public List<VpnInterfaces> getVpnInterfaces() {
152 public List<IpAddresses> getIpAddresses() { return null; }
155 public VpnToDpnListKey getKey() {
156 return new VpnToDpnListKey(Dpn);
160 public <E extends Augmentation<VpnToDpnList>> E getAugmentation(
161 Class<E> augmentationType) {
166 public Class<? extends DataContainer> getImplementedInterface() {
170 return vpnToDpnLists;
174 public VpnInstanceOpDataEntryKey getKey() {
175 return new VpnInstanceOpDataEntryKey(testRd);
179 public List<Long> getRouteEntryId() {
184 public Class<? extends DataContainer> getImplementedInterface() {
194 public void testAdd() {
195 dataChangeEvent.created.put(identifier, vrfEntry);
196 //fibmgr.onDataChanged(dataChangeEvent);
197 //Mockito.verify(mdsalManager, Mockito.times(2)).installFlow(any(FlowEntity.class));
200 private VrfEntry buildVrfEntry(String rd, String prefix, List<String> nextHopList, int label, RouteOrigin origin) {
202 return new VrfEntryBuilder().setDestPrefix(prefix).setNextHopAddressList(nextHopList)
203 .setLabel((long) label).setOrigin(origin.getValue()).build();
206 public static InstanceIdentifier<VrfTables> buildVrfTableId(String rd) {
207 InstanceIdentifierBuilder<VrfTables> idBuilder =
208 InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd));
209 InstanceIdentifier<VrfTables> vrfTableId = idBuilder.build();
213 public static InstanceIdentifier<VrfEntry> buildVrfEntryId(String rd, String prefix) {
214 InstanceIdentifierBuilder<VrfEntry> idBuilder =
215 InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd))
216 .child(VrfEntry.class, new VrfEntryKey(prefix));
217 InstanceIdentifier<VrfEntry> vrfEntryId = idBuilder.build();