Merge "Added tests for bgp-rib-impl-config modules, fixed validations and RIBImplModule."
[bgpcep.git] / bgp / rib-impl-config / src / test / java / org / opendaylight / controller / config / yang / bgp / reconnectstrategy / ReconnectImmediatelyStrategyModuleTest.java
1 package org.opendaylight.controller.config.yang.bgp.reconnectstrategy;
2
3 import static org.junit.Assert.assertTrue;
4 import static org.junit.Assert.fail;
5
6 import javax.management.InstanceAlreadyExistsException;
7 import javax.management.InstanceNotFoundException;
8 import javax.management.ObjectName;
9
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.opendaylight.controller.config.api.ConflictingVersionException;
13 import org.opendaylight.controller.config.api.ValidationException;
14 import org.opendaylight.controller.config.api.jmx.CommitStatus;
15 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
16 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
17 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
18 import org.opendaylight.controller.config.yang.netty.eventexecutor.GlobalEventExecutorModuleFactory;
19 import org.opendaylight.controller.config.yang.reconnectstrategy.AbstractReconnectImmediatelyStrategyModuleFactory;
20 import org.opendaylight.controller.config.yang.reconnectstrategy.ReconnectImmediatelyStrategyModuleFactory;
21 import org.opendaylight.controller.config.yang.reconnectstrategy.ReconnectImmediatelyStrategyModuleMXBean;
22
23 public class ReconnectImmediatelyStrategyModuleTest extends AbstractConfigTest {
24
25         private final String instanceName = "immediately";
26
27         private ReconnectImmediatelyStrategyModuleFactory factory;
28
29         private GlobalEventExecutorModuleFactory executorFactory;
30
31         @Before
32         public void setUp() throws Exception {
33                 this.factory = new ReconnectImmediatelyStrategyModuleFactory();
34                 this.executorFactory = new GlobalEventExecutorModuleFactory();
35                 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
36                                 factory, executorFactory));
37         }
38
39         @Test
40         public void testValidationExceptionTimeoutNotSet()
41                         throws InstanceAlreadyExistsException {
42                 try {
43                         ConfigTransactionJMXClient transaction = configRegistryClient
44                                         .createTransaction();
45                         createInstance(transaction, this.factory.getImplementationName(), instanceName, null, this.executorFactory.getImplementationName());
46                         transaction.validateConfig();
47                         fail();
48                 } catch (ValidationException e) {
49                         assertTrue(e.getMessage().contains("Timeout value is not set."));
50                 }
51         }
52
53         @Test
54         public void testValidationExceptionTimeoutMinValue()
55                         throws InstanceAlreadyExistsException {
56                 try {
57                         ConfigTransactionJMXClient transaction = configRegistryClient
58                                         .createTransaction();
59                         createInstance(transaction, this.factory.getImplementationName(), instanceName, -1, this.executorFactory.getImplementationName());
60                         transaction.validateConfig();
61                         fail();
62                 } catch (ValidationException e) {
63                         assertTrue(e.getMessage().contains("is less than 0"));
64                 }
65         }
66
67         @Test
68         public void testCreateBean() throws Exception {
69                 ConfigTransactionJMXClient transaction = configRegistryClient
70                                 .createTransaction();
71                 createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, this.executorFactory.getImplementationName());
72                 transaction.validateConfig();
73                 CommitStatus status = transaction.commit();
74                 assertBeanCount(1, factory.getImplementationName());
75                 assertStatus(status, 2, 0, 0);
76         }
77
78         @Test
79         public void testReusingOldInstance() throws InstanceAlreadyExistsException,
80                         ConflictingVersionException, ValidationException {
81                 ConfigTransactionJMXClient transaction = configRegistryClient
82                                 .createTransaction();
83                 createInstance(transaction, this.factory.getImplementationName(), instanceName, 100, this.executorFactory.getImplementationName());
84                 transaction.commit();
85                 transaction = configRegistryClient.createTransaction();
86                 assertBeanCount(1, factory.getImplementationName());
87                 CommitStatus status = transaction.commit();
88                 assertBeanCount(1, factory.getImplementationName());
89                 assertStatus(status, 0, 0, 2);
90         }
91
92         @Test
93         public void testReconfigure() throws InstanceAlreadyExistsException,
94                         ConflictingVersionException, ValidationException,
95                         InstanceNotFoundException {
96                 ConfigTransactionJMXClient transaction = configRegistryClient
97                                 .createTransaction();
98                 createInstance(transaction, this.factory.getImplementationName(), instanceName, 500, this.executorFactory.getImplementationName());
99                 transaction.commit();
100                 transaction = configRegistryClient.createTransaction();
101                 assertBeanCount(1, factory.getImplementationName());
102                 ReconnectImmediatelyStrategyModuleMXBean mxBean = transaction
103                                 .newMBeanProxy(transaction.lookupConfigBean(
104                                                 AbstractReconnectImmediatelyStrategyModuleFactory.NAME,
105                                                 instanceName),
106                                                 ReconnectImmediatelyStrategyModuleMXBean.class);
107                 mxBean.setTimeout(200);
108                 CommitStatus status = transaction.commit();
109                 assertBeanCount(1, factory.getImplementationName());
110                 assertStatus(status, 0, 1, 1);
111         }
112
113         public static ObjectName createInstance(
114                         final ConfigTransactionJMXClient transaction,
115                         final String moduleName,
116                         final String instanceName, final Integer timeout,
117                         final String executorModuleName) throws InstanceAlreadyExistsException {
118                 ObjectName nameCreated = transaction.createModule(
119                                 moduleName, instanceName);
120                 ReconnectImmediatelyStrategyModuleMXBean mxBean = transaction
121                                 .newMBeanProxy(nameCreated,
122                                                 ReconnectImmediatelyStrategyModuleMXBean.class);
123                 mxBean.setTimeout(timeout);
124                 mxBean.setExecutor(GlobalEventExecutorUtil.createInstance(transaction, executorModuleName, "global-event-executor"));
125                 return nameCreated;
126         }
127
128 }