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