2 * Copyright (c) 2014 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.test.impl;
10 import com.google.common.collect.Lists;
12 import junit.framework.Assert;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.opendaylight.controller.config.api.IdentityAttributeRef;
17 import org.opendaylight.controller.config.api.jmx.CommitStatus;
18 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
19 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
20 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
21 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.test.types.rev131127.TestIdentity1;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.test.types.rev131127.TestIdentity2;
24 import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry;
25 import org.opendaylight.yangtools.yang.data.impl.codec.IdentityCodec;
27 import javax.management.InstanceAlreadyExistsException;
28 import javax.management.ObjectName;
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.List;
34 import static org.junit.Assert.assertEquals;
35 import static org.junit.Assert.assertNotNull;
36 import static org.junit.Assert.assertTrue;
37 import static org.junit.Assert.fail;
38 import static org.mockito.Mockito.doReturn;
39 import static org.mockito.Mockito.mock;
41 public class NetconfTestImplModuleTest extends AbstractConfigTest {
43 public static final String TESTING_DEP_PREFIX = "testing-dep";
44 private NetconfTestImplModuleFactory factory;
45 private final String instanceName = "n1";
50 factory = new NetconfTestImplModuleFactory();
51 super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory,
52 new DepTestImplModuleFactory(), new IdentityTestModuleFactory()));
56 protected CodecRegistry getCodecRegistry() {
57 final IdentityCodec<?> codec = mock(IdentityCodec.class);
58 doReturn(TestIdentity1.class).when(codec).deserialize(TestIdentity1.QNAME);
59 doReturn(TestIdentity2.class).when(codec).deserialize(TestIdentity2.QNAME);
61 final CodecRegistry ret = super.getCodecRegistry();
62 doReturn(codec).when(ret).getIdentityCodec();
67 public void testIdentities() throws Exception {
68 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
70 ObjectName nameCreated = transaction.createModule(IdentityTestModuleFactory.NAME, instanceName);
71 IdentityTestModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, IdentityTestModuleMXBean.class);
73 final IdentitiesContainer c = new IdentitiesContainer();
74 c.setAfi(new IdentityAttributeRef(TestIdentity2.QNAME.toString()));
75 mxBean.setIdentitiesContainer(c);
80 public void testDependencyList() throws Exception {
81 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
83 ObjectName on = createInstance(transaction, instanceName, 4);
84 transaction.validateConfig();
85 CommitStatus status1 = transaction.commit();
87 assertBeanCount(1, factory.getImplementationName());
88 assertBeanCount(4 + 1, DepTestImplModuleFactory.NAME);
89 assertStatus(status1, 1 + 4 + 1, 0, 0);
91 transaction = configRegistryClient.createTransaction();
93 NetconfTestImplModuleMXBean proxy = transaction.newMXBeanProxy(ObjectNameUtil.withoutTransactionName(on),
94 NetconfTestImplModuleMXBean.class);
95 proxy.getComplexList();
96 List<ObjectName> testingDeps = proxy.getTestingDeps();
97 ObjectName testingDep = proxy.getTestingDep();
99 Assert.assertEquals(TESTING_DEP_PREFIX, ObjectNameUtil.getInstanceName(testingDep));
100 assertTestingDeps(testingDeps, 4);
102 transaction.abortConfig();
104 // check that reuse logic works - equals on list of dependencies.
105 transaction = configRegistryClient.createTransaction();
106 CommitStatus status2 = transaction.commit();
107 assertStatus(status2, 0, 0, 6);
109 // replace single dependency
110 transaction = configRegistryClient.createTransaction();
111 String instanceName1 = TESTING_DEP_PREFIX + 1;
112 transaction.destroyModule(DepTestImplModuleFactory.NAME, instanceName1);
113 transaction.createModule(DepTestImplModuleFactory.NAME, instanceName1);
114 CommitStatus status3 = transaction.commit();
115 assertStatus(status3, 1, 1, 4);
120 public void testNullCheckInListOfDependencies() throws Exception {
121 ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
123 ObjectName on = createInstance(transaction, instanceName, 4);
124 NetconfTestImplModuleMXBean proxy = transaction.newMXBeanProxy(on, NetconfTestImplModuleMXBean.class);
126 proxy.setTestingDeps(null);
128 }catch(RuntimeException e) {
129 Throwable cause = e.getCause();
130 assertNotNull(cause);
131 assertTrue("Invalid type " + cause, cause instanceof IllegalArgumentException);
132 assertEquals("Null not supported", cause.getMessage());
134 proxy.setTestingDeps(Collections.<ObjectName>emptyList());
137 private void assertTestingDeps(List<ObjectName> testingDeps, int i) {
138 Assert.assertEquals(i, testingDeps.size());
141 for (ObjectName testingDep : testingDeps) {
142 Assert.assertEquals(TESTING_DEP_PREFIX + Integer.toString(c++), ObjectNameUtil.getInstanceName(testingDep));
147 private ObjectName createInstance(ConfigTransactionJMXClient transaction, String instanceName, int depsCount)
148 throws InstanceAlreadyExistsException {
149 ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
150 NetconfTestImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, NetconfTestImplModuleMXBean.class);
152 ObjectName dep = transaction.createModule(DepTestImplModuleFactory.NAME, TESTING_DEP_PREFIX);
153 mxBean.setTestingDep(dep);
155 ArrayList<ObjectName> testingDeps = Lists.newArrayList();
156 for (int i = 0; i < depsCount; i++) {
157 dep = transaction.createModule(DepTestImplModuleFactory.NAME, TESTING_DEP_PREFIX + Integer.toString(i + 1));
158 testingDeps.add(dep);
160 mxBean.setTestingDeps(testingDeps);