Merge "Statistics-Manager - Performance Improvement 1) Introduced statistics request...
[controller.git] / opendaylight / commons / protocol-framework / src / test / java / org / opendaylight / controller / config / yang / protocol / framework / TimedReconnectStrategyModuleTest.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.protocol.framework;
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
20 import javax.management.InstanceAlreadyExistsException;
21 import javax.management.ObjectName;
22 import java.math.BigDecimal;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertTrue;
26 import static org.junit.Assert.fail;
27
28 public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
29
30     private static final String INSTANCE_NAME = "timed-reconect-stategy-facotry-impl";
31     private static final String FACTORY_NAME = TimedReconnectStrategyFactoryModuleFactory.NAME;
32
33     @Before
34     public void setUp() throws Exception {
35         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
36                 new TimedReconnectStrategyFactoryModuleFactory(), new GlobalEventExecutorModuleFactory()));
37     }
38
39     @Test
40     public void testValidationExceptionSleepFactorNotSet() throws Exception {
41         try {
42             createInstance(500, 100L, null, 500L, 10L, 10000L);
43             fail();
44         } catch (ValidationException e) {
45             assertTrue(e.getMessage().contains("SleepFactor value is not set."));
46         }
47     }
48
49     @Test
50     public void testValidationExceptionSleepFactorMinValue() throws Exception {
51         try {
52             createInstance(500, 100L, new BigDecimal(0.5), 500L, 10L, 10000L);
53             fail();
54         } catch (ValidationException e) {
55             assertTrue(e.getMessage().contains("is less than 1"));
56         }
57     }
58
59     @Test
60     public void testValidationExceptionConnectTimeNotSet() throws Exception {
61         try {
62             createInstance(null, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
63             fail();
64         } catch (ValidationException e) {
65             assertTrue(e.getMessage().contains("ConnectTime value is not set."));
66         }
67     }
68
69     @Test
70     public void testValidationExceptionConnectTimeMinValue() throws Exception {
71         try {
72             createInstance(-1, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
73             fail();
74         } catch (ValidationException e) {
75             assertTrue(e.getMessage().contains("is less than 0"));
76         }
77     }
78
79     @Test
80     public void testValidationExceptionMinSleepNotSet() throws Exception {
81         try {
82             createInstance(100, null, new BigDecimal(1.0), 100L, 10L, 10000L);
83             fail();
84         } catch (ValidationException e) {
85             assertTrue(e.getMessage().contains("MinSleep value is not set."));
86         }
87     }
88
89     @Test
90     public void testValidationExceptionMaxSleep() throws Exception {
91         try {
92             createInstance(100, 300L, new BigDecimal(1.0), 100L, 10L, 10000L);
93             fail();
94         } catch (ValidationException e) {
95             assertTrue(e.getMessage().contains("is greter than MaxSleep"));
96         }
97     }
98
99     @Test
100     public void testCreateBean() throws Exception {
101         final CommitStatus status = createInstance();
102         assertBeanCount(1, FACTORY_NAME);
103         assertStatus(status, 2, 0, 0);
104     }
105
106     @Test
107     public void testReusingOldInstance() throws Exception {
108         createInstance();
109         final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
110         assertBeanCount(1, FACTORY_NAME);
111         final CommitStatus status = transaction.commit();
112         assertBeanCount(1, FACTORY_NAME);
113         assertStatus(status, 0, 0, 2);
114     }
115
116     @Test
117     public void testReconfigure() throws Exception {
118         createInstance();
119         final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
120         assertBeanCount(1, FACTORY_NAME);
121         final TimedReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMBeanProxy(
122                 transaction.lookupConfigBean(FACTORY_NAME, INSTANCE_NAME), TimedReconnectStrategyFactoryModuleMXBean.class);
123         assertEquals(mxBean.getMinSleep(), new Long(100));
124         mxBean.setMinSleep(200L);
125         assertEquals(mxBean.getMinSleep(), new Long(200));
126         final CommitStatus status = transaction.commit();
127         assertBeanCount(1, FACTORY_NAME);
128         assertStatus(status, 0, 1, 1);
129
130     }
131
132     private CommitStatus createInstance() throws Exception {
133         return createInstance(500, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
134     }
135
136     private CommitStatus createInstance(final Integer connectTime, final Long minSleep, final BigDecimal sleepFactor,
137             final Long maxSleep, final Long maxAttempts, final Long deadline) throws ConflictingVersionException,
138             ValidationException, InstanceAlreadyExistsException {
139         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
140         createInstance(transaction, INSTANCE_NAME, connectTime, minSleep, sleepFactor, maxSleep, maxAttempts, deadline);
141         return transaction.commit();
142     }
143
144     public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String InstanceName)
145             throws Exception {
146         return createInstance(transaction, InstanceName, 500, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
147     }
148
149     private static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String instanceName,
150             final Integer connectTime, final Long minSleep, final BigDecimal sleepFactor, final Long maxSleep,
151             final Long maxAttempts, final Long deadline) throws InstanceAlreadyExistsException {
152         final ObjectName nameCreated = transaction.createModule(FACTORY_NAME, instanceName);
153         final TimedReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMBeanProxy(nameCreated,
154                 TimedReconnectStrategyFactoryModuleMXBean.class);
155         mxBean.setConnectTime(connectTime);
156         mxBean.setDeadline(deadline);
157         mxBean.setMaxAttempts(maxAttempts);
158         mxBean.setMaxSleep(maxSleep);
159         mxBean.setMinSleep(minSleep);
160         mxBean.setSleepFactor(sleepFactor);
161         mxBean.setExecutor(GlobalEventExecutorUtil.create(transaction));
162         return nameCreated;
163     }
164
165 }