Merge "Fixed rib-impl-config modules tests."
[bgpcep.git] / bgp / rib-impl-config / src / test / java / org / opendaylight / controller / config / yang / bgp / rib / impl / BGPImplModuleTest.java
1 /*
2  * Copyright (c) 2013 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.controller.config.yang.bgp.rib.impl;
9
10 import static org.junit.Assert.assertTrue;
11 import static org.junit.Assert.fail;
12
13 import javax.management.InstanceAlreadyExistsException;
14 import javax.management.InstanceNotFoundException;
15 import javax.management.ObjectName;
16
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.opendaylight.controller.config.api.ConflictingVersionException;
20 import org.opendaylight.controller.config.api.ValidationException;
21 import org.opendaylight.controller.config.api.jmx.CommitStatus;
22 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
23 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
24 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
25 import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleFactory;
26 import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleFactory;
27 import org.opendaylight.controller.config.yang.netty.threadgroup.NettyThreadgroupModuleFactory;
28
29 public class BGPImplModuleTest extends AbstractConfigTest {
30
31         private final String instanceName = "bgp-impl1";
32
33         private BGPImplModuleFactory factory;
34
35         private BGPSessionProposalImplModuleFactory sessionFacotry;
36
37         private BGPDispatcherImplModuleFactory dispactherFactory;
38
39         private NettyThreadgroupModuleFactory threadgropFactory;
40
41         private RIBExtensionsImplModuleFactory messageFactory;
42
43         private SimpleBGPExtensionProviderContextModuleFactory extensionFactory;
44         
45         @Before
46         public void setUp() throws Exception {
47                 this.factory = new BGPImplModuleFactory();
48                 this.dispactherFactory = new BGPDispatcherImplModuleFactory();
49                 this.sessionFacotry = new BGPSessionProposalImplModuleFactory();
50                 this.threadgropFactory = new NettyThreadgroupModuleFactory();
51                 this.messageFactory = new RIBExtensionsImplModuleFactory();
52                 this.extensionFactory = new SimpleBGPExtensionProviderContextModuleFactory();
53                 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory, this.dispactherFactory, 
54                                 this.sessionFacotry, this.messageFactory, this.threadgropFactory, this.extensionFactory));
55         }
56
57         @Test
58         public void testValidationExceptionPortNotSet()
59                         throws InstanceAlreadyExistsException {
60                 try {
61                         ConfigTransactionJMXClient transaction = configRegistryClient
62                                         .createTransaction();
63                         createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", null, sessionFacotry.getImplementationName(), 
64                                         dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), 
65                                         messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
66                         transaction.validateConfig();
67                         fail();
68                 } catch (ValidationException e) {
69                         assertTrue(e.getMessage().contains("Port value is not set."));
70                 }
71         }
72
73         @Test
74         public void testValidationExceptionPortOutOfRange()
75                         throws InstanceAlreadyExistsException {
76                 try {
77                         ConfigTransactionJMXClient transaction = configRegistryClient
78                                         .createTransaction();
79                         createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", -1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
80                         transaction.validateConfig();
81                         fail();
82                 } catch (ValidationException e) {
83                         assertTrue(e.getMessage().contains("is out of range (0-65535)."));
84                 }
85         }
86
87         @Test
88         public void testValidationExceptionHostNotSet()
89                         throws InstanceAlreadyExistsException {
90                 try {
91                         ConfigTransactionJMXClient transaction = configRegistryClient
92                                         .createTransaction();
93                         createInstance(transaction, this.factory.getImplementationName(), instanceName, null, 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
94                         transaction.validateConfig();
95                         fail();
96                 } catch (ValidationException e) {
97                         assertTrue(e.getMessage().contains("Host value is not set."));
98                 }
99         }
100
101         @Test
102         public void testCreateBean() throws Exception {
103                 ConfigTransactionJMXClient transaction = configRegistryClient
104                                 .createTransaction();
105                 createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
106                 transaction.validateConfig();
107                 CommitStatus status = transaction.commit();
108                 assertBeanCount(1, factory.getImplementationName());
109                 assertStatus(status, 6, 0, 0);
110         }
111
112         @Test
113         public void testReusingOldInstance() throws InstanceAlreadyExistsException,
114         ConflictingVersionException, ValidationException {
115                 ConfigTransactionJMXClient transaction = configRegistryClient
116                                 .createTransaction();
117                 createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
118                 transaction.commit();
119                 transaction = configRegistryClient.createTransaction();
120                 assertBeanCount(1, factory.getImplementationName());
121                 CommitStatus status = transaction.commit();
122                 assertBeanCount(1, factory.getImplementationName());
123                 assertStatus(status, 0, 0, 6);
124         }
125
126         @Test
127         public void testReconfigure() throws InstanceAlreadyExistsException,
128         ConflictingVersionException, ValidationException,
129         InstanceNotFoundException {
130                 ConfigTransactionJMXClient transaction = configRegistryClient
131                                 .createTransaction();
132                 createInstance(transaction, this.factory.getImplementationName(), instanceName, "localhost", 1, sessionFacotry.getImplementationName(), dispactherFactory.getImplementationName(), threadgropFactory.getImplementationName(), messageFactory.getImplementationName(), this.extensionFactory.getImplementationName());
133                 transaction.commit();
134                 transaction = configRegistryClient.createTransaction();
135                 assertBeanCount(1, factory.getImplementationName());
136                 BGPImplModuleMXBean mxBean = transaction
137                                 .newMBeanProxy(transaction.lookupConfigBean(
138                                                 factory.getImplementationName(),
139                                                 instanceName), BGPImplModuleMXBean.class);
140                 mxBean.setPort(10);
141                 CommitStatus status = transaction.commit();
142                 assertBeanCount(1, factory.getImplementationName());
143                 assertStatus(status, 0, 1, 5);
144         }
145
146         public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String moduleName,
147                         final String instanceName, final String host, final Integer port, final String sessionModuleName, final String dispatcherModuleName, final String threadgroupModuleName, final String messageFactoryModuleName, final String extensionModuleName) throws InstanceAlreadyExistsException {
148                 ObjectName nameCreated = transaction.createModule(
149                                 moduleName, instanceName);
150                 BGPImplModuleMXBean mxBean = transaction.newMBeanProxy(
151                                 nameCreated, BGPImplModuleMXBean.class);
152                 mxBean.setHost(host);
153                 mxBean.setPort(port);
154                 mxBean.setBgpProposal(BGPSessionProposalImplModuleTest.createInstance(transaction, sessionModuleName, "bgp-session1", 1, (short)30, "128.0.0.1"));
155                 mxBean.setBgpDispatcher(BGPDispatcherImplModuleTest.createInstance(transaction, dispatcherModuleName, "bgp-dispatcher1", threadgroupModuleName, messageFactoryModuleName, extensionModuleName));
156                 return nameCreated;
157         }
158
159 }