FibManager module sync up
[netvirt.git] / vpnservice / fibmanager / fibmanager-impl / src / test / java / org / opendaylight / netvirt / fibmanager / test / FibManagerTest.java
1 /*
2  * Copyright (c) 2015 - 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
3  * 
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
7  */
8 package org.opendaylight.netvirt.fibmanager.test;
9
10 import java.math.BigInteger;
11
12 import org.junit.Before;
13 import org.junit.Test;
14
15 import static org.mockito.Matchers.any;
16 import static org.mockito.Mockito.when;
17
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
21
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;
52
53 @RunWith(MockitoJUnitRunner.class)
54 public class FibManagerTest {
55
56   @Mock
57   DataBroker dataBroker;
58   @Mock
59   ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
60   @Mock
61   ReadOnlyTransaction mockReadTx;
62   @Mock
63   WriteTransaction mockWriteTx;
64   @Mock
65   IMdsalApiManager mdsalManager;
66   @Mock
67   IVpnManager vpnmanager;
68   @Mock
69   VrfTablesKey vrfTableKey;
70
71   MockDataChangedEvent dataChangeEvent;
72   FibManager fibmgr;
73   private static final Long EgressPointer = 11L;
74   VrfEntry vrfEntry;
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;
83   BigInteger Dpn;
84   private static final long vpnId = 101L;
85   private static final long vpnIntfCnt = 2;
86   private static final Boolean isCleanupComplete = Boolean.FALSE;
87
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);
95   }
96
97   @Before
98   public void setUp() throws Exception {
99     when(
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) {
106
107       @Override
108       protected VpnInstanceOpDataEntry getVpnInstance(String rd) {
109         return new VpnInstanceOpDataEntry() {
110
111           @Override
112           public <E extends Augmentation<VpnInstanceOpDataEntry>> E getAugmentation(Class<E> aClass) {
113             return null;
114           }
115
116           @Override
117           public Long getVpnId() {
118             return vpnId;
119           }
120
121           @Override
122           public String getVrfId() {
123             return testRd;
124           }
125
126           @Override
127           public String getVpnInstanceName() {
128             return testVpnInstanceName;
129           }
130
131           @Override
132           public Long getVpnInterfaceCount() { return vpnIntfCnt; }
133
134           @Override
135           public Boolean isCleanupComplete(){return isCleanupComplete;}
136
137           @Override
138           public List<VpnToDpnList> getVpnToDpnList() {
139             List <VpnToDpnList> vpnToDpnLists =  new ArrayList<>();
140             vpnToDpnLists.add(new VpnToDpnList() {
141               @Override
142               public BigInteger getDpnId() {
143                 return Dpn;
144               }
145
146               @Override
147               public List<VpnInterfaces> getVpnInterfaces() {
148                 return null;
149               }
150
151               @Override
152               public List<IpAddresses> getIpAddresses() { return null; }
153
154               @Override
155               public VpnToDpnListKey getKey() {
156                 return new VpnToDpnListKey(Dpn);
157               }
158
159               @Override
160               public <E extends Augmentation<VpnToDpnList>> E getAugmentation(
161                       Class<E> augmentationType) {
162                 return null;
163               }
164
165               @Override
166               public Class<? extends DataContainer> getImplementedInterface() {
167                 return null;
168               }
169             });
170             return vpnToDpnLists;
171           }
172
173           @Override
174           public VpnInstanceOpDataEntryKey getKey() {
175             return new VpnInstanceOpDataEntryKey(testRd);
176           }
177
178           @Override
179           public List<Long> getRouteEntryId() {
180             return null;
181           }
182
183           @Override
184           public Class<? extends DataContainer> getImplementedInterface() {
185             return null;
186           }
187         };
188       }
189     };
190     SetupMocks();
191   }
192
193   @Test
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));
198   }
199
200   private VrfEntry buildVrfEntry(String rd, String prefix, List<String> nextHopList, int label, RouteOrigin origin) {
201
202     return new VrfEntryBuilder().setDestPrefix(prefix).setNextHopAddressList(nextHopList)
203             .setLabel((long) label).setOrigin(origin.getValue()).build();
204   }
205
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();
210     return vrfTableId;
211   }
212
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();
218     return vrfEntryId;
219   }
220 }