Remove unused code in vnfapi
[sdnc/northbound.git] / vnfapi / provider / src / test / java / org / onap / sdnc / vnfapi / VnfInstanceTopologyOperationTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * openECOMP : SDN-C
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights
6  *                                                      reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.sdnc.vnfapi;
23
24 import com.google.common.util.concurrent.CheckedFuture;
25 import org.junit.Assert;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.mockito.runners.MockitoJUnitRunner;
30 import org.mockito.Mockito;
31 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
32 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
33 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
34 import org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter;
35 import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec;
36 import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTestCustomizer;
37 import org.opendaylight.controller.md.sal.binding.test.ConcurrentDataBrokerTestCustomizer;
38 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
39 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
42 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInput;
43 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationOutput;
44 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInputBuilder;
45 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.request.information.VnfInstanceRequestInformation;
46 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.request.information.VnfInstanceRequestInformationBuilder;
47 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.service.data.VnfInstanceServiceDataBuilder;
48
49 import java.util.Properties;
50 import java.util.concurrent.ExecutionException;
51
52 class ExceptionThrowerConfigurator {
53     private boolean shouldThrowExceptionDuringTransactionPut;
54
55     public ExceptionThrowerConfigurator() {
56         this.shouldThrowExceptionDuringTransactionPut = true;
57     }
58
59     public boolean shouldThrowExceptionDuringTransactionPut() {
60         return shouldThrowExceptionDuringTransactionPut;
61     }
62
63     public void setShouldThrowExceptionDuringTransactionPut(boolean shouldThrowExceptionDuringTransactionPut) {
64         this.shouldThrowExceptionDuringTransactionPut = shouldThrowExceptionDuringTransactionPut;
65     }
66 }
67
68 class DataBrokerErrorMsgConfigurator {
69     static public String JAVA_LANG_RUNTIME_EXCEPTION = "java.lang.RuntimeException: ";
70     static public String TRANSACTION_WRITE_ERROR = "transaction-write-error";
71 }
72
73 class DataBrokerStab extends BindingDOMDataBrokerAdapter {
74     ExceptionThrowerConfigurator exceptionThrowerConfigurator;
75
76     public DataBrokerStab(final DOMDataBroker domDataBroker,
77         final BindingToNormalizedNodeCodec codec, ExceptionThrowerConfigurator exceptionThrowerConfigurator) {
78         super(domDataBroker, codec);
79         this.exceptionThrowerConfigurator = exceptionThrowerConfigurator;
80
81     }
82
83     @Override
84     public WriteTransaction newWriteOnlyTransaction() {
85         if (exceptionThrowerConfigurator.shouldThrowExceptionDuringTransactionPut()) {
86             return newThrowingExceptionWriteOnlyTransaction();
87         }
88         return newNotThrowingExceptionWriteOnlyTransaction();
89     }
90
91     private WriteTransaction newThrowingExceptionWriteOnlyTransaction() {
92         WriteTransaction mockWriteTransaction = Mockito.mock(WriteTransaction.class);
93         Mockito.doThrow(new RuntimeException(DataBrokerErrorMsgConfigurator.TRANSACTION_WRITE_ERROR))
94                 .when(mockWriteTransaction).put(Mockito.any(), Mockito.any(), Mockito.any());
95         return mockWriteTransaction;
96     }
97
98     private WriteTransaction newNotThrowingExceptionWriteOnlyTransaction() {
99          WriteTransaction mockWriteTransaction = Mockito.mock(WriteTransaction.class);
100         CheckedFuture<Void, TransactionCommitFailedException> mockCheckedFuture =
101                 Mockito.mock(CheckedFuture.class);
102         Mockito.doNothing().when(mockWriteTransaction).put(Mockito.any(), Mockito.any(), Mockito.any());
103         Mockito.doReturn(mockCheckedFuture).when(mockWriteTransaction).submit();
104         return mockWriteTransaction;
105     }
106 }
107
108 class VnfApiProviderDataBrokerTestCustomizer  extends ConcurrentDataBrokerTestCustomizer {
109     ExceptionThrowerConfigurator exceptionThrowerConfigurator;
110
111     public VnfApiProviderDataBrokerTestCustomizer(ExceptionThrowerConfigurator exceptionThrowerConfigurator) {
112         super(false);
113         this.exceptionThrowerConfigurator = exceptionThrowerConfigurator;
114     }
115
116     public DataBroker createDataBroker() {
117         return new DataBrokerStab(createDOMDataBroker(),
118             super.getBindingToNormalized(), this.exceptionThrowerConfigurator);
119     }
120 }
121
122 @RunWith(MockitoJUnitRunner.class)
123 public class VnfInstanceTopologyOperationTest extends VnfApiProviderTest {
124     protected static final Logger LOG = LoggerFactory.getLogger(VnfInstanceTopologyOperationTest.class);
125
126     private static final String INVALID_INPUT = "invalid input, null or empty vnf-instance-id";
127     private static final String NO_SERVICE_LOGIC = "No service logic active for VNF-API: \'vnf-instance-topology-operation\'";
128     private static final String VIID = "viid";
129     private static final String PRELOAD_NAME = "preloadName";
130     private static final String PRELOAD_TYPE = "preloadType";
131     private static final String ERROR_CODE = "error-code";
132     private static final String ERROR_MESSAGE = "error-message";
133     private static final String ACK_FINAL = "ack-final";
134     private static final String SVC_OPERATION = "vnf-topology-operation";
135
136     private ExceptionThrowerConfigurator exceptionThrowerConfigurator;
137
138     @Override
139     protected AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() {
140         this.exceptionThrowerConfigurator = new ExceptionThrowerConfigurator();
141         return new VnfApiProviderDataBrokerTestCustomizer(this.exceptionThrowerConfigurator);
142     }
143
144     @Before
145     public void setUp() throws Exception {
146         super.setUp();
147         svcClient.setScvOperation(SVC_OPERATION);
148     }
149
150     @Test
151     public void vnfInstanceTopologyOperationInputIsNull() throws Exception {
152         VnfInstanceTopologyOperationInput input = null;
153         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
154     }
155
156     @Test
157     public void vnfInstanceTopologyOperationInput_VnfInstanceRequestInformationIsNull() throws Exception {
158         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
159         builder.setVnfInstanceRequestInformation(null);
160         VnfInstanceTopologyOperationInput input = builder.build();
161         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
162     }
163
164     @Test
165     public void vnfInstanceTopologyOperationInput_getVnfInstanceRequestInformationVnfInstanceIdIsNull() throws Exception {
166         VnfInstanceRequestInformation vnfInstanceRequestInformation = createVnfInstanceRequestInformation(null);
167         VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(vnfInstanceRequestInformation);
168         VnfInstanceTopologyOperationInput input = builder.build();
169         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
170     }
171
172     @Test
173     public void vnfInstanceTopologyOperationInput_VnfInstanceRequestInformationVnfInstanceIdIsZero() throws Exception {
174         VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(""));
175         VnfInstanceTopologyOperationInput input = builder.build();
176         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
177     }
178
179     @Test
180     public void vnfInstanceTopologyOperationInput_svcLogicClientHasGrapheReturnFalse() throws Exception {
181         VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID));
182         VnfInstanceTopologyOperationInput input = builder.build();
183         setReturnForSvcLogicServiceClientHasGraph(false);
184         checkVnfInstanceTopologyOperation(input, "503", NO_SERVICE_LOGIC);
185     }
186
187     @Test
188     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsSvcLogicException() throws Exception {
189         VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID));
190         VnfInstanceTopologyOperationInput input = builder.build();
191         setReturnForSvcLogicServiceClientHasGraph(true);
192         setMockVNFSDNSvcLogicServiceClientToThrowException(SvcLogicException.class);
193         checkVnfInstanceTopologyOperation(input, "500", null);
194     }
195
196     @Test
197     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsException() throws Exception {
198         VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID));
199         VnfInstanceTopologyOperationInput input = builder.build();
200
201         setReturnForSvcLogicServiceClientHasGraph(true);
202         setMockVNFSDNSvcLogicServiceClientToThrowException(Exception.class);
203         checkVnfInstanceTopologyOperation(input, "500", null);
204     }
205
206     @Test
207     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteReturnsNotNull() throws Exception {
208         VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID));
209         VnfInstanceTopologyOperationInput input = builder.build();
210
211         Properties properties = prop().set(ERROR_CODE, "500")
212                 .set(ERROR_MESSAGE, ERROR_MESSAGE)
213                 .set(ACK_FINAL, "Y")
214                 .build();
215
216         setReturnForSvcLogicServiceClientHasGraph(true);
217         setReturnForSvcLogicServiceClientExecute(properties);
218         checkVnfInstanceTopologyOperation(input, "500", ERROR_MESSAGE);
219     }
220
221     @Test
222     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteReturnsNull() throws Exception {
223         VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID));
224         VnfInstanceTopologyOperationInput input = builder.build();
225
226         setReturnForSvcLogicServiceClientHasGraph(true);
227         setReturnForSvcLogicServiceClientExecute(null);
228         String expectedErrorMsg = DataBrokerErrorMsgConfigurator.JAVA_LANG_RUNTIME_EXCEPTION
229                 + DataBrokerErrorMsgConfigurator.TRANSACTION_WRITE_ERROR;
230         checkVnfInstanceTopologyOperation(input, "500", expectedErrorMsg);
231     }
232
233     @Test
234     public void vnfInstanceTopologyOperationInput_NoErrorDuringTransactionWriting() throws Exception {
235         VnfInstanceTopologyOperationInputBuilder builder = createVnfInstanceTopologyOperationInputBuilder(createVnfInstanceRequestInformation(VIID));
236         VnfInstanceTopologyOperationInput input = builder.build();
237
238         setReturnForSvcLogicServiceClientHasGraph(true);
239         setReturnForSvcLogicServiceClientExecute(null);
240         exceptionThrowerConfigurator.setShouldThrowExceptionDuringTransactionPut(false);
241         checkVnfInstanceTopologyOperation(input, "200", null);
242     }
243
244     private void checkVnfInstanceTopologyOperation(VnfInstanceTopologyOperationInput input,
245         String expectedResponseCode, String expectedResponseMessage) throws ExecutionException, InterruptedException {
246
247         VnfInstanceTopologyOperationOutput output = executeVnfInstanceTopologyOperation(input);
248         checkVnfInstanceTopologyOperationOutput(output, expectedResponseCode, expectedResponseMessage);
249     }
250
251     private VnfInstanceTopologyOperationOutput executeVnfInstanceTopologyOperation(
252         VnfInstanceTopologyOperationInput input) throws ExecutionException, InterruptedException {
253         return vnfapiProvider
254                 .vnfInstanceTopologyOperation(input)
255                 .get()
256                 .getResult();
257     }
258
259     private void checkVnfInstanceTopologyOperationOutput(VnfInstanceTopologyOperationOutput result,
260         String expectedResponseCode, String expectedResponseMessage) {
261
262         String expectedAckFinalIndicator = "Y";
263
264         Assert.assertEquals(expectedResponseCode , result.getResponseCode());
265         Assert.assertEquals(expectedResponseMessage, result.getResponseMessage());
266         Assert.assertEquals(expectedAckFinalIndicator, result.getAckFinalIndicator());
267     }
268
269     private void setReturnForSvcLogicServiceClientHasGraph(Boolean returnValue) throws Exception{
270         Mockito.when(mockVNFSDNSvcLogicServiceClient
271                 .hasGraph(Mockito.any(),Mockito.any(), Mockito.any(),Mockito.any()))
272                 .thenReturn(returnValue);
273     }
274
275     private void setReturnForSvcLogicServiceClientExecute(Properties properties) throws Exception{
276         Mockito.when(mockVNFSDNSvcLogicServiceClient
277                 .execute(Mockito.any(),
278                         Mockito.any(),
279                         Mockito.any(),
280                         Mockito.any(),
281                         Mockito.any(VnfInstanceServiceDataBuilder.class),
282                         Mockito.any()))
283                 .thenReturn(properties);
284     }
285
286     private void setMockVNFSDNSvcLogicServiceClientToThrowException(Class exceptionClass) throws Exception {
287         Mockito.when(mockVNFSDNSvcLogicServiceClient
288                 .execute(Mockito.any(),
289                         Mockito.any(),
290                         Mockito.any(),
291                         Mockito.any(),
292                         Mockito.any(VnfInstanceServiceDataBuilder.class),
293                         Mockito.any()))
294                 .thenThrow(exceptionClass.asSubclass(Throwable.class));
295     }
296
297     private VnfInstanceTopologyOperationInputBuilder createVnfInstanceTopologyOperationInputBuilder(VnfInstanceRequestInformation vnfInstanceRequestInformation) {
298         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
299         builder.setVnfInstanceRequestInformation(vnfInstanceRequestInformation);
300         return builder;
301     }
302
303
304
305     private VnfInstanceRequestInformation createVnfInstanceRequestInformation(String vnfInstanceId) {
306         return new VnfInstanceRequestInformationBuilder()
307                 .setVnfInstanceId(vnfInstanceId)
308                 .setVnfInstanceName(PRELOAD_NAME)
309                 .setVnfModelId(PRELOAD_TYPE)
310                 .build();
311     }
312     
313     
314 }