6c2cbe0e181d09cfbf353ed81d8765ccdb04f4f1
[sdnc/northbound.git] / vnfapi / provider / src / test / java / org / onap / sdnc / vnfapi / VnfApiProviderTest.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.mockito.Mock;
28 import org.mockito.Mockito;
29 import org.mockito.MockitoAnnotations;
30 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
31 import org.onap.sdnc.vnfapi.util.DataBrokerUtil;
32 import org.onap.sdnc.vnfapi.util.PropBuilder;
33 import org.onap.sdnc.vnfapi.util.VNFSDNSvcLogicServiceClientMockUtil;
34 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
35 import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
36 import org.opendaylight.controller.md.sal.binding.test.AbstractConcurrentDataBrokerTest;
37 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
40 import org.opendaylight.yangtools.yang.common.RpcResult;
41 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInput;
42 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationOutput;
43 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInputBuilder;
44 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.request.information.VnfInstanceRequestInformation;
45 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.request.information.VnfInstanceRequestInformationBuilder;
46 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.service.data.VnfInstanceServiceDataBuilder;
47
48 import java.util.Properties;
49 import java.util.concurrent.ExecutionException;
50 import java.util.concurrent.Future;
51
52
53 public class VnfApiProviderTest extends AbstractConcurrentDataBrokerTest {
54     private static final String INVALID_INPUT = "invalid input, null or empty vnf-instance-id";
55     private static final String NO_SERVICE_LOGIC = "No service logic active for VNF-API: \'vnf-instance-topology-operation\'";
56     private static final String VIID = "viid";
57     private static final String PRELOAD_NAME = "preloadName";
58     private static final String PRELOAD_TYPE = "preloadType";
59     private static final String ERROR_CODE = "error-code";
60     private static final String ERROR_MESSAGE = "error-message";
61     private static final String ACK_FINAL = "ack-final";
62
63     protected VnfApiProvider vnfapiProvider;
64     protected DataBroker dataBroker;
65     protected @Mock NotificationPublishService mockNotificationPublishService;
66     protected @Mock RpcProviderRegistry mockRpcProviderRegistry;
67     protected @Mock VNFSDNSvcLogicServiceClient mockVNFSDNSvcLogicServiceClient;
68     protected static final Logger LOG = LoggerFactory.getLogger(VnfApiProvider.class);
69
70     protected DataBrokerUtil db;
71     protected VNFSDNSvcLogicServiceClientMockUtil svcClient;
72
73
74     @Before
75     public void setUp() throws Exception {
76         MockitoAnnotations.initMocks(this);
77         svcClient = new VNFSDNSvcLogicServiceClientMockUtil(mockVNFSDNSvcLogicServiceClient);
78         dataBroker = getDataBroker();
79         db = new DataBrokerUtil(dataBroker);
80          try {
81             vnfapiProvider = new VnfApiProvider(
82                     dataBroker,
83                     mockNotificationPublishService,
84                     mockRpcProviderRegistry,
85                     mockVNFSDNSvcLogicServiceClient
86             );
87         } catch (Exception e) {
88             LOG.error("Caught exception on setUp", e);
89             throw e;
90         }
91     }
92
93
94     public static PropBuilder prop(){
95         return (new PropBuilder());
96     }
97
98     @Test
99     public void vnfInstanceTopologyOperationInputIsNull() throws Exception {
100         VnfInstanceTopologyOperationInput input = null;
101         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
102     }
103
104
105     @Test
106     public void vnfInstanceTopologyOperationInput_VnfInstanceRequestInformationIsNull() throws Exception {
107         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
108         builder.setVnfInstanceRequestInformation(null);
109         VnfInstanceTopologyOperationInput input = builder.build();
110
111         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
112     }
113
114     @Test
115     public void vnfInstanceTopologyOperationInput_getVnfInstanceRequestInformationVnfInstanceIdIsNull() throws Exception {
116         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
117         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(null));
118         VnfInstanceTopologyOperationInput input = builder.build();
119
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
129         checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
130     }
131
132     @Test
133     public void vnfInstanceTopologyOperationInput_svcLogicClientHasGrapheReturnFalse() throws Exception {
134         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
135         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
136         VnfInstanceTopologyOperationInput input = builder.build();
137
138         Mockito.when(mockVNFSDNSvcLogicServiceClient
139                 .hasGraph(Mockito.any(),Mockito.any(), Mockito.any(),Mockito.any()))
140                 .thenReturn(false);
141
142         checkVnfInstanceTopologyOperation(input, "503", NO_SERVICE_LOGIC);
143     }
144
145
146     @Test
147     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsSvcLogicException() throws Exception {
148         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
149         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
150         VnfInstanceTopologyOperationInput input = builder.build();
151
152         Mockito.when(mockVNFSDNSvcLogicServiceClient
153                     .hasGraph(Mockito.any(),Mockito.any(), Mockito.any(),Mockito.any()))
154                 .thenReturn(true);
155         setMockVNFSDNSvcLogicServiceClientToThrowException(SvcLogicException.class);
156         checkVnfInstanceTopologyOperation(input, "500", null);
157     }
158
159     @Test
160     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsException() throws Exception {
161         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
162         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
163         VnfInstanceTopologyOperationInput input = builder.build();
164
165         Mockito.when(mockVNFSDNSvcLogicServiceClient
166                 .hasGraph(Mockito.any(),Mockito.any(), Mockito.any(),Mockito.any()))
167                 .thenReturn(true);
168         setMockVNFSDNSvcLogicServiceClientToThrowException(Exception.class);
169         checkVnfInstanceTopologyOperation(input, "500", null);
170     }
171
172     private void setMockVNFSDNSvcLogicServiceClientToThrowException(Class exceptionClass) throws Exception {
173         Mockito.when(mockVNFSDNSvcLogicServiceClient
174                 .execute(Mockito.any(),
175                         Mockito.any(),
176                         Mockito.any(),
177                         Mockito.any(),
178                         Mockito.any(VnfInstanceServiceDataBuilder.class),
179                         Mockito.any()))
180                 .thenThrow(exceptionClass.asSubclass(Throwable.class));
181     }
182
183        @Test
184     public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteReturnsNotNull() throws Exception {
185         VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
186         builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
187         VnfInstanceTopologyOperationInput input = builder.build();
188
189         Properties properties = prop().set(ERROR_CODE, "500")
190                 .set(ERROR_MESSAGE, ERROR_MESSAGE)
191                 .set(ACK_FINAL, "Y")
192                 .build();
193
194         Mockito.when(mockVNFSDNSvcLogicServiceClient
195                 .hasGraph(Mockito.any(),Mockito.any(), Mockito.any(),Mockito.any()))
196                 .thenReturn(true);
197
198         Mockito.when(mockVNFSDNSvcLogicServiceClient
199                     .execute(Mockito.any(),
200                         Mockito.any(),
201                         Mockito.any(),
202                         Mockito.any(),
203                         Mockito.any(VnfInstanceServiceDataBuilder.class),
204                         Mockito.any()))
205                .thenReturn(properties);
206
207
208         checkVnfInstanceTopologyOperation(input, "500", ERROR_MESSAGE);
209     }
210
211     private VnfInstanceRequestInformation createVnfInstanceRequestInformation(String vnfInstanceId) {
212         return new VnfInstanceRequestInformationBuilder()
213                 .setVnfInstanceId(vnfInstanceId)
214                 .setVnfInstanceName(PRELOAD_NAME)
215                 .setVnfModelId(PRELOAD_TYPE)
216                 .build();
217     }
218
219     private void checkVnfInstanceTopologyOperation(VnfInstanceTopologyOperationInput input,
220         String expectedResponseCode, String expectedResponseMessage) throws ExecutionException, InterruptedException {
221
222         VnfInstanceTopologyOperationOutput output = executeVnfInstanceTopologyOperation(input);
223         checkVnfInstanceTopologyOperationOutput(output, expectedResponseCode, expectedResponseMessage);
224     }
225
226     private VnfInstanceTopologyOperationOutput executeVnfInstanceTopologyOperation(
227             VnfInstanceTopologyOperationInput input) throws ExecutionException, InterruptedException {
228         return vnfapiProvider
229                 .vnfInstanceTopologyOperation(input)
230                 .get()
231                 .getResult();
232     }
233
234     private void checkVnfInstanceTopologyOperationOutput(VnfInstanceTopologyOperationOutput result,
235             String expectedResponseCode, String expectedResponseMessage) {
236
237         String expectedAckFinalIndicator = "Y";
238
239         Assert.assertEquals(result.getResponseCode(), expectedResponseCode );
240         Assert.assertEquals(result.getResponseMessage(), expectedResponseMessage);
241         Assert.assertEquals(result.getAckFinalIndicator(), expectedAckFinalIndicator);
242     }
243  }