2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
22 package org.onap.sdnc.vnfapi;
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;
48 import java.util.Properties;
49 import java.util.concurrent.ExecutionException;
50 import java.util.concurrent.Future;
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";
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);
70 protected DataBrokerUtil db;
71 protected VNFSDNSvcLogicServiceClientMockUtil svcClient;
75 public void setUp() throws Exception {
76 MockitoAnnotations.initMocks(this);
77 svcClient = new VNFSDNSvcLogicServiceClientMockUtil(mockVNFSDNSvcLogicServiceClient);
78 dataBroker = getDataBroker();
79 db = new DataBrokerUtil(dataBroker);
81 vnfapiProvider = new VnfApiProvider(
83 mockNotificationPublishService,
84 mockRpcProviderRegistry,
85 mockVNFSDNSvcLogicServiceClient
87 } catch (Exception e) {
88 LOG.error("Caught exception on setUp", e);
94 public static PropBuilder prop(){
95 return (new PropBuilder());
99 public void vnfInstanceTopologyOperationInputIsNull() throws Exception {
100 VnfInstanceTopologyOperationInput input = null;
101 checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
106 public void vnfInstanceTopologyOperationInput_VnfInstanceRequestInformationIsNull() throws Exception {
107 VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
108 builder.setVnfInstanceRequestInformation(null);
109 VnfInstanceTopologyOperationInput input = builder.build();
111 checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
115 public void vnfInstanceTopologyOperationInput_getVnfInstanceRequestInformationVnfInstanceIdIsNull() throws Exception {
116 VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
117 builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(null));
118 VnfInstanceTopologyOperationInput input = builder.build();
120 checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
124 public void vnfInstanceTopologyOperationInput_VnfInstanceRequestInformationVnfInstanceIdIsZero() throws Exception {
125 VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
126 builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(""));
127 VnfInstanceTopologyOperationInput input = builder.build();
129 checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
133 public void vnfInstanceTopologyOperationInput_svcLogicClientHasGrapheReturnFalse() throws Exception {
134 VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
135 builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
136 VnfInstanceTopologyOperationInput input = builder.build();
138 Mockito.when(mockVNFSDNSvcLogicServiceClient
139 .hasGraph(Mockito.any(),Mockito.any(), Mockito.any(),Mockito.any()))
142 checkVnfInstanceTopologyOperation(input, "503", NO_SERVICE_LOGIC);
147 public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsSvcLogicException() throws Exception {
148 VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
149 builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
150 VnfInstanceTopologyOperationInput input = builder.build();
152 Mockito.when(mockVNFSDNSvcLogicServiceClient
153 .hasGraph(Mockito.any(),Mockito.any(), Mockito.any(),Mockito.any()))
155 setMockVNFSDNSvcLogicServiceClientToThrowException(SvcLogicException.class);
156 checkVnfInstanceTopologyOperation(input, "500", null);
160 public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsException() throws Exception {
161 VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
162 builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
163 VnfInstanceTopologyOperationInput input = builder.build();
165 Mockito.when(mockVNFSDNSvcLogicServiceClient
166 .hasGraph(Mockito.any(),Mockito.any(), Mockito.any(),Mockito.any()))
168 setMockVNFSDNSvcLogicServiceClientToThrowException(Exception.class);
169 checkVnfInstanceTopologyOperation(input, "500", null);
172 private void setMockVNFSDNSvcLogicServiceClientToThrowException(Class exceptionClass) throws Exception {
173 Mockito.when(mockVNFSDNSvcLogicServiceClient
174 .execute(Mockito.any(),
178 Mockito.any(VnfInstanceServiceDataBuilder.class),
180 .thenThrow(exceptionClass.asSubclass(Throwable.class));
184 public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteReturnsNotNull() throws Exception {
185 VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
186 builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
187 VnfInstanceTopologyOperationInput input = builder.build();
189 Properties properties = prop().set(ERROR_CODE, "500")
190 .set(ERROR_MESSAGE, ERROR_MESSAGE)
194 Mockito.when(mockVNFSDNSvcLogicServiceClient
195 .hasGraph(Mockito.any(),Mockito.any(), Mockito.any(),Mockito.any()))
198 Mockito.when(mockVNFSDNSvcLogicServiceClient
199 .execute(Mockito.any(),
203 Mockito.any(VnfInstanceServiceDataBuilder.class),
205 .thenReturn(properties);
208 checkVnfInstanceTopologyOperation(input, "500", ERROR_MESSAGE);
211 private VnfInstanceRequestInformation createVnfInstanceRequestInformation(String vnfInstanceId) {
212 return new VnfInstanceRequestInformationBuilder()
213 .setVnfInstanceId(vnfInstanceId)
214 .setVnfInstanceName(PRELOAD_NAME)
215 .setVnfModelId(PRELOAD_TYPE)
219 private void checkVnfInstanceTopologyOperation(VnfInstanceTopologyOperationInput input,
220 String expectedResponseCode, String expectedResponseMessage) throws ExecutionException, InterruptedException {
222 VnfInstanceTopologyOperationOutput output = executeVnfInstanceTopologyOperation(input);
223 checkVnfInstanceTopologyOperationOutput(output, expectedResponseCode, expectedResponseMessage);
226 private VnfInstanceTopologyOperationOutput executeVnfInstanceTopologyOperation(
227 VnfInstanceTopologyOperationInput input) throws ExecutionException, InterruptedException {
228 return vnfapiProvider
229 .vnfInstanceTopologyOperation(input)
234 private void checkVnfInstanceTopologyOperationOutput(VnfInstanceTopologyOperationOutput result,
235 String expectedResponseCode, String expectedResponseMessage) {
237 String expectedAckFinalIndicator = "Y";
239 Assert.assertEquals(result.getResponseCode(), expectedResponseCode );
240 Assert.assertEquals(result.getResponseMessage(), expectedResponseMessage);
241 Assert.assertEquals(result.getAckFinalIndicator(), expectedAckFinalIndicator);