12b6bf4d622fe60f8ffae65b32ae1e2220b98d81
[netconf.git] / netconf / config-netconf-connector / src / test / java / org / opendaylight / netconf / confignetconfconnector / operations / editconfig / MergeEditConfigStrategyTest.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
9 package org.opendaylight.netconf.confignetconfconnector.operations.editconfig;
10
11 import static java.util.Arrays.asList;
12 import static org.junit.Assert.assertEquals;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.mock;
15 import static org.opendaylight.controller.config.api.jmx.ObjectNameUtil.createReadOnlyModuleON;
16
17 import com.google.common.base.Optional;
18 import com.google.common.collect.ImmutableMap;
19 import java.util.List;
20 import java.util.Map;
21 import javax.management.ObjectName;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml.AttributeConfigElement;
25 import org.opendaylight.controller.config.facade.xml.mapping.config.ServiceRegistryWrapper;
26 import org.opendaylight.controller.config.facade.xml.strategy.MergeEditConfigStrategy;
27 import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
28 import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
29 import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
30 import org.opendaylight.controller.config.yang.test.impl.MultipleDependenciesModule;
31 import org.opendaylight.controller.config.yang.test.impl.MultipleDependenciesModuleFactory;
32 import org.opendaylight.controller.config.yang.test.impl.MultipleDependenciesModuleMXBean;
33
34 public class MergeEditConfigStrategyTest extends AbstractConfigTest {
35     private static final MultipleDependenciesModuleFactory FACTORY = new MultipleDependenciesModuleFactory();
36     private static final String FACTORY_NAME = FACTORY.getImplementationName();
37     public static final String PARENT = "parent";
38     public static final String D1 = "d1";
39     public static final String D2 = "d2";
40     public static final String D3 = "d3";
41
42     @Before
43     public void setUp() throws Exception {
44         super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, FACTORY));
45
46         ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
47         ObjectName d1 = transaction.createModule(FACTORY_NAME, D1);
48         ObjectName d2 = transaction.createModule(FACTORY_NAME, D2);
49         ObjectName parent = transaction.createModule(FACTORY_NAME, PARENT);
50         MultipleDependenciesModuleMXBean multipleDependenciesModuleMXBean = transaction.newMXBeanProxy(parent,
51                 MultipleDependenciesModuleMXBean.class);
52         multipleDependenciesModuleMXBean.setTestingDeps(asList(d1, d2));
53         transaction.createModule(FACTORY_NAME, D3);
54         transaction.commit();
55     }
56
57     @Test
58     public void testMergingOfObjectNames() throws Exception {
59         final MergeEditConfigStrategy strategy = new MergeEditConfigStrategy();
60         final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
61
62         // add D3
63
64         AttributeConfigElement attributeConfigElement = mock(AttributeConfigElement.class);
65         doReturn(Optional.of(new ObjectName[] {createReadOnlyModuleON(FACTORY_NAME, D3)}))
66                 .when(attributeConfigElement).getResolvedValue();
67         doReturn("mocked").when(attributeConfigElement).toString();
68         String attributeName = MultipleDependenciesModule.testingDepsJmxAttribute.getAttributeName();
69         doReturn(attributeName).when(attributeConfigElement).getJmxName();
70         Map<String, AttributeConfigElement> configuration = ImmutableMap.of(
71                 attributeName,
72                 attributeConfigElement);
73
74         strategy.executeConfiguration(FACTORY_NAME, PARENT, configuration, transaction,
75                 mock(ServiceRegistryWrapper.class));
76         transaction.commit();
77
78         // parent's attribute should contain d1,d2,d3
79         MultipleDependenciesModuleMXBean proxy = configRegistryClient.newMXBeanProxy(
80                 createReadOnlyModuleON(FACTORY_NAME, PARENT),
81                 MultipleDependenciesModuleMXBean.class);
82         List<ObjectName> testingDeps = proxy.getTestingDeps();
83         List<ObjectName> expected = asList(createReadOnlyModuleON(FACTORY_NAME, D1),
84                 createReadOnlyModuleON(FACTORY_NAME, D2),
85                 createReadOnlyModuleON(FACTORY_NAME, D3));
86         assertEquals(expected, testingDeps);
87     }
88 }