Unit tests for openconfig-impl/moduleconfig 70/30370/9
authorIveta Halanova <ihalanov@cisco.com>
Mon, 23 Nov 2015 12:43:14 +0000 (13:43 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 18 Dec 2015 09:37:06 +0000 (09:37 +0000)
Change-Id: I179021c1214f127151defcc77cd2a6eaec6ab251
Signed-off-by: Iveta Halanova <ihalanov@cisco.com>
bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPAppPeerProviderTest.java [new file with mode: 0644]
bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPConfigModuleProviderTest.java [new file with mode: 0644]
bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPOpenConfigListenerTest.java [new file with mode: 0644]
bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPPeerProviderTest.java [new file with mode: 0644]
bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPRibImplProviderTest.java [new file with mode: 0644]

diff --git a/bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPAppPeerProviderTest.java b/bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPAppPeerProviderTest.java
new file mode 100644 (file)
index 0000000..e705a6c
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. 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.protocol.bgp.openconfig.impl.moduleconfig;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import java.util.concurrent.Executor;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigHolder;
+import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.ApplicationRibId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.bgp.rib.impl.rev130409.modules.module.configuration.BgpApplicationPeer;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.bgp.rib.impl.rev130409.modules.module.configuration.bgp.application.peer.TargetRib;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.Module;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.ModuleKey;
+import org.opendaylight.yangtools.concepts.Identifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class BGPAppPeerProviderTest {
+
+    private BGPAppPeerProvider appPeerProvider;
+    private final Neighbor neighbor = new NeighborBuilder().setKey(new NeighborKey(new IpAddress(new Ipv4Address("1.1.1.2")))).build();
+    private final DataBroker dataBroker = Mockito.mock(DataBroker.class);
+    private final BGPConfigHolder<Global> globalState = Mockito.mock(BGPConfigHolder.class);
+    private final WriteTransaction wTx = Mockito.mock(WriteTransaction.class);
+    private final ReadWriteTransaction rwTx = Mockito.mock(ReadWriteTransaction.class);
+    private final BGPConfigHolder<Neighbor> neighborState = Mockito.mock(BGPConfigHolder.class);
+
+    @SuppressWarnings("unchecked")
+    @Before
+    public void setUp() throws Exception {
+        final BGPConfigStateStore configHolders = Mockito.mock(BGPConfigStateStore.class);
+        final BGPConfigModuleProvider moduleProvider = new BGPConfigModuleProvider();
+        final ModuleKey mKey = Mockito.mock(ModuleKey.class);
+
+        Mockito.doReturn(this.globalState).when(configHolders).getBGPConfigHolder(Bgp.class);
+        Mockito.doReturn(this.neighborState).when(configHolders).getBGPConfigHolder(Neighbor.class);
+        Mockito.doReturn(mKey).when(this.neighborState).getModuleKey(Mockito.any(NeighborKey.class));
+        Mockito.doReturn("mKey").when(mKey).toString();
+        Mockito.doReturn(Boolean.TRUE).when(this.neighborState).remove(Mockito.any(ModuleKey.class), Mockito.any(Neighbor.class));
+        Mockito.doReturn(Boolean.TRUE).when(this.neighborState).addOrUpdate(Mockito.any(ModuleKey.class), Mockito.any(Identifier.class), Mockito.any(Neighbor.class));
+
+        this.appPeerProvider = new BGPAppPeerProvider(configHolders, moduleProvider, this.dataBroker);
+
+        final ReadOnlyTransaction rTx = Mockito.mock(ReadOnlyTransaction.class);
+        final CheckedFuture future = Mockito.mock(CheckedFuture.class);
+        final Optional<Module> moduleOpt = Mockito.mock(Optional.class);
+        Mockito.doReturn(rTx).when(this.dataBroker).newReadOnlyTransaction();
+        Mockito.doReturn(this.wTx).when(this.dataBroker).newWriteOnlyTransaction();
+        Mockito.doReturn(this.rwTx).when(this.dataBroker).newReadWriteTransaction();
+        Mockito.doReturn(future).when(rTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+        Mockito.doReturn(future).when(this.rwTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+        Mockito.doNothing().when(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+        Mockito.doReturn(future).when(this.wTx).submit();
+        Mockito.doReturn(future).when(this.rwTx).submit();
+        Mockito.doNothing().when(this.wTx).put(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class), Mockito.any(Module.class));
+        Mockito.doReturn(moduleOpt).when(future).get();
+        Mockito.doReturn(null).when(future).checkedGet();
+        Mockito.doNothing().when(future).addListener(Mockito.any(Runnable.class), Mockito.any(Executor.class));
+        Mockito.doReturn(Boolean.TRUE).when(moduleOpt).isPresent();
+        final Module module = Mockito.mock(Module.class);
+        Mockito.doReturn(module).when(moduleOpt).get();
+        final BgpApplicationPeer appPeer = Mockito.mock(BgpApplicationPeer.class);
+        Mockito.doReturn(appPeer).when(module).getConfiguration();
+        final TargetRib rib = Mockito.mock(TargetRib.class);
+        Mockito.doReturn(rib).when(appPeer).getTargetRib();
+        final ApplicationRibId appRib = Mockito.mock(ApplicationRibId.class);
+        Mockito.doReturn(appRib).when(appPeer).getApplicationRibId();
+        Mockito.doReturn("appRib").when(appRib).toString();
+        Mockito.doReturn("targetRib").when(rib).toString();
+    }
+
+    @Test
+    public void testRemove() {
+        this.appPeerProvider.onNeighborRemoved(this.neighbor);
+        Mockito.verify(this.neighborState).remove(Mockito.any(ModuleKey.class), Mockito.any(Neighbor.class));
+        Mockito.verify(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+    }
+
+    @Test
+    public void testModified() {
+        this.appPeerProvider.onNeighborModified(this.neighbor);
+        Mockito.verify(this.neighborState).addOrUpdate(Mockito.any(ModuleKey.class), Mockito.any(Identifier.class), Mockito.any(Neighbor.class));
+    }
+
+}
diff --git a/bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPConfigModuleProviderTest.java b/bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPConfigModuleProviderTest.java
new file mode 100644 (file)
index 0000000..7cba979
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. 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.protocol.bgp.openconfig.impl.moduleconfig;
+
+import com.google.common.util.concurrent.CheckedFuture;
+import java.util.concurrent.ExecutionException;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.Module;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.ModuleKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.services.ServiceKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
+
+public class BGPConfigModuleProviderTest {
+
+    private static final BGPConfigModuleProvider PROVIDER = new BGPConfigModuleProvider();
+
+    private final Module module = Mockito.mock(Module.class);
+    private final ModuleKey key = Mockito.mock(ModuleKey.class);
+    private final WriteTransaction wtx = Mockito.mock(WriteTransaction.class);
+    private final ReadTransaction rtx = Mockito.mock(ReadTransaction.class);
+
+    @Before
+    public void setUp() throws Exception {
+        Mockito.doReturn(this.key).when(this.module).getKey();
+        Mockito.doReturn("key").when(this.key).toString();
+        Mockito.doReturn("module").when(this.module).toString();
+        Mockito.doNothing().when(this.wtx).put(Mockito.any(LogicalDatastoreType.class), Mockito.any(KeyedInstanceIdentifier.class), Mockito.any(Module.class));
+        Mockito.doNothing().when(this.wtx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(KeyedInstanceIdentifier.class));
+        final CheckedFuture<Void, Exception> future = Mockito.mock(CheckedFuture.class);
+        Mockito.doReturn(future).when(this.wtx).submit();
+        Mockito.doReturn(null).when(future).checkedGet();
+
+        Mockito.doReturn(future).when(this.rtx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+    }
+
+    @Test
+    public void testWriteTransactions() throws TransactionCommitFailedException {
+        PROVIDER.putModuleConfiguration(this.module, this.wtx);
+        PROVIDER.removeModuleConfiguration(this.key, this.wtx);
+        Mockito.verify(this.wtx).put(Mockito.any(LogicalDatastoreType.class), Mockito.any(KeyedInstanceIdentifier.class), Mockito.any(Module.class));
+        Mockito.verify(this.wtx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(KeyedInstanceIdentifier.class));
+        Mockito.verify(this.wtx, Mockito.times(2)).submit();
+    }
+
+    @Test
+    public void testReadTransactions() throws InterruptedException, ExecutionException {
+        PROVIDER.readModuleConfiguration(this.key, this.rtx);
+        final ServiceKey sKey = Mockito.mock(ServiceKey.class);
+        PROVIDER.readConfigService(sKey, this.rtx);
+        Mockito.verify(this.rtx, Mockito.times(2)).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+    }
+
+}
diff --git a/bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPOpenConfigListenerTest.java b/bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPOpenConfigListenerTest.java
new file mode 100644 (file)
index 0000000..de0bde8
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. 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.protocol.bgp.openconfig.impl.moduleconfig;
+
+import com.google.common.base.Optional;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.controller.md.sal.binding.api.MountPoint;
+import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigHolder;
+import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
+import org.opendaylight.protocol.bgp.openconfig.impl.util.GlobalIdentifier;
+import org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.Config1;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.Config1Builder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.ConfigBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Neighbors;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+
+public class BGPOpenConfigListenerTest {
+
+    private BGPOpenConfigListener configListener;
+
+    private Collection<DataTreeModification<Bgp>> changes;
+    private final DataObjectModification<Bgp> rootNode = Mockito.mock(DataObjectModification.class);
+    final DataObjectModification<DataObject> modif1 = Mockito.mock(DataObjectModification.class);
+    final DataObjectModification<DataObject> modif2 = Mockito.mock(DataObjectModification.class);
+    final DataObjectModification<DataObject> modif3 = Mockito.mock(DataObjectModification.class);
+
+    final DataObjectModification<DataObject> child1 = Mockito.mock(DataObjectModification.class);
+    final DataObjectModification<DataObject> child2 = Mockito.mock(DataObjectModification.class);
+
+    @SuppressWarnings("unchecked")
+    @Before
+    public void setUp() throws Exception {
+        final DataBroker dataBroker = Mockito.mock(DataBroker.class);
+        final ListenerRegistration<BGPOpenConfigListener> regListener = Mockito.mock(ListenerRegistration.class);
+
+        Mockito.doReturn(regListener).when(dataBroker).registerDataTreeChangeListener(Mockito.any(DataTreeIdentifier.class), Mockito.any(BGPOpenConfigListener.class));
+        Mockito.doNothing().when(regListener).close();
+
+        final MountPoint mountPoint = Mockito.mock(MountPoint.class);
+        final Optional<DataBroker> dataBrokerOpt = Mockito.mock(Optional.class);
+
+        Mockito.doReturn(dataBrokerOpt).when(mountPoint).getService(DataBroker.class);
+        Mockito.doReturn(Boolean.TRUE).when(dataBrokerOpt).isPresent();
+        Mockito.doReturn(dataBroker).when(dataBrokerOpt).get();
+
+        final BGPConfigStateStore configStateHolders = Mockito.mock(BGPConfigStateStore.class);
+        final BGPConfigHolder<Global> globalState = Mockito.mock(BGPConfigHolder.class);
+        final BGPConfigHolder<Neighbor> neighborState = Mockito.mock(BGPConfigHolder.class);
+
+        Mockito.doReturn(globalState).when(configStateHolders).getBGPConfigHolder(Bgp.class);
+        Mockito.doReturn(neighborState).when(configStateHolders).getBGPConfigHolder(Neighbor.class);
+        Mockito.doReturn(null).when(globalState).getModuleKey(Mockito.any(GlobalIdentifier.class));
+        Mockito.doReturn(null).when(neighborState).getModuleKey(Mockito.any(GlobalIdentifier.class));
+
+        this.configListener = new BGPOpenConfigListener(dataBroker, mountPoint, configStateHolders);
+        final DataTreeModification<Bgp> modification = Mockito.mock(DataTreeModification.class);
+        Mockito.doReturn(this.rootNode).when(modification).getRootNode();
+
+        final Collection<DataObjectModification<DataObject>> children = Arrays.asList(this.modif1, this.modif2, this.modif3);
+
+        Mockito.doReturn(children).when(this.rootNode).getModifiedChildren();
+        Mockito.doReturn(ModificationType.SUBTREE_MODIFIED).when(this.modif1).getModificationType();
+        Mockito.doReturn(ModificationType.DELETE).when(this.modif2).getModificationType();
+        Mockito.doReturn(ModificationType.DELETE).when(this.modif3).getModificationType();
+
+        final Global global = Mockito.mock(Global.class);
+        final Neighbors neighbors = Mockito.mock(Neighbors.class);
+        final ArrayList<Neighbor> neighbor = new ArrayList<Neighbor>();
+        neighbor.add(createNeighbor());
+        Mockito.doReturn(neighbor).when(neighbors).getNeighbor();
+        Mockito.doReturn(neighbors).when(this.modif1).getDataAfter();
+        Mockito.doReturn(global).when(this.modif2).getDataBefore();
+        Mockito.doReturn(neighbors).when(this.modif3).getDataBefore();
+
+        final Collection<DataObjectModification<DataObject>> children2 = Arrays.asList(this.child1, this.child2);
+        Mockito.doReturn(ModificationType.DELETE).when(this.child1).getModificationType();
+        Mockito.doReturn(createNeighbor()).when(this.child1).getDataBefore();
+        Mockito.doReturn(createNeighbor()).when(this.child2).getDataAfter();
+        Mockito.doReturn(ModificationType.SUBTREE_MODIFIED).when(this.child2).getModificationType();
+        Mockito.doReturn(children2).when(this.modif1).getModifiedChildren();
+        Mockito.doReturn(null).when(dataBroker).newReadOnlyTransaction();
+
+        this.changes = Arrays.asList(modification);
+    }
+
+    @Test
+    public void testOnDataTreeChanged() {
+        this.configListener.onDataTreeChanged(this.changes);
+        Mockito.verify(this.rootNode).getModifiedChildren();
+        Mockito.verify(this.modif1).getModificationType();
+        Mockito.verify(this.modif2).getModificationType();
+        Mockito.verify(this.modif3).getModificationType();
+        Mockito.verify(this.modif1).getDataAfter();
+        Mockito.verify(this.modif2).getDataBefore();
+        Mockito.verify(this.modif3).getDataBefore();
+        Mockito.verify(this.child1).getDataBefore();
+        Mockito.verify(this.child2).getDataAfter();
+    }
+
+    @After
+    public void after() {
+        this.configListener.close();
+    }
+
+    private Neighbor createNeighbor() {
+        final NeighborBuilder neighbor = new NeighborBuilder();
+        neighbor.setConfig(new ConfigBuilder()
+            .addAugmentation(Config1.class, new Config1Builder()
+                .setPeerGroup(OpenConfigUtil.APPLICATION_PEER_GROUP_NAME)
+                .build())
+            .build());
+        return neighbor.build();
+    }
+
+}
diff --git a/bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPPeerProviderTest.java b/bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPPeerProviderTest.java
new file mode 100644 (file)
index 0000000..6cc499e
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. 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.protocol.bgp.openconfig.impl.moduleconfig;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Executor;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigHolder;
+import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafisBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.Module;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.ModuleKey;
+import org.opendaylight.yangtools.concepts.Identifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class BGPPeerProviderTest {
+
+    private BGPPeerProvider peerProvider;
+    private final Neighbor neighbor = createNeighbor();
+    private final DataBroker dataBroker = Mockito.mock(DataBroker.class);
+    private final BGPConfigHolder<Global> globalState = Mockito.mock(BGPConfigHolder.class);
+    private final ReadWriteTransaction rwTx = Mockito.mock(ReadWriteTransaction.class);
+    private final BGPConfigHolder<Neighbor> neighborState = Mockito.mock(BGPConfigHolder.class);
+
+    @SuppressWarnings("unchecked")
+    @Before
+    public void setUp() throws Exception {
+        final BGPConfigStateStore configHolders = Mockito.mock(BGPConfigStateStore.class);
+        final BGPConfigModuleProvider moduleProvider = new BGPConfigModuleProvider();
+
+        Mockito.doReturn(this.globalState).when(configHolders).getBGPConfigHolder(Bgp.class);
+        Mockito.doReturn(this.neighborState).when(configHolders).getBGPConfigHolder(Neighbor.class);
+
+        final ModuleKey mKey = Mockito.mock(ModuleKey.class);
+        Mockito.doReturn(mKey).when(this.neighborState).getModuleKey(this.neighbor.getKey());
+        Mockito.doReturn("mKey").when(mKey).toString();
+        Mockito.doReturn(Boolean.TRUE).when(this.neighborState).remove(mKey, createNeighbor());
+        this.peerProvider = new BGPPeerProvider(configHolders, moduleProvider, this.dataBroker);
+
+        final CheckedFuture future = Mockito.mock(CheckedFuture.class);
+        final Optional<Module> moduleOpt = Mockito.mock(Optional.class);
+        Mockito.doReturn(this.rwTx).when(this.dataBroker).newReadWriteTransaction();
+        Mockito.doReturn(future).when(this.rwTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+        Mockito.doReturn(moduleOpt).when(future).get();
+        Mockito.doReturn(null).when(future).checkedGet();
+        Mockito.doReturn(Boolean.TRUE).when(moduleOpt).isPresent();
+        final Module module = Mockito.mock(Module.class);
+        Mockito.doReturn(module).when(moduleOpt).get();
+
+        Mockito.doReturn(future).when(this.rwTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+        Mockito.doNothing().when(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+        Mockito.doReturn(future).when(this.rwTx).submit();
+        Mockito.doNothing().when(future).addListener(Mockito.any(Runnable.class), Mockito.any(Executor.class));
+        Mockito.doReturn(Boolean.TRUE).when(this.neighborState).addOrUpdate(Mockito.any(ModuleKey.class), Mockito.any(Identifier.class), Mockito.any(Neighbor.class));
+    }
+
+    @Test
+    public void testRemoved() {
+        this.peerProvider.onNeighborRemoved(this.neighbor);
+        Mockito.verify(this.neighborState).remove(Mockito.any(ModuleKey.class), Mockito.any(Neighbor.class));
+        Mockito.verify(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+    }
+
+    @Test
+    public void testModified() {
+//        TODO: problem with advertizedTablesFuture on line 98, it won't run and finish successfuly
+//        so advertizedTablesFuture.get() on line 103 is blocked
+//        same in BGPRibImplProviderTest
+    }
+
+    private Neighbor createNeighbor() {
+        final List<AfiSafi> families = new ArrayList<AfiSafi>();
+        final AfiSafi afi = new AfiSafiBuilder().build();
+        families.add(afi);
+        return new NeighborBuilder()
+            .setKey(new NeighborKey(new IpAddress(new Ipv4Address("1.1.1.5"))))
+            .setAfiSafis(new AfiSafisBuilder().setAfiSafi(families).build()).build();
+    }
+}
diff --git a/bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPRibImplProviderTest.java b/bgp/openconfig-impl/src/test/java/org/opendaylight/protocol/bgp/openconfig/impl/moduleconfig/BGPRibImplProviderTest.java
new file mode 100644 (file)
index 0000000..8e53ff6
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. 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.protocol.bgp.openconfig.impl.moduleconfig;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.CheckedFuture;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigHolder;
+import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
+import org.opendaylight.protocol.bgp.openconfig.impl.util.GlobalIdentifier;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base.AfiSafisBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base.ConfigBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.BgpBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.GlobalBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.Module;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.ModuleKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class BGPRibImplProviderTest {
+
+    private BGPRibImplProvider ribProvider;
+    private BGPRibImplProvider ribProvider2;
+    private final BGPConfigModuleProvider moduleProvider = new BGPConfigModuleProvider();
+
+    private final ModuleKey moduleKey = Mockito.mock(ModuleKey.class);
+    private final DataBroker dataBroker = Mockito.mock(DataBroker.class);
+    private final DataBroker dataBroker2 = Mockito.mock(DataBroker.class);
+    private final ReadWriteTransaction rwTx = Mockito.mock(ReadWriteTransaction.class);
+    private final ReadOnlyTransaction rTx2 = Mockito.mock(ReadOnlyTransaction.class);
+
+    @SuppressWarnings("unchecked")
+    @Before
+    public void setUp() throws Exception {
+        final BGPConfigStateStore configHolders = Mockito.mock(BGPConfigStateStore.class);
+
+        final BGPConfigHolder<Global> globalState = Mockito.mock(BGPConfigHolder.class);
+        Mockito.doReturn(globalState).when(configHolders).getBGPConfigHolder(Bgp.class);
+
+        this.ribProvider = new BGPRibImplProvider(configHolders, this.moduleProvider, this.dataBroker);
+        this.ribProvider2 = new BGPRibImplProvider(configHolders, this.moduleProvider, this.dataBroker2);
+
+        Mockito.doReturn(this.moduleKey).when(globalState).getModuleKey(Mockito.any(GlobalIdentifier.class));
+        Mockito.doReturn("module-key").when(this.moduleKey).toString();
+        Mockito.doReturn(Boolean.TRUE).when(globalState).remove(Mockito.any(ModuleKey.class), Mockito.any(Global.class));
+        Mockito.doReturn(Boolean.FALSE).when(globalState).remove(this.moduleKey, null);
+        Mockito.doReturn(Boolean.TRUE).when(globalState).addOrUpdate(Mockito.any(ModuleKey.class), Mockito.any(GlobalIdentifier.class), Mockito.any(Global.class));
+
+        Mockito.doReturn(this.rwTx).when(this.dataBroker).newReadWriteTransaction();
+        Mockito.doReturn(this.rTx2).when(this.dataBroker2).newReadOnlyTransaction();
+
+        final CheckedFuture<Void, Exception> future = Mockito.mock(CheckedFuture.class);
+        final CheckedFuture<Void, Exception> future2 = Mockito.mock(CheckedFuture.class);
+        Mockito.doReturn(future).when(this.rwTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+        Mockito.doNothing().when(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+        Mockito.doReturn(future2).when(this.rTx2).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+
+        Mockito.doReturn(future).when(this.rwTx).submit();
+        Mockito.doReturn(null).when(future).checkedGet();
+
+        final Optional<Module> moduleOpt = Mockito.mock(Optional.class);
+        final Optional<Module> moduleOpt2 = Mockito.mock(Optional.class);
+        Mockito.doReturn(moduleOpt).when(future).get();
+        Mockito.doReturn(moduleOpt2).when(future2).get();
+        Mockito.doReturn(Boolean.TRUE).when(moduleOpt).isPresent();
+        Mockito.doReturn(Boolean.FALSE).when(moduleOpt2).isPresent();
+        final Module module = Mockito.mock(Module.class);
+        Mockito.doReturn(module).when(moduleOpt).get();
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testGlobalRemoved() throws TransactionCommitFailedException {
+        this.ribProvider.onGlobalRemoved(createBgp().getGlobal());
+        Mockito.verify(this.rwTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+        Mockito.verify(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
+    }
+
+    @Test
+    public void testGlobalModified() {
+        this.ribProvider2.onGlobalModified(createBgp().getGlobal());
+    }
+
+    private Bgp createBgp() {
+        final GlobalBuilder global = new GlobalBuilder();
+        final List<AfiSafi> families = new ArrayList<AfiSafi>();
+        global.setAfiSafis(new AfiSafisBuilder().setAfiSafi(families).build())
+            .setConfig(new ConfigBuilder()
+                .setRouterId(new Ipv4Address("1.1.1.1"))
+                .setAs(new AsNumber(10L)).build());
+        return new BgpBuilder().setGlobal(global.build()).build();
+    }
+
+}