fb9264749b42026c5b100834828c6e3e20e70995
[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 org.junit.Before;
13 import org.junit.Test;
14 import org.opendaylight.controller.config.api.IdentityAttributeRef;
15 import org.opendaylight.controller.config.api.jmx.CommitStatus;
16 import org.opendaylight.controller.config.api.jmx.ObjectNameUtil;
17 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
18 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
19 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.test.types.rev131127.TestIdentity1;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.test.types.rev131127.TestIdentity2;
22 import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry;
23 import org.opendaylight.yangtools.yang.data.impl.codec.IdentityCodec;
24
25 import javax.management.InstanceAlreadyExistsException;
26 import javax.management.ObjectName;
27
28 import java.util.ArrayList;
29 import java.util.Collections;
30 import java.util.List;
31
32 import static org.junit.Assert.assertEquals;
33 import static org.junit.Assert.assertNotNull;
34 import static org.junit.Assert.assertTrue;
35 import static org.junit.Assert.fail;
36 import static org.mockito.Mockito.doReturn;
37 import static org.mockito.Mockito.mock;
38
39 public class NetconfTestImplModuleTest  extends AbstractConfigTest {
40
41     public static final String TESTING_DEP_PREFIX = "testing-dep";
42     private NetconfTestImplModuleFactory factory;
43     private final String instanceName = "n1";
44
45     @Before
46     public void setUp() {
47
48         factory = new NetconfTestImplModuleFactory();
49         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,factory,
50                 new DepTestImplModuleFactory(), new IdentityTestModuleFactory()));
51     }
52
53     @Override
54     protected CodecRegistry getCodecRegistry() {
55         final IdentityCodec<?> codec = mock(IdentityCodec.class);
56         doReturn(TestIdentity1.class).when(codec).deserialize(TestIdentity1.QNAME);
57         doReturn(TestIdentity2.class).when(codec).deserialize(TestIdentity2.QNAME);
58
59         final CodecRegistry ret = super.getCodecRegistry();
60         doReturn(codec).when(ret).getIdentityCodec();
61         return ret;
62     }
63
64     @Test
65     public void testIdentities() throws Exception {
66         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
67
68         ObjectName nameCreated = transaction.createModule(IdentityTestModuleFactory.NAME, instanceName);
69         IdentityTestModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, IdentityTestModuleMXBean.class);
70
71         final IdentitiesContainer c = new IdentitiesContainer();
72         c.setAfi(new IdentityAttributeRef(TestIdentity2.QNAME.toString()));
73         mxBean.setIdentitiesContainer(c);
74         transaction.commit();
75     }
76
77     @Test
78     public void testDependencyList() throws Exception {
79         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
80
81         ObjectName on = createInstance(transaction, instanceName, 4);
82         transaction.validateConfig();
83         CommitStatus status1 = transaction.commit();
84
85         assertBeanCount(1, factory.getImplementationName());
86         assertBeanCount(4 + 1, DepTestImplModuleFactory.NAME);
87         assertStatus(status1, 1 + 4 + 1, 0, 0);
88
89         transaction = configRegistryClient.createTransaction();
90
91         NetconfTestImplModuleMXBean proxy = transaction.newMXBeanProxy(ObjectNameUtil.withoutTransactionName(on),
92                 NetconfTestImplModuleMXBean.class);
93         proxy.getComplexList();
94         List<ObjectName> testingDeps = proxy.getTestingDeps();
95         ObjectName testingDep = proxy.getTestingDep();
96
97         assertEquals(TESTING_DEP_PREFIX, ObjectNameUtil.getInstanceName(testingDep));
98         assertTestingDeps(testingDeps, 4);
99
100         transaction.abortConfig();
101
102         // check that reuse logic works - equals on list of dependencies.
103         transaction = configRegistryClient.createTransaction();
104         CommitStatus status2 = transaction.commit();
105         assertStatus(status2, 0, 0, 6);
106
107         // replace single dependency
108         transaction = configRegistryClient.createTransaction();
109         String instanceName1 = TESTING_DEP_PREFIX + 1;
110         transaction.destroyModule(DepTestImplModuleFactory.NAME, instanceName1);
111         transaction.createModule(DepTestImplModuleFactory.NAME, instanceName1);
112         CommitStatus status3 = transaction.commit();
113         assertStatus(status3, 1, 1, 4);
114
115     }
116
117     @Test
118     public void testNullCheckInListOfDependencies() throws Exception {
119         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
120
121         ObjectName on = createInstance(transaction, instanceName, 4);
122         NetconfTestImplModuleMXBean proxy = transaction.newMXBeanProxy(on, NetconfTestImplModuleMXBean.class);
123         try{
124             proxy.setTestingDeps(null);
125             fail();
126         }catch(RuntimeException e) {
127             Throwable cause = e.getCause();
128             assertNotNull(cause);
129             assertTrue("Invalid type " + cause, cause instanceof IllegalArgumentException);
130             assertEquals("Null not supported", cause.getMessage());
131         }
132         proxy.setTestingDeps(Collections.<ObjectName>emptyList());
133     }
134
135     private void assertTestingDeps(List<ObjectName> testingDeps, int i) {
136         assertEquals(i, testingDeps.size());
137
138         int c = 1;
139         for (ObjectName testingDep : testingDeps) {
140             assertEquals(TESTING_DEP_PREFIX + Integer.toString(c++), ObjectNameUtil.getInstanceName(testingDep));
141         }
142     }
143
144
145     private ObjectName createInstance(ConfigTransactionJMXClient transaction, String instanceName, int depsCount)
146             throws InstanceAlreadyExistsException {
147         ObjectName nameCreated = transaction.createModule(factory.getImplementationName(), instanceName);
148         NetconfTestImplModuleMXBean mxBean = transaction.newMXBeanProxy(nameCreated, NetconfTestImplModuleMXBean.class);
149
150         ObjectName dep = transaction.createModule(DepTestImplModuleFactory.NAME, TESTING_DEP_PREFIX);
151         mxBean.setTestingDep(dep);
152
153         ArrayList<ObjectName> testingDeps = Lists.newArrayList();
154         for (int i = 0; i < depsCount; i++) {
155             dep = transaction.createModule(DepTestImplModuleFactory.NAME, TESTING_DEP_PREFIX + Integer.toString(i + 1));
156             testingDeps.add(dep);
157         }
158         mxBean.setTestingDeps(testingDeps);
159
160         return nameCreated;
161     }
162
163 }