bug 433 NPE in onGlobalContextUpdated of ControllerContext class
[controller.git] / opendaylight / config / yang-test / src / test / java / org / opendaylight / controller / config / yang / test / impl / NetconfTestImplModuleTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.config.yang.test.impl;
9
10 import com.google.common.collect.Lists;
11
12 import junit.framework.Assert;
13
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.test.impl.rev130403.TestIdentity1;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.test.impl.rev130403.TestIdentity2;
24 import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry;
25 import org.opendaylight.yangtools.yang.data.impl.codec.IdentityCodec;
26
27 import javax.management.InstanceAlreadyExistsException;
28 import javax.management.ObjectName;
29
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.List;
33
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;
40
41 public class NetconfTestImplModuleTest  extends AbstractConfigTest {
42
43     public static final String TESTING_DEP_PREFIX = "testing-dep";
44     private NetconfTestImplModuleFactory factory;
45     private final String instanceName = "n1";
46
47     @Before
48     public void setUp() {
49
50         factory = new NetconfTestImplModuleFactory();
51         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(factory,
52                 new DepTestImplModuleFactory(), new IdentityTestModuleFactory()));
53     }
54
55     @Override
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);
60
61         final CodecRegistry ret = super.getCodecRegistry();
62         doReturn(codec).when(ret).getIdentityCodec();
63         return ret;
64     }
65
66     @Test
67     public void testIdentities() throws Exception {
68         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
69
70         ObjectName nameCreated = transaction.createModule(IdentityTestModuleFactory.NAME, instanceName);
71         IdentityTestModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, IdentityTestModuleMXBean.class);
72
73         final IdentitiesContainer c = new IdentitiesContainer();
74         c.setAfi(new IdentityAttributeRef(TestIdentity2.QNAME.toString()));
75         mxBean.setIdentitiesContainer(c);
76         transaction.commit();
77     }
78
79     @Test
80     public void testDependencyList() throws Exception {
81         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
82
83         ObjectName on = createInstance(transaction, instanceName, 4);
84         transaction.validateConfig();
85         CommitStatus status1 = transaction.commit();
86
87         assertBeanCount(1, factory.getImplementationName());
88         assertBeanCount(4 + 1, DepTestImplModuleFactory.NAME);
89         assertStatus(status1, 1 + 4 + 1, 0, 0);
90
91         transaction = configRegistryClient.createTransaction();
92
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();
98
99         Assert.assertEquals(TESTING_DEP_PREFIX, ObjectNameUtil.getInstanceName(testingDep));
100         assertTestingDeps(testingDeps, 4);
101
102         transaction.abortConfig();
103
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);
108
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);
116
117     }
118
119     @Test
120     public void testNullCheckInListOfDependencies() throws Exception {
121         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
122
123         ObjectName on = createInstance(transaction, instanceName, 4);
124         NetconfTestImplModuleMXBean proxy = transaction.newMXBeanProxy(on, NetconfTestImplModuleMXBean.class);
125         try{
126             proxy.setTestingDeps(null);
127             fail();
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());
133         }
134         proxy.setTestingDeps(Collections.<ObjectName>emptyList());
135     }
136
137     private void assertTestingDeps(List<ObjectName> testingDeps, int i) {
138         Assert.assertEquals(i, testingDeps.size());
139
140         int c = 1;
141         for (ObjectName testingDep : testingDeps) {
142             Assert.assertEquals(TESTING_DEP_PREFIX + Integer.toString(c++), ObjectNameUtil.getInstanceName(testingDep));
143         }
144     }
145
146
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);
151
152         ObjectName dep = transaction.createModule(DepTestImplModuleFactory.NAME, TESTING_DEP_PREFIX);
153         mxBean.setTestingDep(dep);
154
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);
159         }
160         mxBean.setTestingDeps(testingDeps);
161
162         return nameCreated;
163     }
164
165 }