2 * Copyright (c) 2013 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
9 package org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig;
11 import com.google.common.base.Optional;
12 import com.google.common.collect.HashMultimap;
13 import com.google.common.collect.Maps;
14 import com.google.common.collect.Multimap;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.mockito.Mock;
18 import org.mockito.MockitoAnnotations;
19 import org.opendaylight.controller.config.util.ConfigRegistryClient;
20 import org.opendaylight.controller.config.util.ConfigTransactionClient;
21 import org.opendaylight.controller.config.yang.store.api.YangStoreSnapshot;
22 import org.opendaylight.controller.netconf.api.NetconfDocumentedException;
23 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.attributes.fromxml.AttributeConfigElement;
24 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config;
25 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.InstanceConfigElementResolved;
26 import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ModuleElementResolved;
27 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfigXmlParser.EditConfigExecution;
28 import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider;
29 import org.opendaylight.controller.netconf.confignetconfconnector.operations.ValidateTest;
30 import org.opendaylight.controller.netconf.util.xml.XmlElement;
31 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
33 import javax.management.ObjectName;
36 import static org.mockito.Matchers.any;
37 import static org.mockito.Matchers.anyMap;
38 import static org.mockito.Matchers.anyString;
39 import static org.mockito.Mockito.*;
41 public class EditConfigTest {
44 private YangStoreSnapshot yangStoreSnapshot;
46 private TransactionProvider provider;
48 private ConfigRegistryClient configRegistry;
50 private ConfigTransactionClient configTransactionClient;
52 private ObjectName mockOn;
55 public void setUp() throws Exception {
56 MockitoAnnotations.initMocks(this);
58 doReturn("mockON").when(mockOn).toString();
59 doReturn(mockOn).when(provider).getTestTransaction();
60 doNothing().when(provider).validateTestTransaction(any(ObjectName.class));
62 doReturn(mockOn).when(provider).getTestTransaction();
63 doNothing().when(provider).abortTestTransaction(any(ObjectName.class));
64 doReturn(mockOn).when(provider).getOrCreateTransaction();
66 doReturn(configTransactionClient).when(configRegistry).getConfigTransactionClient(any(ObjectName.class));
67 doReturn("mockConfigTransactionClient").when(configTransactionClient).toString();
69 doReturn(mockOn).when(configTransactionClient).lookupConfigBean(anyString(), anyString());
73 public void test() throws NetconfDocumentedException {
74 EditConfig edit = new EditConfig(yangStoreSnapshot, provider, configRegistry,
75 ValidateTest.NETCONF_SESSION_ID_FOR_REPORTING);
76 EditConfigStrategy editStrat = mock(EditConfigStrategy.class);
77 doNothing().when(editStrat).executeConfiguration(anyString(), anyString(), anyMap(),
78 any(ConfigTransactionClient.class));
79 Map<String, Multimap<String, ModuleElementResolved>> resolvedXmlElements = getMapping(editStrat);
81 Config cfg = mock(Config.class);
82 XmlElement xmlElement = mock(XmlElement.class);
83 doReturn(resolvedXmlElements).when(cfg).fromXml(xmlElement);
85 EditConfigExecution editConfigExecution = new EditConfigExecution(null, cfg, xmlElement,
86 EditConfigXmlParser.TestOption.testThenSet);
88 edit.getResponseInternal(XmlUtil.newDocument(), editConfigExecution);
90 verify(provider).getTestTransaction();
91 verify(provider).validateTestTransaction(mockOn);
92 verify(provider).abortTestTransaction(mockOn);
94 verify(provider).getOrCreateTransaction();
96 // For every instance execute strat
97 verify(editStrat, times(2/* Test */+ 2/* Set */)).executeConfiguration(anyString(), anyString(), anyMap(),
98 any(ConfigTransactionClient.class));
101 private Map<String, Multimap<String, ModuleElementResolved>> getMapping(EditConfigStrategy editStrat) {
102 Map<String, Multimap<String, ModuleElementResolved>> result = Maps.newHashMap();
104 Multimap<String, ModuleElementResolved> innerMultimap = HashMultimap.create();
105 Map<String, AttributeConfigElement> attributes = getSimpleAttributes();
107 InstanceConfigElementResolved ice1 = mock(InstanceConfigElementResolved.class);
108 doReturn(attributes).when(ice1).getConfiguration();
109 doReturn(editStrat).when(ice1).getEditStrategy();
110 innerMultimap.put("m1", new ModuleElementResolved("i1", ice1));
112 InstanceConfigElementResolved ice2 = mock(InstanceConfigElementResolved.class);
113 doReturn(attributes).when(ice2).getConfiguration();
114 doReturn(editStrat).when(ice2).getEditStrategy();
115 innerMultimap.put("m1", new ModuleElementResolved("i2", ice2));
117 result.put("n1", innerMultimap);
122 static Map<String, AttributeConfigElement> getSimpleAttributes() {
123 Map<String, AttributeConfigElement> attributes = Maps.newHashMap();
124 AttributeConfigElement ace1 = mock(AttributeConfigElement.class);
125 doReturn("abcd").when(ace1).getResolvedDefaultValue();
126 doReturn(Optional.<String> of("abc")).when(ace1).getResolvedValue();
127 doReturn("mockedAce1").when(ace1).toString();
128 doReturn("jmxNameAce1").when(ace1).getJmxName();
129 attributes.put("a1", ace1);