Merge "LLDP monitor interval update fixes"
[vpnservice.git] / fibmanager / fibmanager-impl / src / test / java / org / opendaylight / vpnservice / 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.vpnservice.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.List;
20
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.vpnmanager.api.IVpnManager;
31 import org.opendaylight.vpnservice.fibmanager.FibManager;
32 import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntry;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntryKey;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnListKey;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.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.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.vpnservice.fibmanager.rev150330.FibEntries;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTables;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesKey;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntry;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntryBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.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;
50
51 @RunWith(MockitoJUnitRunner.class)
52 public class FibManagerTest {
53
54   @Mock
55   DataBroker dataBroker;
56   @Mock
57   ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
58   @Mock
59   ReadOnlyTransaction mockReadTx;
60   @Mock
61   WriteTransaction mockWriteTx;
62   @Mock
63   IMdsalApiManager mdsalManager;
64   @Mock
65   IVpnManager vpnmanager;
66   @Mock
67   VrfTablesKey vrfTableKey;
68
69   MockDataChangedEvent dataChangeEvent;
70   FibManager fibmgr;
71   private static final Long EgressPointer = 11L;
72   VrfEntry vrfEntry;
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;
79   BigInteger Dpn;
80   private static final long vpnId = 101L;
81   private static final long vpnIntfCnt = 2;
82
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);
90   }
91
92   @Before
93   public void setUp() throws Exception {
94     when(
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) {
101
102       protected VpnInstanceOpDataEntry getVpnInstance(String rd) {
103         return new VpnInstanceOpDataEntry() {
104
105           @Override
106           public <E extends Augmentation<VpnInstanceOpDataEntry>> E getAugmentation(Class<E> aClass) {
107             return null;
108           }
109
110           @Override
111           public Long getVpnId() {
112             return vpnId;
113           }
114
115           @Override
116           public String getVrfId() {
117             return testRd;
118           }
119
120           @Override
121           public Long getVpnInterfaceCount() { return vpnIntfCnt; }
122
123           @Override
124           public List<VpnToDpnList> getVpnToDpnList() {
125             List <VpnToDpnList> vpnToDpnLists =  new ArrayList<>();
126             vpnToDpnLists.add(new VpnToDpnList() {
127               @Override
128               public BigInteger getDpnId() {
129                 return Dpn;
130               }
131
132               @Override
133               public List<VpnInterfaces> getVpnInterfaces() {
134                 return null;
135               }
136
137               @Override
138               public List<IpAddresses> getIpAddresses() { return null; }
139
140               @Override
141               public VpnToDpnListKey getKey() {
142                 return new VpnToDpnListKey(Dpn);
143               }
144
145               @Override
146               public <E extends Augmentation<VpnToDpnList>> E getAugmentation(
147                   Class<E> augmentationType) {
148                 return null;
149               }
150
151               @Override
152               public Class<? extends DataContainer> getImplementedInterface() {
153                 return null;
154               }
155             });
156             return vpnToDpnLists;
157           }
158
159           @Override
160           public VpnInstanceOpDataEntryKey getKey() {
161             return new VpnInstanceOpDataEntryKey(testRd);
162           }
163
164           @Override
165           public List<Long> getRouteEntryId() {
166             return null;
167           }
168
169           @Override
170           public Class<? extends DataContainer> getImplementedInterface() {
171             return null;
172           }
173         };
174       }
175     };
176     SetupMocks();
177   }
178
179   @Test
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));
184   }
185
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();
189   }
190
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();
195     return vrfTableId;
196   }
197
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();
203     return vrfEntryId;
204   }
205 }