Bug 5061: Integrate ApplicationPeerModule with blueprint
[bgpcep.git] / bgp / rib-impl / src / test / java / org / opendaylight / controller / config / yang / bgp / rib / impl / BGPApplicationPeerModuleTest.java
1 /*
2  * Copyright (c) 2014 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
9 package org.opendaylight.controller.config.yang.bgp.rib.impl;
10
11 import static org.junit.Assert.assertEquals;
12
13 import java.util.List;
14 import javax.management.InstanceNotFoundException;
15 import javax.management.ObjectName;
16 import org.junit.Test;
17 import org.opendaylight.controller.config.api.jmx.CommitStatus;
18 import org.opendaylight.controller.config.spi.ModuleFactory;
19 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.ApplicationRibId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpId;
22
23 public class BGPApplicationPeerModuleTest extends AbstractRIBImplModuleTest {
24
25     private static final int EXP_INSTANCES = 8;
26     private static final String INSTANCE_NAME = "application-peer-instance";
27     private static final String INSTANCE_NAME2 = "application-peer-instance-2";
28     private static final String FACTORY_NAME = BGPApplicationPeerModuleFactory.NAME;
29     private static final ApplicationRibId APP_RIB_ID = new ApplicationRibId("application-peer-test");
30     private static final ApplicationRibId NEW_APP_RIB_ID = new ApplicationRibId("new-application-peer-name");
31
32     private ObjectName dataBroker = null;
33     private ObjectName ribModule = null;
34
35     @Override
36     protected List<ModuleFactory> getModuleFactories() {
37         final List<ModuleFactory> moduleFactories = super.getModuleFactories();
38         moduleFactories.add(new BGPApplicationPeerModuleFactory());
39         return moduleFactories;
40     }
41
42     @Test
43     public void testCreateInstance() throws Exception {
44         final CommitStatus status = createApplicationPeerInstance();
45         assertBeanCount(1, FACTORY_NAME);
46         assertStatus(status, EXP_INSTANCES, 0, 0);
47     }
48
49     @Test
50     public void testReusingOldInstance() throws Exception {
51         createApplicationPeerInstance();
52         final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
53         assertBeanCount(1, FACTORY_NAME);
54         final CommitStatus status = transaction.commit();
55         assertBeanCount(1, FACTORY_NAME);
56         assertStatus(status, 0, 0, EXP_INSTANCES);
57     }
58
59     @Test
60     public void testReconfigure() throws Exception {
61         createApplicationPeerInstance();
62         final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
63         assertBeanCount(1, FACTORY_NAME);
64         final BGPApplicationPeerModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME),
65                 BGPApplicationPeerModuleMXBean.class);
66         mxBean.setApplicationRibId(new ApplicationRibId(NEW_APP_RIB_ID));
67         final CommitStatus status = transaction.commit();
68         assertBeanCount(1, FACTORY_NAME);
69         assertStatus(status, 0, 1, EXP_INSTANCES - 1);
70         assertEquals(NEW_APP_RIB_ID, getApplicationRibId());
71     }
72
73     private CommitStatus createApplicationPeerInstance() throws Exception {
74         return createApplicationPeerInstance(INSTANCE_NAME);
75     }
76
77     private CommitStatus createApplicationPeerInstance(final String instanceName) throws Exception {
78         final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
79         final ObjectName objName = transaction.createModule(BGPApplicationPeerModuleFactory.NAME, instanceName);
80         final BGPApplicationPeerModuleMXBean mxBean = transaction.newMXBeanProxy(objName, BGPApplicationPeerModuleMXBean.class);
81         final ObjectName dataBrokerON = lookupDomAsyncDataBroker(transaction);
82         mxBean.setDataBroker(dataBrokerON);
83         mxBean.setBgpPeerId(new BgpId(BGP_ID));
84         mxBean.setApplicationRibId(APP_RIB_ID);
85         if (this.dataBroker == null) {
86             this.dataBroker = createAsyncDataBrokerInstance(transaction);
87         }
88         if (this.ribModule == null) {
89             this.ribModule = createRIBImplModuleInstance(transaction, this.dataBroker);
90         }
91         mxBean.setTargetRib(this.ribModule);
92         return transaction.commit();
93     }
94
95     private ApplicationRibId getApplicationRibId() throws InstanceNotFoundException {
96         final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction();
97         final BGPApplicationPeerModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME),
98                 BGPApplicationPeerModuleMXBean.class);
99         return mxBean.getApplicationRibId();
100     }
101
102 }