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.List;
21 import org.junit.runner.RunWith;
22 import org.mockito.Mock;
23 import org.mockito.runners.MockitoJUnitRunner;
24 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
25 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
26 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
27 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
28 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
29 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
30 import org.opendaylight.netvirt.vpnmanager.api.IVpnManager;
31 import org.opendaylight.netvirt.fibmanager.FibManager;
32 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntry;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntryKey;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnListKey;
37 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;
38 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;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.FibEntries;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.fibentries.VrfTables;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.fibentries.VrfTablesKey;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntryBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntryKey;
45 import org.opendaylight.yangtools.concepts.ListenerRegistration;
46 import org.opendaylight.yangtools.yang.binding.Augmentation;
47 import org.opendaylight.yangtools.yang.binding.DataContainer;
48 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
49 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
51 @RunWith(MockitoJUnitRunner.class)
52 public class FibManagerTest {
55 DataBroker dataBroker;
57 ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
59 ReadOnlyTransaction mockReadTx;
61 WriteTransaction mockWriteTx;
63 IMdsalApiManager mdsalManager;
65 IVpnManager vpnmanager;
67 VrfTablesKey vrfTableKey;
69 MockDataChangedEvent dataChangeEvent;
71 private static final Long EgressPointer = 11L;
73 InstanceIdentifier<VrfEntry> identifier;
74 VrfEntryBuilder vrfbuilder;
75 private static final String testRd = "100:1";
76 private static final String prefix = "1.1.2.3";
77 private static final String nexthop = "1.1.1.1";
78 private static final int label = 10;
80 private static final long vpnId = 101L;
81 private static final long vpnIntfCnt = 2;
83 private void SetupMocks() {
84 Dpn = BigInteger.valueOf(100000L);
85 identifier = buildVrfEntryId(testRd, prefix);
86 vrfEntry = buildVrfEntry(testRd, prefix, nexthop, label);
87 fibmgr.setMdsalManager(mdsalManager);
88 fibmgr.setVpnmanager(vpnmanager);
89 when(vrfTableKey.getRouteDistinguisher()).thenReturn(testRd);
93 public void setUp() throws Exception {
95 dataBroker.registerDataChangeListener(any(LogicalDatastoreType.class),
96 any(InstanceIdentifier.class), any(DataChangeListener.class),
97 any(DataChangeScope.class))).thenReturn(dataChangeListenerRegistration);
98 dataChangeEvent = new MockDataChangedEvent();
99 vrfbuilder = new VrfEntryBuilder();
100 fibmgr = new FibManager(dataBroker) {
102 protected VpnInstanceOpDataEntry getVpnInstance(String rd) {
103 return new VpnInstanceOpDataEntry() {
106 public <E extends Augmentation<VpnInstanceOpDataEntry>> E getAugmentation(Class<E> aClass) {
111 public Long getVpnId() {
116 public String getVrfId() {
121 public Long getVpnInterfaceCount() { return vpnIntfCnt; }
124 public List<VpnToDpnList> getVpnToDpnList() {
125 List <VpnToDpnList> vpnToDpnLists = new ArrayList<>();
126 vpnToDpnLists.add(new VpnToDpnList() {
128 public BigInteger getDpnId() {
133 public List<VpnInterfaces> getVpnInterfaces() {
138 public List<IpAddresses> getIpAddresses() { return null; }
141 public VpnToDpnListKey getKey() {
142 return new VpnToDpnListKey(Dpn);
146 public <E extends Augmentation<VpnToDpnList>> E getAugmentation(
147 Class<E> augmentationType) {
152 public Class<? extends DataContainer> getImplementedInterface() {
156 return vpnToDpnLists;
160 public VpnInstanceOpDataEntryKey getKey() {
161 return new VpnInstanceOpDataEntryKey(testRd);
165 public List<Long> getRouteEntryId() {
170 public Class<? extends DataContainer> getImplementedInterface() {
180 public void testAdd() {
181 dataChangeEvent.created.put(identifier, vrfEntry);
182 //fibmgr.onDataChanged(dataChangeEvent);
183 //Mockito.verify(mdsalManager, Mockito.times(2)).installFlow(any(FlowEntity.class));
186 private VrfEntry buildVrfEntry(String rd, String prefix, String nexthop, int label) {
187 return new VrfEntryBuilder().setDestPrefix(prefix).setNextHopAddress(nexthop)
188 .setLabel((long) label).build();
191 public static InstanceIdentifier<VrfTables> buildVrfTableId(String rd) {
192 InstanceIdentifierBuilder<VrfTables> idBuilder =
193 InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd));
194 InstanceIdentifier<VrfTables> vrfTableId = idBuilder.build();
198 public static InstanceIdentifier<VrfEntry> buildVrfEntryId(String rd, String prefix) {
199 InstanceIdentifierBuilder<VrfEntry> idBuilder =
200 InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd))
201 .child(VrfEntry.class, new VrfEntryKey(prefix));
202 InstanceIdentifier<VrfEntry> vrfEntryId = idBuilder.build();