X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=fibmanager%2Ffibmanager-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Ffibmanager%2Ftest%2FFibManagerTest.java;fp=fibmanager%2Ffibmanager-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Ffibmanager%2Ftest%2FFibManagerTest.java;h=6af4c4335e569490a8c1e2c2992623485d9b14f3;hb=49a5bcd8f91f546eef0cc465a5692224f26b877c;hp=0000000000000000000000000000000000000000;hpb=2ccb70accdd075712be8a38e812c2aefa3e2fdfc;p=vpnservice.git diff --git a/fibmanager/fibmanager-impl/src/test/java/org/opendaylight/vpnservice/fibmanager/test/FibManagerTest.java b/fibmanager/fibmanager-impl/src/test/java/org/opendaylight/vpnservice/fibmanager/test/FibManagerTest.java new file mode 100644 index 00000000..6af4c433 --- /dev/null +++ b/fibmanager/fibmanager-impl/src/test/java/org/opendaylight/vpnservice/fibmanager/test/FibManagerTest.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v1.0 which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.vpnservice.fibmanager.test; + +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.*; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.when; + +import com.google.common.base.Optional; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.vpnmanager.api.IVpnManager; +import org.opendaylight.vpnservice.fibmanager.FibManager; +import org.opendaylight.vpnservice.fibmanager.test.MockDataChangedEvent; +import org.opendaylight.vpnservice.mdsalutil.FlowEntity; +import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTables; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntryBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntryKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.GetEgressPointerOutput; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.L3nexthopService; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.RpcService; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; + +@RunWith(MockitoJUnitRunner.class) +public class FibManagerTest { + + @Mock + DataBroker dataBroker; + @Mock + ListenerRegistration dataChangeListenerRegistration; + @Mock + ReadOnlyTransaction mockReadTx; + @Mock + WriteTransaction mockWriteTx; + @Mock + L3nexthopService l3nexthopService; + @Mock + IMdsalApiManager mdsalManager; + @Mock + IVpnManager vpnmanager; + @Mock + GetEgressPointerOutput adjacency; + @Mock + VrfTablesKey vrfTableKey; + + MockDataChangedEvent dataChangeEvent; + FibManager fibmgr; + Long EgressPointer = 11L; + VrfEntry vrfEntry; + InstanceIdentifier identifier; + VrfEntryBuilder vrfbuilder; + String rd = "routeDis"; + String prefix = "0.1.2.3"; + String nexthop = "1.1.1.1"; + int label = 10; + List Dpns; + + private void SetupMocks() { + Dpns = new ArrayList(); + Dpns.add(100000L); + identifier = buildVrfEntryId(rd, prefix); + vrfEntry = buildVrfEntry(rd, prefix, nexthop, label); + fibmgr.setMdsalManager(mdsalManager); + fibmgr.setVpnmanager(vpnmanager); + when(adjacency.getEgressPointer()).thenReturn(EgressPointer); + when(adjacency.isLocalDestination()).thenReturn(true); + when(vrfTableKey.getRouteDistinguisher()).thenReturn(rd); + when(vpnmanager.getDpnsForVpn(any(Long.class))).thenReturn(Dpns); + } + + @Before + public void setUp() throws Exception { + when( + dataBroker.registerDataChangeListener(any(LogicalDatastoreType.class), + any(InstanceIdentifier.class), any(DataChangeListener.class), + any(DataChangeScope.class))).thenReturn(dataChangeListenerRegistration); + dataChangeEvent = new MockDataChangedEvent(); + vrfbuilder = new VrfEntryBuilder(); + fibmgr = new FibManager(dataBroker, l3nexthopService) { + protected GetEgressPointerOutput resolveAdjacency(final long dpId, final long vpnId, + final VrfEntry vrfEntry) { + return adjacency; + } + + protected Long getVpnId(String rd) { + return 101L; + } + }; + SetupMocks(); + } + + @Test + public void testAdd() { + dataChangeEvent.created.put(identifier, vrfEntry); + fibmgr.onDataChanged(dataChangeEvent); + Mockito.verify(mdsalManager, Mockito.times(2)).installFlow(any(FlowEntity.class)); + } + + private VrfEntry buildVrfEntry(String rd, String prefix, String nexthop, int label) { + return new VrfEntryBuilder().setDestPrefix(prefix).setNextHopAddress(nexthop) + .setLabel((long) label).build(); + } + + public static InstanceIdentifier buildVrfTableId(String rd) { + InstanceIdentifierBuilder idBuilder = + InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd)); + InstanceIdentifier vrfTableId = idBuilder.build(); + return vrfTableId; + } + + public static InstanceIdentifier buildVrfEntryId(String rd, String prefix) { + InstanceIdentifierBuilder idBuilder = + InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd)) + .child(VrfEntry.class, new VrfEntryKey(prefix)); + InstanceIdentifier vrfEntryId = idBuilder.build(); + return vrfEntryId; + } +}