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;
16 import javax.management.InstanceAlreadyExistsException;
17 import javax.management.ObjectName;
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;
29 public class TimedReconnectStrategyModuleTest extends AbstractConfigTest {
31 private static final String INSTANCE_NAME = "timed-reconect-stategy-facotry-impl";
32 private static final String FACTORY_NAME = TimedReconnectStrategyFactoryModuleFactory.NAME;
35 public void setUp() throws Exception {
36 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(
37 new TimedReconnectStrategyFactoryModuleFactory(), new GlobalEventExecutorModuleFactory()));
41 public void testValidationExceptionSleepFactorNotSet() throws Exception {
43 createInstance(500, 100L, null, 500L, 10L, 10000L);
45 } catch (ValidationException e) {
46 assertTrue(e.getMessage().contains("SleepFactor value is not set."));
51 public void testValidationExceptionSleepFactorMinValue() throws Exception {
53 createInstance(500, 100L, new BigDecimal(0.5), 500L, 10L, 10000L);
55 } catch (ValidationException e) {
56 assertTrue(e.getMessage().contains("is less than 1"));
61 public void testValidationExceptionConnectTimeNotSet() throws Exception {
63 createInstance(null, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
65 } catch (ValidationException e) {
66 assertTrue(e.getMessage().contains("ConnectTime value is not set."));
71 public void testValidationExceptionConnectTimeMinValue() throws Exception {
73 createInstance(-1, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
75 } catch (ValidationException e) {
76 assertTrue(e.getMessage().contains("is less than 0"));
81 public void testValidationExceptionMinSleepNotSet() throws Exception {
83 createInstance(100, null, new BigDecimal(1.0), 100L, 10L, 10000L);
85 } catch (ValidationException e) {
86 assertTrue(e.getMessage().contains("MinSleep value is not set."));
91 public void testValidationExceptionMaxSleep() throws Exception {
93 createInstance(100, 300L, new BigDecimal(1.0), 100L, 10L, 10000L);
95 } catch (ValidationException e) {
96 assertTrue(e.getMessage().contains("is greter than MaxSleep"));
101 public void testCreateBean() throws Exception {
102 final CommitStatus status = createInstance();
103 assertBeanCount(1, FACTORY_NAME);
104 assertStatus(status, 2, 0, 0);
108 public void testReusingOldInstance() throws Exception {
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);
118 public void testReconfigure() throws Exception {
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);
133 private CommitStatus createInstance() throws Exception {
134 return createInstance(500, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
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();
145 public static ObjectName createInstance(final ConfigTransactionJMXClient transaction, final String InstanceName)
147 return createInstance(transaction, InstanceName, 500, 100L, new BigDecimal(1.0), 500L, 10L, 10000L);
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));