1 package org.onap.sdnc.northbound;
3 import static org.junit.Assert.assertEquals;
4 import static org.mockito.Mockito.mock;
5 import static org.mockito.Mockito.when;
6 import static org.onap.sdnc.northbound.GenericResourceApiProvider.APP_NAME;
7 import static org.onap.sdnc.northbound.GenericResourceApiProvider.NO_SERVICE_LOGIC_ACTIVE;
8 import static org.onap.sdnc.northbound.GenericResourceApiProvider.NULL_OR_EMPTY_ERROR_PARAM;
9 import static org.onap.sdnc.northbound.util.MDSALUtil.build;
10 import static org.onap.sdnc.northbound.util.MDSALUtil.exec;
11 import static org.onap.sdnc.northbound.util.MDSALUtil.requestInformation;
12 import static org.onap.sdnc.northbound.util.MDSALUtil.sdncRequestHeader;
13 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceInformationBuilder;
14 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceResponseInformation;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleInformationBuilder;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleTopologyOperationInput;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleTopologyOperationOutput;
18 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfInformationBuilder;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.mockito.Mockito;
24 import org.mockito.runners.MockitoJUnitRunner;
25 import org.onap.sdnc.northbound.util.PropBuilder;
26 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
27 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
28 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainClosedException;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationInput;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationOutput;
31 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
32 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
33 import org.opendaylight.yangtools.yang.common.RpcResult;
35 @RunWith(MockitoJUnitRunner.class)
36 public class VfModuleTopologyOperationRPCTest extends GenericResourceApiProviderTest {
38 private static final String SVC_OPERATION = "vf-module-topology-operation";
41 public void setUp() throws Exception {
43 svcClient.setScvOperation(SVC_OPERATION);
47 public void should_fail_when_service_info_not_present() throws Exception {
49 VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput());
51 VfModuleTopologyOperationOutput output =
52 exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
54 assertEquals("403", output.getResponseCode());
55 assertEquals(NULL_OR_EMPTY_ERROR_PARAM, output.getResponseMessage());
56 assertEquals("Y", output.getAckFinalIndicator());
61 public void should_fail_when_invalid_vnf_id() throws Exception {
63 VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
64 .setServiceInformation(build(serviceInformationBuilder()
65 .setServiceInstanceId("test-service-instance-id")
69 VfModuleTopologyOperationOutput output =
70 exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
72 assertEquals("403", output.getResponseCode());
73 assertEquals("invalid input, null or empty vnf-id", output.getResponseMessage());
74 assertEquals("Y", output.getAckFinalIndicator());
78 public void should_fail_when_invalid_vf_module_id() throws Exception {
80 VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
81 .setServiceInformation(build(serviceInformationBuilder()
82 .setServiceInstanceId("test-service-instance-id")
84 .setVnfInformation(build(vnfInformationBuilder()
85 .setVnfId("test-vnf-id")))
88 VfModuleTopologyOperationOutput output =
89 exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
91 assertEquals("403", output.getResponseCode());
92 assertEquals("invalid input, vf-module-id is null or empty", output.getResponseMessage());
93 assertEquals("Y", output.getAckFinalIndicator());
98 public void should_fail_when_client_execution_failed() throws Exception {
100 svcClient.mockHasGraph(true);
101 svcClient.mockExecute(new RuntimeException("test exception"));
103 VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
104 .setServiceInformation(build(serviceInformationBuilder()
105 .setServiceInstanceId("test-service-instance-id")
107 .setVnfInformation(build(vnfInformationBuilder()
108 .setVnfId("test-vnf-id")
110 .setVfModuleInformation(build(vfModuleInformationBuilder()
111 .setVfModuleId("test-vf-module-id")
115 VfModuleTopologyOperationOutput output =
116 exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
118 assertEquals("500", output.getResponseCode());
119 assertEquals("test exception", output.getResponseMessage());
120 assertEquals("Y", output.getAckFinalIndicator());
124 public void should_fail_when_client_has_no_graph() throws Exception {
126 svcClient.mockHasGraph(false);
128 VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
129 .setServiceInformation(build(serviceInformationBuilder()
130 .setServiceInstanceId("test-service-instance-id")
132 .setVnfInformation(build(vnfInformationBuilder()
133 .setVnfId("test-vnf-id")
135 .setVfModuleInformation(build(vfModuleInformationBuilder()
136 .setVfModuleId("test-vf-module-id")
140 VfModuleTopologyOperationOutput output =
141 exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
143 assertEquals("503", output.getResponseCode());
144 assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
145 assertEquals("Y", output.getAckFinalIndicator());
149 public void should_fail_when_failed_to_update_mdsal() throws Exception {
151 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
152 svcClient.mockExecute(svcResultProp);
153 svcClient.mockHasGraph(true);
154 WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
155 when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
157 DataBroker spyDataBroker = Mockito.spy(dataBroker);
158 when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
159 genericResourceApiProvider.setDataBroker(spyDataBroker);
161 VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
162 .setServiceInformation(build(serviceInformationBuilder()
163 .setServiceInstanceId("test-service-instance-id")
165 .setVnfInformation(build(vnfInformationBuilder()
166 .setVnfId("test-vnf-id")
168 .setVfModuleInformation(build(vfModuleInformationBuilder()
169 .setVfModuleId("test-vf-module-id")
173 VfModuleTopologyOperationOutput output =
174 exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
176 assertEquals("500", output.getResponseCode());
177 assertEquals("test exception", output.getResponseMessage());
178 assertEquals("Y", output.getAckFinalIndicator());
182 public void should_complete_with_success_when_no_errors() throws Exception {
184 svcClient.mockHasGraph(true);
185 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
186 svcClient.mockExecute(svcResultProp);
188 VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
189 .setSdncRequestHeader(build(sdncRequestHeader()
190 .setSvcRequestId("test-svc-request-id")
191 .setSvcAction(SvcAction.Assign)
193 .setRequestInformation(build(requestInformation()
194 .setRequestId("test-request-id")
195 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
197 .setServiceInformation(build(serviceInformationBuilder()
198 .setServiceInstanceId("test-service-instance-id")
200 .setVnfInformation(build(vnfInformationBuilder()
201 .setVnfId("test-vnf-id")
203 .setVfModuleInformation(build(vfModuleInformationBuilder()
204 .setVfModuleId("test-vf-module-id")
208 VfModuleTopologyOperationOutput output =
209 exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
211 assertEquals("200", output.getResponseCode());
212 assertEquals("OK", output.getResponseMessage());
213 assertEquals("Y", output.getAckFinalIndicator());
215 VfModuleTopologyOperationOutput expectedOutput = createExpectedVMTOO(svcResultProp,
217 assertEquals(expectedOutput, output);
220 private VfModuleTopologyOperationOutput createExpectedVMTOO(PropBuilder propBuilder,
221 VfModuleTopologyOperationInput input) {
223 vfModuleTopologyOperationOutput()
224 .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
225 .setResponseCode(propBuilder.get(svcClient.errorCode))
226 .setAckFinalIndicator(propBuilder.get(svcClient.ackFinal))
227 .setResponseMessage(propBuilder.get(svcClient.errorMessage))
228 .setServiceResponseInformation(build(serviceResponseInformation()
229 .setInstanceId(input.getServiceInformation().getServiceInstanceId())
230 .setObjectPath(propBuilder.get("vnf-object-path"))