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.pnfDetailsBuilder;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfResponseInformation;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfTopologyOperationInput;
18 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfTopologyOperationOutput;
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.PnfTopologyOperationInput;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PnfTopologyOperationOutput;
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 PnfTopologyOperationRPCTest extends GenericResourceApiProviderTest {
38 private static final String SVC_OPERATION = "pnf-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 PnfTopologyOperationInput input = build(pnfTopologyOperationInput());
51 PnfTopologyOperationOutput output =
52 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
54 assertEquals("404", output.getResponseCode());
55 assertEquals(NULL_OR_EMPTY_ERROR_PARAM, output.getResponseMessage());
56 assertEquals("Y", output.getAckFinalIndicator());
62 public void should_fail_when_invalid_pnf_id() throws Exception {
64 PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
65 .setServiceInformation(build(serviceInformationBuilder().
66 setServiceInstanceId("test-service-instance-id")
70 PnfTopologyOperationOutput output =
71 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
73 assertEquals("404", output.getResponseCode());
74 assertEquals("invalid input, null or empty pnf-id", output.getResponseMessage());
75 assertEquals("Y", output.getAckFinalIndicator());
80 public void should_fail_when_client_execution_failed() throws Exception {
82 svcClient.mockHasGraph(true);
83 svcClient.mockExecute(new RuntimeException("test exception"));
85 PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
86 .setServiceInformation(build(serviceInformationBuilder()
87 .setServiceInstanceId("test-service-instance-id")
89 .setPnfDetails(build(pnfDetailsBuilder()
90 .setPnfId("test-pnf-id")
94 PnfTopologyOperationOutput output =
95 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
97 assertEquals("500", output.getResponseCode());
98 assertEquals("test exception", output.getResponseMessage());
99 assertEquals("Y", output.getAckFinalIndicator());
103 public void should_fail_when_client_has_no_graph() throws Exception {
105 svcClient.mockHasGraph(false);
107 PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
108 .setServiceInformation(build(serviceInformationBuilder()
109 .setServiceInstanceId("test-service-instance-id")
111 .setPnfDetails(build(pnfDetailsBuilder()
112 .setPnfId("test-pnf-id")
116 PnfTopologyOperationOutput output =
117 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
119 assertEquals("503", output.getResponseCode());
120 assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
121 assertEquals("Y", output.getAckFinalIndicator());
125 public void should_fail_when_failed_to_update_mdsal() throws Exception {
127 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
128 svcClient.mockExecute(svcResultProp);
129 svcClient.mockHasGraph(true);
130 WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
131 when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
133 DataBroker spyDataBroker = Mockito.spy(dataBroker);
134 when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
135 genericResourceApiProvider.setDataBroker(spyDataBroker);
137 PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
138 .setServiceInformation(build(serviceInformationBuilder()
139 .setServiceInstanceId("test-service-instance-id")
141 .setPnfDetails(build(pnfDetailsBuilder()
142 .setPnfId("test-pnf-id")
146 PnfTopologyOperationOutput output =
147 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
149 assertEquals("500", output.getResponseCode());
150 assertEquals("test exception", output.getResponseMessage());
151 assertEquals("Y", output.getAckFinalIndicator());
155 public void should_complete_with_success_when_no_errors() throws Exception {
157 svcClient.mockHasGraph(true);
158 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
159 svcClient.mockExecute(svcResultProp);
161 PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
162 .setSdncRequestHeader(build(sdncRequestHeader()
163 .setSvcRequestId("test-svc-request-id")
164 .setSvcAction(SvcAction.Assign)
166 .setRequestInformation(build(requestInformation()
167 .setRequestId("test-request-id")
168 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
170 .setServiceInformation(build(serviceInformationBuilder()
171 .setServiceInstanceId("test-service-instance-id")
173 .setPnfDetails(build(pnfDetailsBuilder()
174 .setPnfId("test-pnf-id")
178 PnfTopologyOperationOutput output =
179 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
181 assertEquals("200", output.getResponseCode());
182 assertEquals("OK", output.getResponseMessage());
183 assertEquals("Y", output.getAckFinalIndicator());
185 PnfTopologyOperationOutput expectedPnfTopologyOperationOutput = createExpectedOutput(svcResultProp,
187 assertEquals(expectedPnfTopologyOperationOutput, output);
190 private PnfTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
191 PnfTopologyOperationInput pnfTopologyOperationInput) {
193 pnfTopologyOperationOutput()
194 .setSvcRequestId(pnfTopologyOperationInput.getSdncRequestHeader().getSvcRequestId())
195 .setResponseCode(svcResultProp.get(svcClient.errorCode))
196 .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))
197 .setResponseMessage(svcResultProp.get(svcClient.errorMessage))
198 .setServiceResponseInformation(build(serviceResponseInformation()
199 .setInstanceId(pnfTopologyOperationInput.getServiceInformation().getServiceInstanceId())
200 .setObjectPath(svcResultProp.get(svcClient.serviceObjectPath))
202 .setPnfResponseInformation(build(pnfResponseInformation()
203 .setInstanceId(pnfTopologyOperationInput.getPnfDetails().getPnfId())
204 .setObjectPath(svcResultProp.get(svcClient.pnfObjectPath))