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.exec;
10 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfDetailsBuilder;
11 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfResponseInformation;
12 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfTopologyOperationInput;
13 import static org.onap.sdnc.northbound.util.MDSALUtil.pnfTopologyOperationOutput;
14 import static org.onap.sdnc.northbound.util.MDSALUtil.requestInformation;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.sdncRequestHeader;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceInformationBuilder;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceResponseInformation;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 import org.mockito.Mockito;
23 import org.mockito.runners.MockitoJUnitRunner;
24 import org.onap.sdnc.northbound.util.PropBuilder;
25 import org.opendaylight.mdsal.binding.api.DataBroker;
26 import org.opendaylight.mdsal.binding.api.TransactionChainClosedException;
27 import org.opendaylight.mdsal.binding.api.WriteTransaction;
28 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PnfTopologyOperationInput;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PnfTopologyOperationOutput;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
31 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
32 import org.opendaylight.yangtools.yang.common.RpcResult;
34 @RunWith(MockitoJUnitRunner.class)
35 public class PnfTopologyOperationRPCTest extends GenericResourceApiProviderTest {
37 private static final String SVC_OPERATION = "pnf-topology-operation";
40 public void setUp() throws Exception {
42 svcClient.setScvOperation(SVC_OPERATION);
46 public void should_fail_when_service_info_not_present() throws Exception {
48 PnfTopologyOperationInput input = pnfTopologyOperationInput().build();
50 PnfTopologyOperationOutput output =
51 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
53 assertEquals("404", output.getResponseCode());
54 assertEquals(NULL_OR_EMPTY_ERROR_PARAM, output.getResponseMessage());
55 assertEquals("Y", output.getAckFinalIndicator());
61 public void should_fail_when_invalid_pnf_id() throws Exception {
63 PnfTopologyOperationInput input = build(pnfTopologyOperationInput()
64 .setServiceInformation(build(serviceInformationBuilder().
65 setServiceInstanceId("test-service-instance-id")
69 PnfTopologyOperationOutput output =
70 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
72 assertEquals("404", output.getResponseCode());
73 assertEquals("invalid input, null or empty pnf-id", output.getResponseMessage());
74 assertEquals("Y", output.getAckFinalIndicator());
79 public void should_fail_when_client_execution_failed() throws Exception {
81 svcClient.mockHasGraph(true);
82 svcClient.mockExecute(new RuntimeException("test exception"));
84 PnfTopologyOperationInput input = pnfTopologyOperationInput()
85 .setServiceInformation(serviceInformationBuilder()
86 .setServiceInstanceId("test-service-instance-id").build()
88 .setPnfDetails(pnfDetailsBuilder()
89 .setPnfId("test-pnf-id").build()
92 PnfTopologyOperationOutput output =
93 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
95 assertEquals("500", output.getResponseCode());
96 assertEquals("test exception", output.getResponseMessage());
97 assertEquals("Y", output.getAckFinalIndicator());
101 public void should_fail_when_client_has_no_graph() throws Exception {
103 svcClient.mockHasGraph(false);
105 PnfTopologyOperationInput input = pnfTopologyOperationInput()
106 .setServiceInformation(serviceInformationBuilder()
107 .setServiceInstanceId("test-service-instance-id").build()
109 .setPnfDetails(pnfDetailsBuilder()
110 .setPnfId("test-pnf-id").build()
113 PnfTopologyOperationOutput output =
114 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
116 assertEquals("503", output.getResponseCode());
117 assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
118 assertEquals("Y", output.getAckFinalIndicator());
122 public void should_fail_when_failed_to_update_mdsal() throws Exception {
124 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
125 svcClient.mockExecute(svcResultProp);
126 svcClient.mockHasGraph(true);
127 WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
128 when(mockWriteTransaction.commit()).thenThrow(new TransactionChainClosedException("test exception"));
130 DataBroker spyDataBroker = Mockito.spy(dataBroker);
131 when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
132 genericResourceApiProvider.setDataBroker(spyDataBroker);
134 PnfTopologyOperationInput input = pnfTopologyOperationInput()
135 .setServiceInformation(serviceInformationBuilder()
136 .setServiceInstanceId("test-service-instance-id").build()
138 .setPnfDetails(pnfDetailsBuilder()
139 .setPnfId("test-pnf-id").build()
142 PnfTopologyOperationOutput output =
143 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
145 assertEquals("500", output.getResponseCode());
146 assertEquals("test exception", output.getResponseMessage());
147 assertEquals("Y", output.getAckFinalIndicator());
151 public void should_complete_with_success_when_no_errors() throws Exception {
153 svcClient.mockHasGraph(true);
154 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
155 svcClient.mockExecute(svcResultProp);
157 PnfTopologyOperationInput input = pnfTopologyOperationInput()
158 .setSdncRequestHeader(sdncRequestHeader()
159 .setSvcRequestId("test-svc-request-id")
160 .setSvcAction(SvcAction.Assign).build()
162 .setRequestInformation(requestInformation()
163 .setRequestId("test-request-id")
164 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance).build()
166 .setServiceInformation(serviceInformationBuilder()
167 .setServiceInstanceId("test-service-instance-id").build()
169 .setPnfDetails(pnfDetailsBuilder()
170 .setPnfId("test-pnf-id").build()
173 PnfTopologyOperationOutput output =
174 exec(genericResourceApiProvider::pnfTopologyOperation, input, RpcResult::getResult);
176 assertEquals("200", output.getResponseCode());
177 assertEquals("OK", output.getResponseMessage());
178 assertEquals("Y", output.getAckFinalIndicator());
180 PnfTopologyOperationOutput expectedPnfTopologyOperationOutput = createExpectedOutput(svcResultProp,
182 assertEquals(expectedPnfTopologyOperationOutput, output);
185 private PnfTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
186 PnfTopologyOperationInput pnfTopologyOperationInput) {
188 pnfTopologyOperationOutput()
189 .setSvcRequestId(pnfTopologyOperationInput.getSdncRequestHeader().getSvcRequestId())
190 .setResponseCode(svcResultProp.get(svcClient.errorCode))
191 .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))
192 .setResponseMessage(svcResultProp.get(svcClient.errorMessage))
193 .setServiceResponseInformation(serviceResponseInformation()
194 .setInstanceId(pnfTopologyOperationInput.getServiceInformation().getServiceInstanceId())
195 .setObjectPath(svcResultProp.get(svcClient.serviceObjectPath)).build()
197 .setPnfResponseInformation(pnfResponseInformation()
198 .setInstanceId(pnfTopologyOperationInput.getPnfDetails().getPnfId())
199 .setObjectPath(svcResultProp.get(svcClient.pnfObjectPath)).build()