2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.config.yang.protocol.framework;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12 import static org.junit.Assert.fail;
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;
27 public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
29 private static final String INSTANCE_NAME = "timed-reconect-stategy-facotry-impl";
30 private static final String FACTORY_NAME = TimedReconnectStrategyFactoryModuleFactory.NAME;
33 public void setUp() throws Exception {
34 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
35 new TimedReconnectStrategyFactoryModuleFactory(), new GlobalEventExecutorModuleFactory()));
39 public void testValidationExceptionSleepFactorNotSet() throws Exception {
41 createInstance(500, 100L, null, 500L, 10L, 10000L);
43 } catch (ValidationException e) {
44 assertTrue(e.getMessage().contains("SleepFactor value is not set."));
49 public void testValidationExceptionSleepFactorMinValue() throws Exception {
51 createInstance(500, 100L, new BigDecimal(0.5), 500L, 10L, 10000L);
53 } catch (ValidationException e) {
54 assertTrue(e.getMessage().contains("is less than 1"));
59 public void testValidationExceptionConnectTimeNotSet() throws Exception {
61 createInstance(null, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
63 } catch (ValidationException e) {
64 assertTrue(e.getMessage().contains("ConnectTime value is not set."));
69 public void testValidationExceptionConnectTimeMinValue() throws Exception {
71 createInstance(-1, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
73 } catch (ValidationException e) {
74 assertTrue(e.getMessage().contains("is less than 0"));
79 public void testValidationExceptionMinSleepNotSet() throws Exception {
81 createInstance(100, null, new BigDecimal(1.0), 100L, 10L, 10000L);
83 } catch (ValidationException e) {
84 assertTrue(e.getMessage().contains("MinSleep value is not set."));
89 public void testValidationExceptionMaxSleep() throws Exception {
91 createInstance(100, 300L, new BigDecimal(1.0), 100L, 10L, 10000L);
93 } catch (ValidationException e) {
94 assertTrue(e.getMessage().contains("is greter than MaxSleep"));
99 public void testCreateBean() throws Exception {
100 final CommitStatus status = createInstance();
101 assertBeanCount(1, FACTORY_NAME);
102 assertStatus(status, 2, 0, 0);
106 public void testReusingOldInstance() throws Exception {
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);
116 public void testReconfigure() throws Exception {
118 final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
119 assertBeanCount(1, FACTORY_NAME);
120 final TimedReconnectStrategyFactoryModuleMXBean mxBean = transaction.newMXBeanProxy(
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);
131 private CommitStatus createInstance() throws Exception {
132 return createInstance(500, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
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();
143 public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String InstanceName)
145 return createInstance(transaction, InstanceName, 500, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
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.newMXBeanProxy(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));