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