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