5bed487b1025b2928b6f17da57ea4f7c7de72dff
[bgpcep.git] / bgp / linkstate / src / test / java / org / opendaylight / controller / config / yang / bgp / linkstate / LinkstateModuleTest.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.linkstate;
10
11 import static org.junit.Assert.assertTrue;
12 import com.google.common.base.Optional;
13 import com.google.common.collect.Lists;
14 import javax.management.InstanceAlreadyExistsException;
15 import javax.management.ObjectName;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.controller.config.api.jmx.CommitStatus;
19 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
20 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
21 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
22 import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleFactory;
23 import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleTest;
24 import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleFactory;
25 import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleTest;
26 import org.opendaylight.controller.config.yang.rsvp.spi.SimpleRSVPExtensionProviderContextModuleFactory;
27 import org.opendaylight.controller.config.yang.rsvp.spi.SimpleRSVPExtensionProviderContextModuleMXBean;
28
29 public class LinkstateModuleTest extends AbstractConfigTest {
30
31     private static final String FACTORY_NAME = LinkstateModuleFactory.NAME;
32     private static final String INSTANCE_NAME = "bgp-linkstate-impl";
33     private static final String RSVP_EXTENSION_INSTANCE_NAME = "extension-impl-rsvp";
34     private ObjectName rspvInstance;
35
36     @Before
37     public void setUp() {
38         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, new
39             LinkstateModuleFactory(), new SimpleBGPExtensionProviderContextModuleFactory(), new
40             RIBExtensionsImplModuleFactory(), new SimpleRSVPExtensionProviderContextModuleFactory()));
41     }
42
43     @Test
44     public void testLSTypeDefaultValue() throws Exception {
45         final CommitStatus status = createLinkstateModuleInstance(Optional.<Boolean>absent());
46         assertBeanCount(1, FACTORY_NAME);
47         assertStatus(status, 4, 0, 0);
48         final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
49         final LinkstateModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME), LinkstateModuleMXBean.class);
50         assertTrue(mxBean.getIanaLinkstateAttributeType());
51     }
52
53     @Test
54     public void testCreateBean() throws Exception {
55         final CommitStatus status = createLinkstateModuleInstance(Optional.of(false));
56         assertBeanCount(1, FACTORY_NAME);
57         assertStatus(status, 4, 0, 0);
58     }
59
60     @Test
61     public void testReusingOldInstance() throws Exception {
62         createLinkstateModuleInstance(Optional.of(false));
63         final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
64         assertBeanCount(1, FACTORY_NAME);
65         final CommitStatus status = transaction.commit();
66         assertBeanCount(1, FACTORY_NAME);
67         assertStatus(status, 0, 0, 4);
68     }
69
70     @Test
71     public void testReconfigureInstance() throws Exception {
72         createLinkstateModuleInstance(Optional.of(false));
73         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
74         assertBeanCount(1, FACTORY_NAME);
75         final LinkstateModuleMXBean mxBean = transaction.newMXBeanProxy(transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME), LinkstateModuleMXBean.class);
76         mxBean.setIanaLinkstateAttributeType(true);
77         mxBean.setRsvpExtensions(rspvInstance);
78         CommitStatus status = transaction.commit();
79         assertBeanCount(1, FACTORY_NAME);
80         assertStatus(status, 0, 3, 1);
81     }
82
83     private CommitStatus createLinkstateModuleInstance(final Optional<Boolean> ianaLSAttributeType) throws Exception {
84         final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
85         final ObjectName linkstateON = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
86         final LinkstateModuleMXBean mxBean = transaction.newMXBeanProxy(linkstateON, LinkstateModuleMXBean.class);
87         if(ianaLSAttributeType.isPresent()) {
88             mxBean.setIanaLinkstateAttributeType(ianaLSAttributeType.get());
89         }
90         rspvInstance = createRsvpExtensionsInstance(transaction);
91         mxBean.setRsvpExtensions(rspvInstance);
92         SimpleBGPExtensionProviderContextModuleTest.createBGPExtensionsModuleInstance(transaction, Lists.newArrayList(linkstateON));
93         RIBExtensionsImplModuleTest.createRIBExtensionsModuleInstance(transaction, Lists.newArrayList(linkstateON));
94         return transaction.commit();
95     }
96
97     private ObjectName createRsvpExtensionsInstance(final ConfigTransactionJMXClient transaction) throws InstanceAlreadyExistsException {
98         final ObjectName nameCreated = transaction.createModule(SimpleRSVPExtensionProviderContextModuleFactory.NAME,
99             RSVP_EXTENSION_INSTANCE_NAME);
100         transaction.newMXBeanProxy(nameCreated, SimpleRSVPExtensionProviderContextModuleMXBean.class);
101         return nameCreated;
102     }
103 }