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 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;
20 import javax.management.InstanceAlreadyExistsException;
21 import javax.management.ObjectName;
22 import java.math.BigDecimal;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertTrue;
26 import static org.junit.Assert.fail;
28 public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
30 private static final String INSTANCE_NAME = "timed-reconect-stategy-facotry-impl";
31 private static final String FACTORY_NAME = TimedReconnectStrategyFactoryModuleFactory.NAME;
34 public void setUp() throws Exception {
35 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,
36 new TimedReconnectStrategyFactoryModuleFactory(), new GlobalEventExecutorModuleFactory()));
40 public void testValidationExceptionSleepFactorNotSet() throws Exception {
42 createInstance(500, 100L, null, 500L, 10L, 10000L);
44 } catch (ValidationException e) {
45 assertTrue(e.getMessage().contains("SleepFactor value is not set."));
50 public void testValidationExceptionSleepFactorMinValue() throws Exception {
52 createInstance(500, 100L, new BigDecimal(0.5), 500L, 10L, 10000L);
54 } catch (ValidationException e) {
55 assertTrue(e.getMessage().contains("is less than 1"));
60 public void testValidationExceptionConnectTimeNotSet() throws Exception {
62 createInstance(null, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
64 } catch (ValidationException e) {
65 assertTrue(e.getMessage().contains("ConnectTime value is not set."));
70 public void testValidationExceptionConnectTimeMinValue() throws Exception {
72 createInstance(-1, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
74 } catch (ValidationException e) {
75 assertTrue(e.getMessage().contains("is less than 0"));
80 public void testValidationExceptionMinSleepNotSet() throws Exception {
82 createInstance(100, null, new BigDecimal(1.0), 100L, 10L, 10000L);
84 } catch (ValidationException e) {
85 assertTrue(e.getMessage().contains("MinSleep value is not set."));
90 public void testValidationExceptionMaxSleep() throws Exception {
92 createInstance(100, 300L, new BigDecimal(1.0), 100L, 10L, 10000L);
94 } catch (ValidationException e) {
95 assertTrue(e.getMessage().contains("is greter than MaxSleep"));
100 public void testCreateBean() throws Exception {
101 final CommitStatus status = createInstance();
102 assertBeanCount(1, FACTORY_NAME);
103 assertStatus(status, 2, 0, 0);
107 public void testReusingOldInstance() throws Exception {
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);
117 public void testReconfigure() throws Exception {
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);
132 private CommitStatus createInstance() throws Exception {
133 return createInstance(500, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
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();
144 public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String InstanceName)
146 return createInstance(transaction, InstanceName, 500, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
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));