Added unit tests for NextHopManager 26/20426/3
authorAbhinav Gupta <abhi3123@gmail.com>
Thu, 14 May 2015 19:06:26 +0000 (00:36 +0530)
committerAbhinav Gupta <abhi3123@gmail.com>
Thu, 14 May 2015 19:46:30 +0000 (01:16 +0530)
Change-Id: Ia4cdd6cf1d938305f120129da0c8460b9681325b
Signed-off-by: Abhinav Gupta <abhi3123@gmail.com>
nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java
nexthopmgr/nexthopmgr-impl/src/test/java/org/opendaylight/vpnservice/nexthopmgr/test/MockDataChangedEvent.java [new file with mode: 0644]
nexthopmgr/nexthopmgr-impl/src/test/java/org/opendaylight/vpnservice/nexthopmgr/test/NexthopManagerTest.java [new file with mode: 0644]

index 29d5acd9bd677fcfd791664a264e651b6c385855..8ea89397fcce4f331d70f43b8fd407fc95b638af 100644 (file)
@@ -117,7 +117,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable {
     }
 
 
     }
 
 
-    private long getVpnId(String vpnName) {
+    protected long getVpnId(String vpnName) {
         InstanceIdentifierBuilder<VpnInstance> idBuilder = InstanceIdentifier.builder(VpnInstances.class)
                 .child(VpnInstance.class, new VpnInstanceKey(vpnName));
 
         InstanceIdentifierBuilder<VpnInstance> idBuilder = InstanceIdentifier.builder(VpnInstances.class)
                 .child(VpnInstance.class, new VpnInstanceKey(vpnName));
 
@@ -140,7 +140,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable {
         return dpn;
     }
 
         return dpn;
     }
 
-    private int createNextHopPointer(String nexthopKey) {
+    protected int createNextHopPointer(String nexthopKey) {
         GetUniqueIdInput getIdInput = new GetUniqueIdInputBuilder()
             .setPoolName("nextHopPointerPool").setIdKey(nexthopKey)
             .build();
         GetUniqueIdInput getIdInput = new GetUniqueIdInputBuilder()
             .setPoolName("nextHopPointerPool").setIdKey(nexthopKey)
             .build();
@@ -213,7 +213,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable {
         }
     }
 
         }
     }
 
