Add tests to VnfApiProvider part 4
[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 org.junit.Assert;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.mockito.runners.MockitoJUnitRunner;
29 import org.mockito.Mockito;
30 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
31 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
32 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
33 import org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter;
34 import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec;
35 import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTestCustomizer;
36 import org.opendaylight.controller.md.sal.binding.test.ConcurrentDataBrokerTestCustomizer;
37 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
40 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInput;
41 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationOutput;
42 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInputBuilder;
43 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.request.information.VnfInstanceRequestInformation;
44 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.request.information.VnfInstanceRequestInformationBuilder;
45 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.service.data.VnfInstanceServiceDataBuilder;
46
47 import java.util.Properties;
48 import java.util.concurrent.ExecutionException;
49
50 class DataBrokerErrorMsgConfigurator {
51     static public String JAVA_LANG_RUNTIME_EXCEPTION = "java.lang.RuntimeException: ";
52     static public String TRANSACTION_WRITE_ERROR = "transaction-write-error";
53 }
54
55 class DataBrokerStab extends BindingDOMDataBrokerAdapter {
56     public DataBrokerStab(final DOMDataBroker domDataBroker, final BindingToNormalizedNodeCodec codec) {
57         super(domDataBroker, codec);
58
59     }
60
61     @Override
62     public WriteTransaction newWriteOnlyTransaction() {
63         WriteTransaction mockWriteTransaction = Mockito.mock(WriteTransaction.class);
64         Mockito.doThrow(new RuntimeException(DataBrokerErrorMsgConfigurator.TRANSACTION_WRITE_ERROR))
65                 .when(mockWriteTransaction).put(Mockito.any(), Mockito.any(), Mockito.any());
66         return mockWriteTransaction;
67     }
68 }
69
70 class VnfApiProviderDataBrokerTestCustomizer  extends ConcurrentDataBrokerTestCustomizer {
71     public DataBroker createDataBroker() {
72         return new DataBrokerStab(createDOMDataBroker(), super.getBindingToNormalized());
73     }
74 }
75
76 @RunWith(MockitoJUnitRunner.class)
77 public class VnfInstanceTopologyOperationTest extends VnfApiProviderTest {
78     protected static final Logger LOG = LoggerFactory.getLogger(VnfInstanceTopologyOperationTest.class);
79
80     private static final String INVALID_INPUT = "invalid input, null or empty vnf-instance-id";
81     private static final String NO_SERVICE_LOGIC = "No service logic active for VNF-API: \'vnf-instance-topology-operation\'";
82     private static final String VIID = "viid";
83     private static final String PRELOAD_NAME = "preloadName";
84     private static final String PRELOAD_TYPE = "preloadType";
85     private static final String ERROR_CODE = "error-code";
86     private static final String ERROR_MESSAGE = "error-message";
87     private static final String ACK_FINAL = "ack-final";
88     private static final String SVC_OPERATION = "vnf-topology-operation";
89
90     @Override
91     protected AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() {
92         return new VnfApiProviderDataBrokerTestCustomizer();
93     }
94
95     @Before
96     public void setUp() throws Exception {
97         super.setUp();
98         svcClient.setScvOperation(SVC_OPERATION);
99     }
100
101     @Test
102     public void vnfInstanceTopologyOperationInputIsNull() throws Exception {
103         VnfInstanceTopologyOperationInput input = null;
104         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
105     }
106
107     @Test
108     public void vnfInstanceTopologyOperationInput_VnfInstanceRequestInformationIsNull() throws Exception {
109         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
110         builder.setVnfInstanceRequestInformation(null);
111         VnfInstanceTopologyOperationInput input = builder.build();
112         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
113     }
114
115     @Test
116     public void vnfInstanceTopologyOperationInput_getVnfInstanceRequestInformationVnfInstanceIdIsNull() throws Exception {
117         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
118         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(null));
119         VnfInstanceTopologyOperationInput input = builder.build();
120         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
121     }
122
123     @Test
124     public void vnfInstanceTopologyOperationInput_VnfInstanceRequestInformationVnfInstanceIdIsZero() throws Exception {
125         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
126         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(""));
127         VnfInstanceTopologyOperationInput input = builder.build();
128         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
129     }
130
131     @Test
132     public void vnfInstanceTopologyOperationInput_svcLogicClientHasGrapheReturnFalse() throws Exception {
133         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
134         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
135         VnfInstanceTopologyOperationInput input = builder.build();
136         setReturnForSvcLogicServiceClientHasGraph(false);
137         checkVnfInstanceTopologyOperation(input, "503", NO_SERVICE_LOGIC);
138     }
139
140     @Test
141     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsSvcLogicException() throws Exception {
142         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
143         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
144         VnfInstanceTopologyOperationInput input = builder.build();
145         setReturnForSvcLogicServiceClientHasGraph(true);
146         setMockVNFSDNSvcLogicServiceClientToThrowException(SvcLogicException.class);
147         checkVnfInstanceTopologyOperation(input, "500", null);
148     }
149
150     @Test
151     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsException() throws Exception {
152         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
153         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
154         VnfInstanceTopologyOperationInput input = builder.build();
155
156         setReturnForSvcLogicServiceClientHasGraph(true);
157         setMockVNFSDNSvcLogicServiceClientToThrowException(Exception.class);
158         checkVnfInstanceTopologyOperation(input, "500", null);
159     }
160
161     @Test
162     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteReturnsNotNull() throws Exception {
163         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
164         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
165         VnfInstanceTopologyOperationInput input = builder.build();
166
167         Properties properties = prop().set(ERROR_CODE, "500")
168                 .set(ERROR_MESSAGE, ERROR_MESSAGE)
169                 .set(ACK_FINAL, "Y")
170                 .build();
171
172         setReturnForSvcLogicServiceClientHasGraph(true);
173         setReturnForSvcLogicServiceClientExecute(properties);
174         checkVnfInstanceTopologyOperation(input, "500", ERROR_MESSAGE);
175     }
176
177     @Test
178     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteReturnsNull() throws Exception {
179         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
180         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
181         VnfInstanceTopologyOperationInput input = builder.build();
182
183         setReturnForSvcLogicServiceClientHasGraph(true);
184         setReturnForSvcLogicServiceClientExecute(null);
185         String expectedErrorMsg = DataBrokerErrorMsgConfigurator.JAVA_LANG_RUNTIME_EXCEPTION
186                 + DataBrokerErrorMsgConfigurator.TRANSACTION_WRITE_ERROR;
187         checkVnfInstanceTopologyOperation(input, "500", expectedErrorMsg);
188     }
189
190     private void checkVnfInstanceTopologyOperation(VnfInstanceTopologyOperationInput input,
191         String expectedResponseCode, String expectedResponseMessage) throws ExecutionException, InterruptedException {
192
193         VnfInstanceTopologyOperationOutput output = executeVnfInstanceTopologyOperation(input);
194         checkVnfInstanceTopologyOperationOutput(output, expectedResponseCode, expectedResponseMessage);
195     }
196
197     private VnfInstanceTopologyOperationOutput executeVnfInstanceTopologyOperation(
198         VnfInstanceTopologyOperationInput input) throws ExecutionException, InterruptedException {
199         return vnfapiProvider
200                 .vnfInstanceTopologyOperation(input)
201                 .get()
202                 .getResult();
203     }
204
205     private void checkVnfInstanceTopologyOperationOutput(VnfInstanceTopologyOperationOutput result,
206         String expectedResponseCode, String expectedResponseMessage) {
207
208         String expectedAckFinalIndicator = "Y";
209
210         Assert.assertEquals(expectedResponseCode , result.getResponseCode());
211         Assert.assertEquals(expectedResponseMessage, result.getResponseMessage());
212         Assert.assertEquals(expectedAckFinalIndicator, result.getAckFinalIndicator());
213     }
214
215     private void setReturnForSvcLogicServiceClientHasGraph(Boolean returnValue) throws Exception{
216         Mockito.when(mockVNFSDNSvcLogicServiceClient
217                 .hasGraph(Mockito.any(),Mockito.any(), Mockito.any(),Mockito.any()))
218                 .thenReturn(returnValue);
219     }
220
221     private void setReturnForSvcLogicServiceClientExecute(Properties properties) throws Exception{
222         Mockito.when(mockVNFSDNSvcLogicServiceClient
223                 .execute(Mockito.any(),
224                         Mockito.any(),
225                         Mockito.any(),
226                         Mockito.any(),
227                         Mockito.any(VnfInstanceServiceDataBuilder.class),
228                         Mockito.any()))
229                 .thenReturn(properties);
230     }
231
232     private void setMockVNFSDNSvcLogicServiceClientToThrowException(Class exceptionClass) throws Exception {
233         Mockito.when(mockVNFSDNSvcLogicServiceClient
234                 .execute(Mockito.any(),
235                         Mockito.any(),
236                         Mockito.any(),
237                         Mockito.any(),
238                         Mockito.any(VnfInstanceServiceDataBuilder.class),
239                         Mockito.any()))
240                 .thenThrow(exceptionClass.asSubclass(Throwable.class));
241     }
242
243     private VnfInstanceRequestInformation createVnfInstanceRequestInformation(String vnfInstanceId) {
244         return new VnfInstanceRequestInformationBuilder()
245                 .setVnfInstanceId(vnfInstanceId)
246                 .setVnfInstanceName(PRELOAD_NAME)
247                 .setVnfModelId(PRELOAD_TYPE)
248                 .build();
249     }
250 }