2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.bgp.openconfig.impl.moduleconfig;
10 import com.google.common.base.Optional;
11 import com.google.common.util.concurrent.CheckedFuture;
12 import java.util.concurrent.Executor;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.mockito.Mockito;
16 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
17 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
18 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
19 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
20 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
21 import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigHolder;
22 import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
23 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
24 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
25 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
26 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
27 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.ApplicationRibId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.bgp.rib.impl.rev130409.modules.module.configuration.BgpApplicationPeer;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.bgp.rib.impl.rev130409.modules.module.configuration.bgp.application.peer.TargetRib;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.Module;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.ModuleKey;
35 import org.opendaylight.yangtools.concepts.Identifier;
36 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
38 public class BGPAppPeerProviderTest {
40 private BGPAppPeerProvider appPeerProvider;
41 private final Neighbor neighbor = new NeighborBuilder().setKey(new NeighborKey(new IpAddress(new Ipv4Address("1.1.1.2")))).build();
42 private final DataBroker dataBroker = Mockito.mock(DataBroker.class);
43 private final BGPConfigHolder<Global> globalState = Mockito.mock(BGPConfigHolder.class);
44 private final WriteTransaction wTx = Mockito.mock(WriteTransaction.class);
45 private final ReadWriteTransaction rwTx = Mockito.mock(ReadWriteTransaction.class);
46 private final BGPConfigHolder<Neighbor> neighborState = Mockito.mock(BGPConfigHolder.class);
48 @SuppressWarnings("unchecked")
50 public void setUp() throws Exception {
51 final BGPConfigStateStore configHolders = Mockito.mock(BGPConfigStateStore.class);
52 final BGPConfigModuleProvider moduleProvider = new BGPConfigModuleProvider();
53 final ModuleKey mKey = Mockito.mock(ModuleKey.class);
55 Mockito.doReturn(this.globalState).when(configHolders).getBGPConfigHolder(Bgp.class);
56 Mockito.doReturn(this.neighborState).when(configHolders).getBGPConfigHolder(Neighbor.class);
57 Mockito.doReturn(mKey).when(this.neighborState).getModuleKey(Mockito.any(NeighborKey.class));
58 Mockito.doReturn("mKey").when(mKey).toString();
59 Mockito.doReturn(Boolean.TRUE).when(this.neighborState).remove(Mockito.any(ModuleKey.class), Mockito.any(Neighbor.class));
60 Mockito.doReturn(Boolean.TRUE).when(this.neighborState).addOrUpdate(Mockito.any(ModuleKey.class), Mockito.any(Identifier.class), Mockito.any(Neighbor.class));
62 this.appPeerProvider = new BGPAppPeerProvider(configHolders, moduleProvider, this.dataBroker);
64 final ReadOnlyTransaction rTx = Mockito.mock(ReadOnlyTransaction.class);
65 final CheckedFuture future = Mockito.mock(CheckedFuture.class);
66 final Optional<Module> moduleOpt = Mockito.mock(Optional.class);
67 Mockito.doReturn(rTx).when(this.dataBroker).newReadOnlyTransaction();
68 Mockito.doReturn(this.wTx).when(this.dataBroker).newWriteOnlyTransaction();
69 Mockito.doReturn(this.rwTx).when(this.dataBroker).newReadWriteTransaction();
70 Mockito.doReturn(future).when(rTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
71 Mockito.doReturn(future).when(this.rwTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
72 Mockito.doNothing().when(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
73 Mockito.doReturn(future).when(this.wTx).submit();
74 Mockito.doReturn(future).when(this.rwTx).submit();
75 Mockito.doNothing().when(this.wTx).put(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class), Mockito.any(Module.class));
76 Mockito.doReturn(moduleOpt).when(future).get();
77 Mockito.doReturn(null).when(future).checkedGet();
78 Mockito.doNothing().when(future).addListener(Mockito.any(Runnable.class), Mockito.any(Executor.class));
79 Mockito.doReturn(Boolean.TRUE).when(moduleOpt).isPresent();
80 final Module module = Mockito.mock(Module.class);
81 Mockito.doReturn(module).when(moduleOpt).get();
82 final BgpApplicationPeer appPeer = Mockito.mock(BgpApplicationPeer.class);
83 Mockito.doReturn(appPeer).when(module).getConfiguration();
84 final TargetRib rib = Mockito.mock(TargetRib.class);
85 Mockito.doReturn(rib).when(appPeer).getTargetRib();
86 final ApplicationRibId appRib = Mockito.mock(ApplicationRibId.class);
87 Mockito.doReturn(appRib).when(appPeer).getApplicationRibId();
88 Mockito.doReturn("appRib").when(appRib).toString();
89 Mockito.doReturn("targetRib").when(rib).toString();
93 public void testRemove() {
94 this.appPeerProvider.onNeighborRemoved(this.neighbor);
95 Mockito.verify(this.neighborState).remove(Mockito.any(ModuleKey.class), Mockito.any(Neighbor.class));
96 Mockito.verify(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
100 public void testModified() {
101 this.appPeerProvider.onNeighborModified(this.neighbor);
102 Mockito.verify(this.neighborState).addOrUpdate(Mockito.any(ModuleKey.class), Mockito.any(Identifier.class), Mockito.any(Neighbor.class));