Initial code drop of netconf protocol implementation
[controller.git] / opendaylight / netconf / config-netconf-connector / src / test / java / org / opendaylight / controller / netconf / confignetconfconnector / operations / editconfig / EditConfigTest.java
1 /*
2  * Copyright (c) 2013 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.controller.netconf.confignetconfconnector.operations.editconfig;
10
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.EditConfig;
28 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfigStrategy;
29 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfigXmlParser;
30 import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfigXmlParser.EditConfigExecution;
31 import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider;
32 import org.opendaylight.controller.netconf.confignetconfconnector.operations.ValidateTest;
33 import org.opendaylight.controller.netconf.util.xml.XmlElement;
34 import org.opendaylight.controller.netconf.util.xml.XmlUtil;
35
36 import javax.management.ObjectName;
37 import java.util.Map;
38
39 import static org.mockito.Matchers.any;
40 import static org.mockito.Matchers.anyMap;
41 import static org.mockito.Matchers.anyString;
42 import static org.mockito.Mockito.*;
43
44 public class EditConfigTest {
45
46     @Mock
47     private YangStoreSnapshot yangStoreSnapshot;
48     @Mock
49     private TransactionProvider provider;
50     @Mock
51     private ConfigRegistryClient configRegistry;
52     @Mock
53     private ConfigTransactionClient configTransactionClient;
54     @Mock
55     private ObjectName mockOn;
56
57     @Before
58     public void setUp() throws Exception {
59         MockitoAnnotations.initMocks(this);
60
61         doReturn("mockON").when(mockOn).toString();
62         doReturn(mockOn).when(provider).getTestTransaction();
63         doNothing().when(provider).validateTestTransaction(any(ObjectName.class));
64
65         doReturn(mockOn).when(provider).getTestTransaction();
66         doNothing().when(provider).abortTestTransaction(any(ObjectName.class));
67         doReturn(mockOn).when(provider).getOrCreateTransaction();
68
69         doReturn(configTransactionClient).when(configRegistry).getConfigTransactionClient(any(ObjectName.class));
70         doReturn("mockConfigTransactionClient").when(configTransactionClient).toString();
71
72         doReturn(mockOn).when(configTransactionClient).lookupConfigBean(anyString(), anyString());
73     }
74
75     @Test
76     public void test() throws NetconfDocumentedException {
77         EditConfig edit = new EditConfig(yangStoreSnapshot, provider, configRegistry,
78                 ValidateTest.NETCONF_SESSION_ID_FOR_REPORTING);
79         EditConfigStrategy editStrat = mock(EditConfigStrategy.class);
80         doNothing().when(editStrat).executeConfiguration(anyString(), anyString(), anyMap(),
81                 any(ConfigTransactionClient.class));
82         Map<String, Multimap<String, ModuleElementResolved>> resolvedXmlElements = getMapping(editStrat);
83
84         Config cfg = mock(Config.class);
85         XmlElement xmlElement = mock(XmlElement.class);
86         doReturn(resolvedXmlElements).when(cfg).fromXml(xmlElement);
87
88         EditConfigExecution editConfigExecution = new EditConfigExecution(null, cfg, xmlElement,
89                 EditConfigXmlParser.TestOption.testThenSet);
90
91         edit.getResponseInternal(XmlUtil.newDocument(), editConfigExecution);
92
93         verify(provider).getTestTransaction();
94         verify(provider).validateTestTransaction(mockOn);
95         verify(provider).abortTestTransaction(mockOn);
96
97         verify(provider).getOrCreateTransaction();
98
99         // For every instance execute strat
100         verify(editStrat, times(2/* Test */+ 2/* Set */)).executeConfiguration(anyString(), anyString(), anyMap(),
101                 any(ConfigTransactionClient.class));
102     }
103
104     private Map<String, Multimap<String, ModuleElementResolved>> getMapping(EditConfigStrategy editStrat) {
105         Map<String, Multimap<String, ModuleElementResolved>> result = Maps.newHashMap();
106
107         Multimap<String, ModuleElementResolved> innerMultimap = HashMultimap.create();
108         Map<String, AttributeConfigElement> attributes = getSimpleAttributes();
109
110         InstanceConfigElementResolved ice1 = mock(InstanceConfigElementResolved.class);
111         doReturn(attributes).when(ice1).getConfiguration();
112         doReturn(editStrat).when(ice1).getEditStrategy();
113         innerMultimap.put("m1", new ModuleElementResolved("i1", ice1));
114
115         InstanceConfigElementResolved ice2 = mock(InstanceConfigElementResolved.class);
116         doReturn(attributes).when(ice2).getConfiguration();
117         doReturn(editStrat).when(ice2).getEditStrategy();
118         innerMultimap.put("m1", new ModuleElementResolved("i2", ice2));
119
120         result.put("n1", innerMultimap);
121
122         return result;
123     }
124
125     static Map<String, AttributeConfigElement> getSimpleAttributes() {
126         Map<String, AttributeConfigElement> attributes = Maps.newHashMap();
127         AttributeConfigElement ace1 = mock(AttributeConfigElement.class);
128         doReturn("abcd").when(ace1).getResolvedDefaultValue();
129         doReturn(Optional.<String> of("abc")).when(ace1).getResolvedValue();
130         doReturn("mockedAce1").when(ace1).toString();
131         doReturn("jmxNameAce1").when(ace1).getJmxName();
132         attributes.put("a1", ace1);
133         return attributes;
134     }
135
136 }