+++ /dev/null
-/*
- * Copyright (c) 2013, 2017 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.controller.config.manager.testingservices.scheduledthreadpool.test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import java.util.Collections;
-import java.util.List;
-import javax.management.InstanceAlreadyExistsException;
-import javax.management.InstanceNotFoundException;
-import javax.management.ObjectName;
-import org.junit.Test;
-import org.opendaylight.controller.config.api.ConflictingVersionException;
-import org.opendaylight.controller.config.api.ValidationException;
-import org.opendaylight.controller.config.api.jmx.CommitStatus;
-import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
-import org.opendaylight.controller.config.manager.testingservices.scheduledthreadpool.TestingScheduledThreadPoolConfigBeanMXBean;
-import org.opendaylight.controller.config.manager.testingservices.scheduledthreadpool.TestingScheduledThreadPoolModuleFactory;
-import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
-
-/**
- * TestingScheduledThreadPool exports 2 interfaces: <br>
- * {@link org.opendaylight.controller.config.manager.testingservices
- * .scheduledthreadpool.TestingScheduledThreadPoolModuleFactory#NAME}
- * ,<br>
- * {@link org.opendaylight.controller.config.manager
- * .testingservices.threadpool.TestingFixedThreadPoolModuleFactory#NAME}
- * <br>
- * <br>
- * It also exports 2 runtime beans, one default and one with additional
- * properties of {'a':'b'}.
- */
-public class RuntimeBeanTest extends AbstractScheduledTest {
-
- ObjectName ifc1runtimeON1 = ObjectNameUtil.createRuntimeBeanName(TestingScheduledThreadPoolModuleFactory.NAME,
- SCHEDULED1, Maps.<String, String>newHashMap());
- // additional runtime bean
- ObjectName ifc1runtimeON2 = ObjectNameUtil.createRuntimeBeanName(TestingScheduledThreadPoolModuleFactory.NAME,
- SCHEDULED1, ImmutableMap.of("a", "b"));
-
- List<ObjectName> allObjectNames = Lists.newArrayList(ifc1runtimeON1, ifc1runtimeON2);
-
- private ObjectName createScheduled()
- throws InstanceAlreadyExistsException, ConflictingVersionException, ValidationException {
- ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
-
- // create using TestingThreadPoolIfc:
- ObjectName createdConfigBean = transaction.createModule(TestingScheduledThreadPoolModuleFactory.NAME,
- SCHEDULED1);
- // commit
- transaction.commit();
- return createdConfigBean;
- }
-
- @Test
- public void testCreateScheduled() throws Exception {
- createScheduled();
- checkRuntimeBeans();
- }
-
- private void checkRuntimeBeans() throws Exception {
- // check runtime bean - on 2 places
- for (ObjectName on : allObjectNames) {
- checkRuntimeBean(on);
- }
- }
-
- private static void checkRuntimeBean(final ObjectName on) throws Exception {
- assertEquals(0, platformMBeanServer.getAttribute(on, "ActualNumberOfThreads"));
- }
-
- private static void checkRuntimeBeanDoesNotExist(final ObjectName on) throws Exception {
- try {
- checkRuntimeBean(on);
- fail();
- } catch (final InstanceNotFoundException e) {
- // No-op
- }
- }
-
- @Test
- public void testLookup() throws Exception {
- createScheduled();
- assertEquals(Sets.newHashSet(ifc1runtimeON1, ifc1runtimeON2), configRegistryClient.lookupRuntimeBeans());
- }
-
- @Test
- public void testReuse() throws Exception {
- ObjectName createdConfigBean = createScheduled();
- // empty transaction
- CommitStatus commitInfo = configRegistryClient.createTransaction().commit();
-
- // check that it was reused
- ObjectName readableConfigBean = ObjectNameUtil.withoutTransactionName(createdConfigBean);
- List<ObjectName> newInstances = Collections.<ObjectName>emptyList();
- List<ObjectName> reusedInstances = Lists.newArrayList(readableConfigBean);
- List<ObjectName> recreatedInstaces = Collections.<ObjectName>emptyList();
- assertEquals(new CommitStatus(newInstances, reusedInstances, recreatedInstaces), commitInfo);
- checkRuntimeBeans();
- }
-
- @Test
- public void testRecreate() throws Exception {
- ObjectName createdConfigBean = createScheduled();
- // empty transaction
- ConfigTransactionJMXClient configTransaction = configRegistryClient.createTransaction();
- ObjectName scheduledWritableON = configTransaction
- .lookupConfigBean(TestingScheduledThreadPoolModuleFactory.NAME, SCHEDULED1);
- TestingScheduledThreadPoolConfigBeanMXBean scheduledWritableProxy = configTransaction
- .newMXBeanProxy(scheduledWritableON, TestingScheduledThreadPoolConfigBeanMXBean.class);
- scheduledWritableProxy.setRecreate(true);
- CommitStatus commitInfo = configTransaction.commit();
- // check that it was recreated
- ObjectName readableConfigBean = ObjectNameUtil.withoutTransactionName(createdConfigBean);
- List<ObjectName> newInstances = Collections.<ObjectName>emptyList();
- List<ObjectName> reusedInstances = Collections.<ObjectName>emptyList();
- List<ObjectName> recreatedInstaces = Lists.newArrayList(readableConfigBean);
- assertEquals(new CommitStatus(newInstances, reusedInstances, recreatedInstaces), commitInfo);
- checkRuntimeBeans();
- }
-
- @Test
- public void testDestroy_shouldUnregisterRuntimeBeans() throws Exception {
- ObjectName createdConfigBean = createScheduled();
- ConfigTransactionJMXClient configTransaction = configRegistryClient.createTransaction();
- configTransaction.destroyModule(
- ObjectNameUtil.createTransactionModuleON(configTransaction.getTransactionName(), createdConfigBean));
- configTransaction.commit();
- for (ObjectName on : allObjectNames) {
- checkRuntimeBeanDoesNotExist(on);
- }
- }
-}