1 package org.opendaylight.controller.config.yang.test.impl;
3 import com.google.common.collect.Lists;
4 import junit.framework.Assert;
5 import org.junit.Before;
7 import org.opendaylight.controller.config.api.jmx.CommitStatus;
8 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
9 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
10 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
11 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
13 import javax.management.InstanceAlreadyExistsException;
14 import javax.management.ObjectName;
15 import java.util.ArrayList;
16 import java.util.Collections;
17 import java.util.List;
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertNotNull;
21 import static org.junit.Assert.assertTrue;
22 import static org.junit.Assert.fail;
24 public class NetconfTestImplModuleTest extends AbstractConfigTest {
26 public static final String TESTING_DEP_PREFIX = "testing-dep";
27 private NetconfTestImplModuleFactory factory;
28 private final String instanceName = "n1";
33 factory = new NetconfTestImplModuleFactory();
34 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,
35 new DepTestImplModuleFactory()));
39 public void testDependencyList() throws Exception {
40 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
42 ObjectName on = createInstance(transaction, instanceName, 4);
43 transaction.validateConfig();
44 CommitStatus status1 = transaction.commit();
46 assertBeanCount(1, factory.getImplementationName());
47 assertBeanCount(4 + 1, DepTestImplModuleFactory.NAME);
48 assertStatus(status1, 1 + 4 + 1, 0, 0);
50 transaction = configRegistryClient.createTransaction();
52 NetconfTestImplModuleMXBean proxy = transaction.newMXBeanProxy(ObjectNameUtil.withoutTransactionName(on),
53 NetconfTestImplModuleMXBean.class);
54 proxy.getComplexList();
55 List<ObjectName> testingDeps = proxy.getTestingDeps();
56 ObjectName testingDep = proxy.getTestingDep();
58 Assert.assertEquals(TESTING_DEP_PREFIX, ObjectNameUtil.getInstanceName(testingDep));
59 assertTestingDeps(testingDeps, 4);
61 transaction.abortConfig();
63 // check that reuse logic works - equals on list of dependencies.
64 transaction = configRegistryClient.createTransaction();
65 CommitStatus status2 = transaction.commit();
66 assertStatus(status2, 0, 0, 6);
68 // replace single dependency
69 transaction = configRegistryClient.createTransaction();
70 String instanceName1 = TESTING_DEP_PREFIX + 1;
71 transaction.destroyModule(DepTestImplModuleFactory.NAME, instanceName1);
72 transaction.createModule(DepTestImplModuleFactory.NAME, instanceName1);
73 CommitStatus status3 = transaction.commit();
74 assertStatus(status3, 1, 1, 4);
79 public void testNullCheckInListOfDependencies() throws Exception {
80 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
82 ObjectName on = createInstance(transaction, instanceName, 4);
83 NetconfTestImplModuleMXBean proxy = transaction.newMXBeanProxy(on, NetconfTestImplModuleMXBean.class);
85 proxy.setTestingDeps(null);
87 }catch(RuntimeException e) {
88 Throwable cause = e.getCause();
90 assertTrue("Invalid type " + cause, cause instanceof IllegalArgumentException);
91 assertEquals("Null not supported", cause.getMessage());
93 proxy.setTestingDeps(Collections.<ObjectName>emptyList());
96 private void assertTestingDeps(List<ObjectName> testingDeps, int i) {
97 Assert.assertEquals(i, testingDeps.size());
100 for (ObjectName testingDep : testingDeps) {
101 Assert.assertEquals(TESTING_DEP_PREFIX + Integer.toString(c++), ObjectNameUtil.getInstanceName(testingDep));
106 private ObjectName createInstance(ConfigTransactionJMXClient transaction, String instanceName, int depsCount)
107 throws InstanceAlreadyExistsException {
108 ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
109 NetconfTestImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, NetconfTestImplModuleMXBean.class);
111 ObjectName dep = transaction.createModule(DepTestImplModuleFactory.NAME, TESTING_DEP_PREFIX);
112 mxBean.setTestingDep(dep);
114 ArrayList<ObjectName> testingDeps = Lists.newArrayList();
115 for (int i = 0; i < depsCount; i++) {
116 dep = transaction.createModule(DepTestImplModuleFactory.NAME, TESTING_DEP_PREFIX + Integer.toString(i + 1));
117 testingDeps.add(dep);
119 mxBean.setTestingDeps(testingDeps);