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.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;
47 import java.util.Properties;
48 import java.util.concurrent.ExecutionException;
50 class DataBrokerErrorMsgConfigurator {
51 static public String JAVA_LANG_RUNTIME_EXCEPTION = "java.lang.RuntimeException: ";
52 static public String TRANSACTION_WRITE_ERROR = "transaction-write-error";
55 class DataBrokerStab extends BindingDOMDataBrokerAdapter {
56 public DataBrokerStab(final DOMDataBroker domDataBroker, final BindingToNormalizedNodeCodec codec) {
57 super(domDataBroker, codec);
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;
70 class VnfApiProviderDataBrokerTestCustomizer extends ConcurrentDataBrokerTestCustomizer {
71 public DataBroker createDataBroker() {
72 return new DataBrokerStab(createDOMDataBroker(), super.getBindingToNormalized());
76 @RunWith(MockitoJUnitRunner.class)
77 public class VnfInstanceTopologyOperationTest extends VnfApiProviderTest {
78 protected static final Logger LOG = LoggerFactory.getLogger(VnfInstanceTopologyOperationTest.class);
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";
91 protected AbstractDataBrokerTestCustomizer createDataBrokerTestCustomizer() {
92 return new VnfApiProviderDataBrokerTestCustomizer();
96 public void setUp() throws Exception {
98 svcClient.setScvOperation(SVC_OPERATION);
102 public void vnfInstanceTopologyOperationInputIsNull() throws Exception {
103 VnfInstanceTopologyOperationInput input = null;
104 checkVnfInstanceTopologyOperation(input, "403", INVALID_INPUT);
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);
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);
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);
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);
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);
151 public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteThrowsException() throws Exception {
152 VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
153 builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
154 VnfInstanceTopologyOperationInput input = builder.build();
156 setReturnForSvcLogicServiceClientHasGraph(true);
157 setMockVNFSDNSvcLogicServiceClientToThrowException(Exception.class);
158 checkVnfInstanceTopologyOperation(input, "500", null);
162 public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteReturnsNotNull() throws Exception {
163 VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
164 builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
165 VnfInstanceTopologyOperationInput input = builder.build();
167 Properties properties = prop().set(ERROR_CODE, "500")
168 .set(ERROR_MESSAGE, ERROR_MESSAGE)
172 setReturnForSvcLogicServiceClientHasGraph(true);
173 setReturnForSvcLogicServiceClientExecute(properties);
174 checkVnfInstanceTopologyOperation(input, "500", ERROR_MESSAGE);
178 public void vnfInstanceTopologyOperationInput_svcLogicClientExecuteReturnsNull() throws Exception {
179 VnfInstanceTopologyOperationInputBuilder builder = new VnfInstanceTopologyOperationInputBuilder();
180 builder.setVnfInstanceRequestInformation(createVnfInstanceRequestInformation(VIID));
181 VnfInstanceTopologyOperationInput input = builder.build();
183 setReturnForSvcLogicServiceClientHasGraph(true);
184 setReturnForSvcLogicServiceClientExecute(null);
185 String expectedErrorMsg = DataBrokerErrorMsgConfigurator.JAVA_LANG_RUNTIME_EXCEPTION
186 + DataBrokerErrorMsgConfigurator.TRANSACTION_WRITE_ERROR;
187 checkVnfInstanceTopologyOperation(input, "500", expectedErrorMsg);
190 private void checkVnfInstanceTopologyOperation(VnfInstanceTopologyOperationInput input,
191 String expectedResponseCode, String expectedResponseMessage) throws ExecutionException, InterruptedException {
193 VnfInstanceTopologyOperationOutput output = executeVnfInstanceTopologyOperation(input);
194 checkVnfInstanceTopologyOperationOutput(output, expectedResponseCode, expectedResponseMessage);
197 private VnfInstanceTopologyOperationOutput executeVnfInstanceTopologyOperation(
198 VnfInstanceTopologyOperationInput input) throws ExecutionException, InterruptedException {
199 return vnfapiProvider
200 .vnfInstanceTopologyOperation(input)
205 private void checkVnfInstanceTopologyOperationOutput(VnfInstanceTopologyOperationOutput result,
206 String expectedResponseCode, String expectedResponseMessage) {
208 String expectedAckFinalIndicator = "Y";
210 Assert.assertEquals(expectedResponseCode , result.getResponseCode());
211 Assert.assertEquals(expectedResponseMessage, result.getResponseMessage());
212 Assert.assertEquals(expectedAckFinalIndicator, result.getAckFinalIndicator());
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);
221 private void setReturnForSvcLogicServiceClientExecute(Properties properties) throws Exception{
222 Mockito.when(mockVNFSDNSvcLogicServiceClient
223 .execute(Mockito.any(),
227 Mockito.any(VnfInstanceServiceDataBuilder.class),
229 .thenReturn(properties);
232 private void setMockVNFSDNSvcLogicServiceClientToThrowException(Class exceptionClass) throws Exception {
233 Mockito.when(mockVNFSDNSvcLogicServiceClient
234 .execute(Mockito.any(),
238 Mockito.any(VnfInstanceServiceDataBuilder.class),
240 .thenThrow(exceptionClass.asSubclass(Throwable.class));
243 private VnfInstanceRequestInformation createVnfInstanceRequestInformation(String vnfInstanceId) {
244 return new VnfInstanceRequestInformationBuilder()
245 .setVnfInstanceId(vnfInstanceId)
246 .setVnfInstanceName(PRELOAD_NAME)
247 .setVnfModelId(PRELOAD_TYPE)