-    private void addVpnNexthopToDS(long vpnId, String ipPrefix, long egressPointer) {
+    protected void addVpnNexthopToDS(long vpnId, String ipPrefix, long egressPointer) {
 
         InstanceIdentifierBuilder<VpnNexthops> idBuilder = InstanceIdentifier.builder(L3nexthop.class)
                 .child(VpnNexthops.class, new VpnNexthopsKey(vpnId));
 
         InstanceIdentifierBuilder<VpnNexthops> idBuilder = InstanceIdentifier.builder(L3nexthop.class)
                 .child(VpnNexthops.class, new VpnNexthopsKey(vpnId));
@@ -270,7 +270,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable {
 
     }
 
 
     }
 
-    private VpnNexthop getVpnNexthop(long vpnId, String ipAddress) {
+    protected VpnNexthop getVpnNexthop(long vpnId, String ipAddress) {
 
         // check if vpn node is there 
         InstanceIdentifierBuilder<VpnNexthops> idBuilder = InstanceIdentifier.builder(L3nexthop.class)
 
         // check if vpn node is there 
         InstanceIdentifierBuilder<VpnNexthops> idBuilder = InstanceIdentifier.builder(L3nexthop.class)
diff --git a/nexthopmgr/nexthopmgr-impl/src/test/java/org/opendaylight/vpnservice/nexthopmgr/test/MockDataChangedEvent.java b/nexthopmgr/nexthopmgr-impl/src/test/java/org/opendaylight/vpnservice/nexthopmgr/test/MockDataChangedEvent.java
new file mode 100644 (file)
index 0000000..4015257
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * 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.nexthopmgr.test;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+class MockDataChangedEvent implements AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> {
+  Map<InstanceIdentifier<?>, DataObject> created = new HashMap<>();
+  Map<InstanceIdentifier<?>, DataObject> updated = new HashMap<>();
+  Map<InstanceIdentifier<?>, DataObject> original = new HashMap<>();
+  Set<InstanceIdentifier<?>> removed = new HashSet<>();
+
+  @Override
+  public Map<InstanceIdentifier<?>, DataObject> getCreatedData() {
+    return created;
+  }
+
+  @Override
+  public Map<InstanceIdentifier<?>, DataObject> getUpdatedData() {
+    return updated;
+  }
+
+  @Override
+  public Set<InstanceIdentifier<?>> getRemovedPaths() {
+    return removed;
+  }
+
+  @Override
+  public Map<InstanceIdentifier<?>, DataObject> getOriginalData() {
+    return original;
+  }
+
+  @Override
+  public DataObject getOriginalSubtree() {
+    throw new UnsupportedOperationException("Not implemented by mock");
+  }
+
+  @Override
+  public DataObject getUpdatedSubtree() {
+    throw new UnsupportedOperationException("Not implemented by mock");
+  }
+}
diff --git a/nexthopmgr/nexthopmgr-impl/src/test/java/org/opendaylight/vpnservice/nexthopmgr/test/NexthopManagerTest.java b/nexthopmgr/nexthopmgr-impl/src/test/java/org/opendaylight/vpnservice/nexthopmgr/test/NexthopManagerTest.java
new file mode 100644 (file)
index 0000000..48ba2ba
--- /dev/null
@@ -0,0 +1,208 @@
+/*
+ * 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.nexthopmgr.test;
+
+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.Futures;
+
+import java.lang.reflect.InvocationTargetException;
+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.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+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.idmanager.IdManager;
+import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
+import org.opendaylight.vpnservice.nexthopmgr.NexthopManager;
+import org.opendaylight.vpnservice.nexthopmgr.VpnInterfaceChangeListener;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInterfaces;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder;
+import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.Adjacencies;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.AdjacenciesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.Adjacency;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l3vpn.rev130911.adjacency.list.AdjacencyKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.VpnNexthops;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.vpnnexthops.VpnNexthop;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.l3nexthop.rev150409.l3nexthop.vpnnexthops.VpnNexthopBuilder;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.binding.DataContainer;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager;
+
+@RunWith(MockitoJUnitRunner.class)
+public class NexthopManagerTest {
+
+  private final String ifName = "dpn1-if0";
+  private final String vpnName = "vpn1";
+  private final String ipAddress = "1.1.1.1";
+  private final String macAddress = "11:22:33:44:55:66";
+  private final int groupId = 5000;
+  private final long dpId = 1L;
+  private final long vpnId = 2L;
+
+  Map<InstanceIdentifier<?>, DataObject> written = new HashMap<>();
+  Map<InstanceIdentifier<?>, DataObject> updated = new HashMap<>();
+  Set<InstanceIdentifier<?>> removed = new HashSet<>();
+
+  @Mock
+  DataBroker dataBroker;
+  @Mock
+  IdManager idManager;
+  @Mock
+  IInterfaceManager interfacemanager;
+  @Mock
+  ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
+  @Mock
+  ReadOnlyTransaction mockReadTx;
+  @Mock
+  WriteTransaction mockWriteTx;
+  @Mock
+  IMdsalApiManager mdsalmanager;
+
+  MockDataChangedEvent dataChangeEvent;
+  NexthopManager nhmgr;
+  VpnInterfaceChangeListener vpnchglistener;
+  VpnInstance vpninstance;
+  VpnInterface vpninterface;
+  VpnNexthops vpnnexthops;
+  VpnNexthop vpnNexthop;
+
+  InstanceIdentifier<VpnInterface> vpnInterfaceIdent;
+  InstanceIdentifier<Adjacencies> adjacencies;
+  Adjacencies adjacency;
+  List<Adjacency> adjList = new ArrayList<Adjacency>();
+
+  Adjacency adjacencyobject = new Adjacency() {
+
+    @Override
+    public <E extends Augmentation<Adjacency>> E getAugmentation(Class<E> augmentationType) {
+      return null;
+    }
+
+    @Override
+    public Class<? extends DataContainer> getImplementedInterface() {
+      return null;
+    }
+
+    @Override
+    public Long getNextHopId() {
+      return null;
+    }
+
+    @Override
+    public String getMacAddress() {
+      return macAddress;
+    }
+
+    @Override
+    public Long getLabel() {
+      return null;
+    }
+
+    @Override
+    public AdjacencyKey getKey() {
+      return null;
+    }
+
+    @Override
+    public String getIpAddress() {
+      return ipAddress;
+    }
+  };
+
+  @Before
+  public void setUp() throws Exception {
+    adjacency = getVpnInterfaceAugmentation(adjList);
+    adjacencies =
+            InstanceIdentifier.create(VpnInterfaces.class).child(VpnInterface.class).augmentation(Adjacencies.class);
+    vpnInterfaceIdent = adjacencies.firstIdentifierOf(VpnInterface.class);
+    vpninterface = getVpnInterface(ifName, vpnName, adjacency);
+    adjList.add(adjacencyobject);
+
+    when(
+            dataBroker.registerDataChangeListener(any(LogicalDatastoreType.class), any(InstanceIdentifier.class),
+                    any(DataChangeListener.class), any(DataChangeScope.class))).thenReturn(
+            dataChangeListenerRegistration);
+
+    dataChangeEvent = new MockDataChangedEvent();
+    vpnNexthop = new VpnNexthopBuilder().setEgressPointer(10L).setIpAddress(ipAddress).build();
+    nhmgr = new NexthopManager(dataBroker) {
+      protected int createNextHopPointer(String nexthopKey) {
+        return groupId;
+      }
+
+      protected long getVpnId(String vpnName) {
+        return vpnId;
+      }
+
+      protected VpnNexthop getVpnNexthop(long vpnId, String ipAddress) {
+        return vpnNexthop;
+      }
+
+      protected void addVpnNexthopToDS(long vpnId, String ipPrefix, long egressPointer) {
+        return;
+      }
+    };
+
+    nhmgr.setInterfaceManager(interfacemanager);
+    nhmgr.setMdsalManager(mdsalmanager);
+    vpnchglistener = new VpnInterfaceChangeListener(dataBroker, nhmgr);
+    setupMocks();
+  }
+
+  private void setupMocks() {
+    when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
+    when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
+  }
+
+  @Test
+  public void testAdd() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+    Optional<VpnInterface> vpnIf = Optional.of(vpninterface);
+
+    doReturn(Futures.immediateCheckedFuture(vpnIf)).when(mockReadTx).read(LogicalDatastoreType.OPERATIONAL,
+            vpnInterfaceIdent);
+
+    when(interfacemanager.getDpnForInterface(ifName)).thenReturn(dpId);
+    dataChangeEvent.created.put(adjacencies, adjacency);
+    vpnchglistener.onDataChanged(dataChangeEvent);
+
+ // FIXME: Add some verifications
+  }
+
+  private Adjacencies getVpnInterfaceAugmentation(List<Adjacency> nextHops) {
+    return new AdjacenciesBuilder().setAdjacency(nextHops).build();
+  }
+
+  private VpnInterface getVpnInterface(String intfName, String vpnName, Adjacencies aug) {
+    return new VpnInterfaceBuilder().setKey(new VpnInterfaceKey(intfName)).setVpnInstanceName(vpnName)
+            .addAugmentation(Adjacencies.class, aug).build();
+  }
+}
\ No newline at end of file