OpenConfig BGP more defensive
[bgpcep.git] / bgp / openconfig-impl / src / test / java / org / opendaylight / protocol / bgp / openconfig / impl / moduleconfig / BGPRibImplProviderTest.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 org.junit.Before;
15 import org.junit.Test;
16 import org.mockito.Mockito;
17 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
18 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
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.controller.md.sal.common.api.data.TransactionCommitFailedException;
22 import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigHolder;
23 import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
24 import org.opendaylight.protocol.bgp.openconfig.impl.util.GlobalIdentifier;
25 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
26 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base.AfiSafisBuilder;
27 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.global.base.ConfigBuilder;
28 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
29 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.BgpBuilder;
30 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Global;
31 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.GlobalBuilder;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.Module;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.ModuleKey;
36 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
37
38 public class BGPRibImplProviderTest {
39
40     private BGPRibImplProvider ribProvider;
41     private BGPRibImplProvider ribProvider2;
42     private final BGPConfigModuleProvider moduleProvider = new BGPConfigModuleProvider();
43
44     private final ModuleKey moduleKey = Mockito.mock(ModuleKey.class);
45     private final DataBroker dataBroker = Mockito.mock(DataBroker.class);
46     private final DataBroker dataBroker2 = Mockito.mock(DataBroker.class);
47     private final ReadWriteTransaction rwTx = Mockito.mock(ReadWriteTransaction.class);
48     private final ReadOnlyTransaction rTx2 = Mockito.mock(ReadOnlyTransaction.class);
49
50     @SuppressWarnings("unchecked")
51     @Before
52     public void setUp() throws Exception {
53         final BGPConfigStateStore configHolders = Mockito.mock(BGPConfigStateStore.class);
54
55         final BGPConfigHolder<Global> globalState = Mockito.mock(BGPConfigHolder.class);
56         Mockito.doReturn(globalState).when(configHolders).getBGPConfigHolder(Bgp.class);
57
58         this.ribProvider = new BGPRibImplProvider(configHolders, this.moduleProvider, this.dataBroker);
59         this.ribProvider2 = new BGPRibImplProvider(configHolders, this.moduleProvider, this.dataBroker2);
60
61         Mockito.doReturn(this.moduleKey).when(globalState).getModuleKey(Mockito.any(GlobalIdentifier.class));
62         Mockito.doReturn("module-key").when(this.moduleKey).toString();
63         Mockito.doReturn("module-key").when(this.moduleKey).getName();
64         Mockito.doReturn(ModuleKey.class).when(this.moduleKey).getType();
65         Mockito.doReturn(Boolean.TRUE).when(globalState).remove(Mockito.any(ModuleKey.class), Mockito.any(Global.class));
66         Mockito.doReturn(Boolean.FALSE).when(globalState).remove(this.moduleKey, null);
67         Mockito.doReturn(Boolean.TRUE).when(globalState).addOrUpdate(Mockito.any(ModuleKey.class), Mockito.any(GlobalIdentifier.class), Mockito.any(Global.class));
68
69         Mockito.doReturn(this.rwTx).when(this.dataBroker).newReadWriteTransaction();
70         Mockito.doReturn(this.rTx2).when(this.dataBroker2).newReadOnlyTransaction();
71
72         final CheckedFuture<Void, Exception> future = Mockito.mock(CheckedFuture.class);
73         final CheckedFuture<Void, Exception> future2 = Mockito.mock(CheckedFuture.class);
74         Mockito.doReturn(future).when(this.rwTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
75         Mockito.doNothing().when(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
76         Mockito.doReturn(future2).when(this.rTx2).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
77
78         Mockito.doReturn(future).when(this.rwTx).submit();
79         Mockito.doReturn(null).when(future).checkedGet();
80
81         final Optional<Module> moduleOpt = Mockito.mock(Optional.class);
82         final Optional<Module> moduleOpt2 = Mockito.mock(Optional.class);
83         Mockito.doReturn(moduleOpt).when(future).checkedGet();
84         Mockito.doReturn(moduleOpt2).when(future2).checkedGet();
85         Mockito.doReturn(Boolean.TRUE).when(moduleOpt).isPresent();
86         Mockito.doReturn(Boolean.FALSE).when(moduleOpt2).isPresent();
87         final Module module = Mockito.mock(Module.class);
88         Mockito.doReturn(module).when(moduleOpt).get();
89     }
90
91     @SuppressWarnings("unchecked")
92     @Test
93     public void testGlobalRemoved() throws TransactionCommitFailedException {
94         this.ribProvider.onGlobalRemoved(createBgp().getGlobal());
95         Mockito.verify(this.rwTx).read(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
96         Mockito.verify(this.rwTx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(InstanceIdentifier.class));
97     }
98
99     @Test
100     public void testGlobalModified() {
101         this.ribProvider2.onGlobalModified(createBgp().getGlobal());
102     }
103
104     private Bgp createBgp() {
105         final GlobalBuilder global = new GlobalBuilder();
106         final List<AfiSafi> families = new ArrayList<AfiSafi>();
107         global.setAfiSafis(new AfiSafisBuilder().setAfiSafi(families).build())
108             .setConfig(new ConfigBuilder()
109                 .setRouterId(new Ipv4Address("1.1.1.1"))
110                 .setAs(new AsNumber(10L)).build());
111         return new BgpBuilder().setGlobal(global.build()).build();
112     }
113
114 }