BUG-5098: NPE when reconfiguring openconfig
[bgpcep.git] / bgp / openconfig-impl / src / test / java / org / opendaylight / protocol / bgp / openconfig / impl / moduleconfig / BGPPeerProviderTest.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.protocol.bgp.openconfig.impl.moduleconfig;
9
10 import com.google.common.base.Optional;
11 import com.google.common.util.concurrent.CheckedFuture;
12 import java.util.ArrayList;
13 import java.util.List;
14 import java.util.concurrent.Executor;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.mockito.Mockito;
18 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
19 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
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.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
24 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafiBuilder;
25 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafisBuilder;
26 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
27 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
28 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
29 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
30 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
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;
37
38 public class BGPPeerProviderTest {
39
40     private BGPPeerProvider peerProvider;
41     private final Neighbor neighbor = createNeighbor();
42     private final DataBroker dataBroker = Mockito.mock(DataBroker.class);
43     private final BGPConfigHolder<Global> globalState = Mockito.mock(BGPConfigHolder.class);
44     private final ReadWriteTransaction rwTx = Mockito.mock(ReadWriteTransaction.class);
45     private final BGPConfigHolder<Neighbor> neighborState = Mockito.mock(BGPConfigHolder.class);
46
47     @SuppressWarnings("unchecked")
48     @Before
49     public void setUp() throws Exception {
50         final BGPConfigStateStore configHolders = Mockito.mock(BGPConfigStateStore.class);
51         final BGPConfigModuleProvider moduleProvider = new BGPConfigModuleProvider();
52
53         Mockito.doReturn(this.globalState).when(configHolders).getBGPConfigHolder(Bgp.class);
54         Mockito.doReturn(this.neighborState).when(configHolders).getBGPConfigHolder(Neighbor.class);
55
56         final ModuleKey mKey = Mockito.mock(ModuleKey.class);
57         Mockito.doReturn(mKey).when(this.neighborState).getModuleKey(this.neighbor.getKey());
58         Mockito.doReturn("mKey").when(mKey).toString();
59         Mockito.doReturn(Boolean.TRUE).when(this.neighborState).remove(mKey, createNeighbor());
60         this.peerProvider = new BGPPeerProvider(configHolders, moduleProvider, this.dataBroker);
61
62         final CheckedFuture future = Mockito.mock(CheckedFuture.class);
63         final Optional<Module> moduleOpt = Mockito.mock(Optional.class);
64         Mockito.doReturn(this.rwTx).when(this.dataBroker).newReadWriteTransaction();
65         Mockito.doReturn(future).when(this.rwTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
66         Mockito.doReturn(moduleOpt).when(future).checkedGet();
67         Mockito.doReturn(Boolean.TRUE).when(moduleOpt).isPresent();
68         final Module module = Mockito.mock(Module.class);
69         Mockito.doReturn(module).when(moduleOpt).get();
70
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.rwTx).submit();
74         Mockito.doNothing().when(future).addListener(Mockito.any(Runnable.class), Mockito.any(Executor.class));
75         Mockito.doReturn(Boolean.TRUE).when(this.neighborState).addOrUpdate(Mockito.any(ModuleKey.class), Mockito.any(Identifier.class), Mockito.any(Neighbor.class));
76     }
77
78     @Test
79     public void testRemoved() {
80         this.peerProvider.onNeighborRemoved(this.neighbor);
81         Mockito.verify(this.neighborState).remove(Mockito.any(ModuleKey.class), Mockito.any(Neighbor.class));
82         Mockito.verify(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
83     }
84
85     @Test
86     public void testModified() {
87 //        TODO: problem with advertizedTablesFuture on line 98, it won't run and finish successfuly
88 //        so advertizedTablesFuture.get() on line 103 is blocked
89 //        same in BGPRibImplProviderTest
90     }
91
92     private Neighbor createNeighbor() {
93         final List<AfiSafi> families = new ArrayList<AfiSafi>();
94         final AfiSafi afi = new AfiSafiBuilder().build();
95         families.add(afi);
96         return new NeighborBuilder()
97             .setKey(new NeighborKey(new IpAddress(new Ipv4Address("1.1.1.5"))))
98             .setAfiSafis(new AfiSafisBuilder().setAfiSafi(families).build()).build();
99     }
100 }