Remove netconf from commons/opendaylight pom
[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 static org.mockito.Matchers.any;
12 import static org.mockito.Matchers.anyMapOf;
13 import static org.mockito.Matchers.anyString;
14 import static org.mockito.Mockito.doNothing;
15 import static org.mockito.Mockito.doReturn;
16 import static org.mockito.Mockito.mock;
17 import static org.mockito.Mockito.times;
18 import static org.mockito.Mockito.verify;
19
20 import com.google.common.base.Optional;
21 import com.google.common.collect.HashMultimap;
22 import com.google.common.collect.Maps;
23 import com.google.common.collect.Multimap;
24 import java.util.Collections;
25 import java.util.Map;
26 import javax.management.ObjectName;
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.mockito.Mock;
30 import org.mockito.MockitoAnnotations;
31 import org.opendaylight.controller.config.api.ServiceReferenceReadableRegistry;
32 import org.opendaylight.controller.config.facade.xml.ConfigExecution;
33 import org.opendaylight.controller.config.facade.xml.ConfigSubsystemFacade;
34 import org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml.AttributeConfigElement;
35 import org.opendaylight.controller.config.facade.xml.mapping.config.InstanceConfigElementResolved;
36 import org.opendaylight.controller.config.facade.xml.mapping.config.ModuleElementDefinition;
37 import org.opendaylight.controller.config.facade.xml.mapping.config.ModuleElementResolved;
38 import org.opendaylight.controller.config.facade.xml.mapping.config.ServiceRegistryWrapper;
39 import org.opendaylight.controller.config.facade.xml.mapping.config.Services;
40 import org.opendaylight.controller.config.facade.xml.osgi.YangStoreService;
41 import org.opendaylight.controller.config.facade.xml.strategy.EditConfigStrategy;
42 import org.opendaylight.controller.config.facade.xml.strategy.EditStrategyType;
43 import org.opendaylight.controller.config.facade.xml.transactions.TransactionProvider;
44 import org.opendaylight.controller.config.util.ConfigRegistryClient;
45 import org.opendaylight.controller.config.util.ConfigTransactionClient;
46 import org.opendaylight.controller.config.util.xml.XmlElement;
47 import org.opendaylight.controller.config.util.xml.XmlUtil;
48 import org.opendaylight.controller.netconf.confignetconfconnector.operations.ValidateTest;
49
50 public class EditConfigTest {
51
52     @Mock
53     private YangStoreService yangStoreSnapshot;
54     @Mock
55     private TransactionProvider provider;
56     @Mock
57     private ConfigRegistryClient configRegistry;
58     @Mock
59     private ConfigTransactionClient configTransactionClient;
60     @Mock
61     private ObjectName mockOn;
62
63     private ConfigSubsystemFacade cfgFacade;
64
65     @Before
66     public void setUp() throws Exception {
67         MockitoAnnotations.initMocks(this);
68
69         doReturn("mockON").when(mockOn).toString();
70         doReturn(mockOn).when(provider).getTestTransaction();
71         doNothing().when(provider).validateTestTransaction(any(ObjectName.class));
72
73         doReturn(mockOn).when(provider).getTestTransaction();
74         doNothing().when(provider).abortTestTransaction(any(ObjectName.class));
75         doReturn(mockOn).when(provider).getOrCreateTransaction();
76
77         doNothing().when(provider).wipeTestTransaction(any(ObjectName.class));
78
79         doReturn(configTransactionClient).when(configRegistry).getConfigTransactionClient(any(ObjectName.class));
80         doReturn("mockConfigTransactionClient").when(configTransactionClient).toString();
81
82         doReturn(mockOn).when(configTransactionClient).lookupConfigBean(anyString(), anyString());
83
84         cfgFacade = new ConfigSubsystemFacade(configRegistry, configRegistry, yangStoreSnapshot, provider);
85     }
86
87     @Test
88     public void test() throws Exception {
89         EditConfig edit = new EditConfig(cfgFacade, ValidateTest.NETCONF_SESSION_ID_FOR_REPORTING);
90         EditConfigStrategy editStrat = mock(EditConfigStrategy.class);
91
92         doNothing().when(editStrat).executeConfiguration(anyString(), anyString(), anyMapOf(String.class, AttributeConfigElement.class),
93                 any(ConfigTransactionClient.class), any(ServiceRegistryWrapper.class));
94
95         ConfigExecution editConfigExecution = mockExecution(editStrat);
96
97         edit.getResponseInternal(XmlUtil.newDocument(), editConfigExecution);
98
99         verify(provider).getTestTransaction();
100         verify(provider).validateTestTransaction(mockOn);
101         verify(provider).abortTestTransaction(mockOn);
102
103         verify(provider).getOrCreateTransaction();
104
105         // For every instance execute strat
106         verify(editStrat, times(2/* Test */+ 2/* Set */ + 2/*Handle missing instance Test*/ + 2 /*Handle missing instance Set*/)).executeConfiguration(anyString(),
107                 anyString(), anyMapOf(String.class, AttributeConfigElement.class),
108                 any(ConfigTransactionClient.class), any(ServiceRegistryWrapper.class));
109     }
110
111     private ConfigExecution mockExecution(EditConfigStrategy editStrat) throws Exception {
112         ConfigExecution mock = mock(ConfigExecution.class);
113         doReturn(getMapping(editStrat)).when(mock).getResolvedXmlElements(any(ConfigTransactionClient.class));
114         doReturn(getMappingDefinition(editStrat)).when(mock).getModulesDefinition(any(ConfigTransactionClient.class));
115         doReturn(EditStrategyType.merge).when(mock).getDefaultStrategy();
116         doReturn(true).when(mock).shouldSet();
117         doReturn(true).when(mock).shouldTest();
118         doReturn(mockServices()).when(mock).getServiceRegistryWrapper(any(ConfigTransactionClient.class));
119         doReturn(new Services()).when(mock).getServices();
120         doReturn(XmlElement.fromDomElement(XmlUtil.readXmlToElement("<abc/>"))).when(mock).getConfigElement();
121         return mock;
122     }
123
124     private Object getMappingDefinition(EditConfigStrategy editStrat) {
125         Map<String, Multimap<String, ModuleElementDefinition>> result = Maps.newHashMap();
126
127         Multimap<String, ModuleElementDefinition> innerMultimap = HashMultimap.create();
128         Map<String, AttributeConfigElement> attributes = getSimpleAttributes();
129
130         ModuleElementDefinition mockedDefinition = mock(ModuleElementDefinition.class);
131         doReturn(editStrat).when(mockedDefinition).getEditStrategy();
132         doReturn("i1").when(mockedDefinition).getInstanceName();
133         innerMultimap.put("m1", mockedDefinition);
134
135         ModuleElementDefinition mockedDefinition2 = mock(ModuleElementDefinition.class);
136         doReturn(editStrat).when(mockedDefinition2).getEditStrategy();
137         doReturn("i2").when(mockedDefinition2).getInstanceName();
138         innerMultimap.put("m1", mockedDefinition2);
139
140         result.put("n1", innerMultimap);
141
142         return result;
143     }
144
145     private static ServiceReferenceReadableRegistry mockServiceRegistry() {
146         ServiceReferenceReadableRegistry mock = mock(ServiceReferenceReadableRegistry.class);
147         doReturn(
148                 Collections.emptyMap())
149                 .when(mock).getServiceMapping();
150         doReturn("mockedServiceReg").when(mock).toString();
151
152         return mock;
153     }
154
155     static ServiceRegistryWrapper mockServices() {
156         return new ServiceRegistryWrapper(mockServiceRegistry());
157     }
158
159     private Map<String, Multimap<String, ModuleElementResolved>> getMapping(EditConfigStrategy editStrat) {
160         Map<String, Multimap<String, ModuleElementResolved>> result = Maps.newHashMap();
161
162         Multimap<String, ModuleElementResolved> innerMultimap = HashMultimap.create();
163         Map<String, AttributeConfigElement> attributes = getSimpleAttributes();
164
165         InstanceConfigElementResolved ice1 = mock(InstanceConfigElementResolved.class);
166         doReturn(attributes).when(ice1).getConfiguration();
167         doReturn(editStrat).when(ice1).getEditStrategy();
168         innerMultimap.put("m1", new ModuleElementResolved("i1", ice1));
169
170         InstanceConfigElementResolved ice2 = mock(InstanceConfigElementResolved.class);
171         doReturn(attributes).when(ice2).getConfiguration();
172         doReturn(editStrat).when(ice2).getEditStrategy();
173         innerMultimap.put("m1", new ModuleElementResolved("i2", ice2));
174
175         result.put("n1", innerMultimap);
176
177         return result;
178     }
179
180     static Map<String, AttributeConfigElement> getSimpleAttributes() {
181         Map<String, AttributeConfigElement> attributes = Maps.newHashMap();
182         AttributeConfigElement ace1 = mock(AttributeConfigElement.class);
183         doReturn("abcd").when(ace1).getResolvedDefaultValue();
184         doReturn(Optional.<String> of("abc")).when(ace1).getResolvedValue();
185         doReturn("mockedAce1").when(ace1).toString();
186         doReturn("jmxNameAce1").when(ace1).getJmxName();
187         attributes.put("a1", ace1);
188         return attributes;
189     }
190
191 }