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 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.vpnservice.fibmanager.test;
10 import org.junit.After;
11 import org.junit.Before;
12 import org.junit.BeforeClass;
13 import org.junit.Test;
15 import static org.junit.Assert.*;
16 import static org.mockito.Matchers.any;
17 import static org.mockito.Mockito.doReturn;
18 import static org.mockito.Mockito.when;
20 import com.google.common.base.Optional;
21 import com.google.common.util.concurrent.FutureCallback;
22 import com.google.common.util.concurrent.Futures;
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.HashSet;
27 import java.util.List;
31 import org.junit.Assert;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 import org.mockito.Mock;
36 import org.mockito.Mockito;
37 import org.mockito.runners.MockitoJUnitRunner;
38 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
39 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
40 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
41 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
42 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
43 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
44 import org.opendaylight.vpnmanager.api.IVpnManager;
45 import org.opendaylight.vpnservice.fibmanager.FibManager;
46 import org.opendaylight.vpnservice.fibmanager.test.MockDataChangedEvent;
47 import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
48 import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTables;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesKey;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntry;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntryBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntryKey;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.GetEgressPointerOutput;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.L3nexthopService;
58 import org.opendaylight.yangtools.concepts.ListenerRegistration;
59 import org.opendaylight.yangtools.yang.binding.DataObject;
60 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
61 import org.opendaylight.yangtools.yang.binding.RpcService;
62 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
64 @RunWith(MockitoJUnitRunner.class)
65 public class FibManagerTest {
68 DataBroker dataBroker;
70 ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
72 ReadOnlyTransaction mockReadTx;
74 WriteTransaction mockWriteTx;
76 L3nexthopService l3nexthopService;
78 IMdsalApiManager mdsalManager;
80 IVpnManager vpnmanager;
82 GetEgressPointerOutput adjacency;
84 VrfTablesKey vrfTableKey;
86 MockDataChangedEvent dataChangeEvent;
88 Long EgressPointer = 11L;
90 InstanceIdentifier<VrfEntry> identifier;
91 VrfEntryBuilder vrfbuilder;
92 String rd = "routeDis";
93 String prefix = "0.1.2.3";
94 String nexthop = "1.1.1.1";
98 private void SetupMocks() {
99 Dpns = new ArrayList<Long>();
101 identifier = buildVrfEntryId(rd, prefix);
102 vrfEntry = buildVrfEntry(rd, prefix, nexthop, label);
103 fibmgr.setMdsalManager(mdsalManager);
104 fibmgr.setVpnmanager(vpnmanager);
105 when(adjacency.getEgressPointer()).thenReturn(EgressPointer);
106 when(adjacency.isLocalDestination()).thenReturn(true);
107 when(vrfTableKey.getRouteDistinguisher()).thenReturn(rd);
108 when(vpnmanager.getDpnsForVpn(any(Long.class))).thenReturn(Dpns);
112 public void setUp() throws Exception {
114 dataBroker.registerDataChangeListener(any(LogicalDatastoreType.class),
115 any(InstanceIdentifier.class), any(DataChangeListener.class),
116 any(DataChangeScope.class))).thenReturn(dataChangeListenerRegistration);
117 dataChangeEvent = new MockDataChangedEvent();
118 vrfbuilder = new VrfEntryBuilder();
119 fibmgr = new FibManager(dataBroker, l3nexthopService) {
120 protected GetEgressPointerOutput resolveAdjacency(final long dpId, final long vpnId,
121 final VrfEntry vrfEntry) {
125 protected Long getVpnId(String rd) {
133 public void testAdd() {
134 dataChangeEvent.created.put(identifier, vrfEntry);
135 fibmgr.onDataChanged(dataChangeEvent);
136 Mockito.verify(mdsalManager, Mockito.times(2)).installFlow(any(FlowEntity.class));
139 private VrfEntry buildVrfEntry(String rd, String prefix, String nexthop, int label) {
140 return new VrfEntryBuilder().setDestPrefix(prefix).setNextHopAddress(nexthop)
141 .setLabel((long) label).build();
144 public static InstanceIdentifier<VrfTables> buildVrfTableId(String rd) {
145 InstanceIdentifierBuilder<VrfTables> idBuilder =
146 InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd));
147 InstanceIdentifier<VrfTables> vrfTableId = idBuilder.build();
151 public static InstanceIdentifier<VrfEntry> buildVrfEntryId(String rd, String prefix) {
152 InstanceIdentifierBuilder<VrfEntry> idBuilder =
153 InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd))
154 .child(VrfEntry.class, new VrfEntryKey(prefix));
155 InstanceIdentifier<VrfEntry> vrfEntryId = idBuilder.build();