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.INVALID_INPUT_ERROR_MESSAGE;
8 import static org.onap.sdnc.northbound.GenericResourceApiProvider.NO_SERVICE_LOGIC_ACTIVE;
9 import static org.onap.sdnc.northbound.GenericResourceApiProvider.NULL_OR_EMPTY_ERROR_PARAM;
10 import static org.onap.sdnc.northbound.util.MDSALUtil.build;
11 import static org.onap.sdnc.northbound.util.MDSALUtil.exec;
12 import static org.onap.sdnc.northbound.util.MDSALUtil.requestInformation;
13 import static org.onap.sdnc.northbound.util.MDSALUtil.sdncRequestHeader;
14 import static org.onap.sdnc.northbound.util.MDSALUtil.securityZoneResponseInformation;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.securityZoneTopologyOperationInput;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.securityZoneTopologyOperationOutput;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.service;
18 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceData;
19 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceInformationBuilder;
20 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceLevelOperStatus;
21 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceResponseInformation;
22 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceStatus;
24 import java.time.Instant;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.mockito.Mockito;
30 import org.mockito.runners.MockitoJUnitRunner;
31 import org.onap.sdnc.northbound.util.PropBuilder;
32 import org.opendaylight.mdsal.binding.api.DataBroker;
33 import org.opendaylight.mdsal.binding.api.TransactionChainClosedException;
34 import org.opendaylight.mdsal.binding.api.WriteTransaction;
35 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
36 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.OperStatusData.LastAction;
37 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.OperStatusData.LastOrderStatus;
38 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.OperStatusData.LastRpcAction;
39 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.OperStatusData.OrderStatus;
40 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.SecurityZoneTopologyOperationInput;
41 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.SecurityZoneTopologyOperationOutput;
42 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
43 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
44 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.data.ServiceData;
45 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.information.ServiceInformation;
46 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.Service;
47 import org.opendaylight.yangtools.yang.common.RpcResult;
49 @RunWith(MockitoJUnitRunner.class)
50 public class SecurityZoneTopologyOperationRPCTest extends GenericResourceApiProviderTest {
53 private static final String SVC_OPERATION = "security-zone-topology-operation";
57 public void setUp() throws Exception {
59 svcClient.setScvOperation(SVC_OPERATION);
63 public void should_fail_when_service_instance_id_not_present() throws Exception {
65 SecurityZoneTopologyOperationInput input = build(securityZoneTopologyOperationInput());
67 SecurityZoneTopologyOperationOutput output =
68 exec(genericResourceApiProvider::securityZoneTopologyOperation, input, RpcResult::getResult);
70 assertEquals("404", output.getResponseCode());
71 assertEquals(NULL_OR_EMPTY_ERROR_PARAM, output.getResponseMessage());
72 assertEquals("Y", output.getAckFinalIndicator());
77 public void should_fail_when_invalid_service_data() throws Exception {
79 SecurityZoneTopologyOperationInput input = build(securityZoneTopologyOperationInput()
80 .setSdncRequestHeader(build(sdncRequestHeader()
81 .setSvcRequestId("test-svc-request-id")
82 .setSvcAction(SvcAction.Assign)
84 .setServiceInformation(build(serviceInformationBuilder()
85 .setServiceInstanceId("test-service-instance-id")
89 SecurityZoneTopologyOperationOutput output =
90 exec(genericResourceApiProvider::securityZoneTopologyOperation, input, RpcResult::getResult);
92 assertEquals("404", output.getResponseCode());
93 assertEquals(INVALID_INPUT_ERROR_MESSAGE, output.getResponseMessage());
94 assertEquals("Y", output.getAckFinalIndicator());
99 public void should_fail_when_client_execution_failed() throws Exception {
101 svcClient.mockHasGraph(true);
102 svcClient.mockExecute(new RuntimeException("test exception"));
104 SecurityZoneTopologyOperationInput input = build(securityZoneTopologyOperationInput()
105 .setSdncRequestHeader(build(sdncRequestHeader()
106 .setSvcRequestId("test-svc-request-id")
107 .setSvcAction(SvcAction.Assign)
109 .setServiceInformation(build(serviceInformationBuilder()
110 .setServiceInstanceId("test-service-instance-id")
114 persistServiceInDataBroker(input);
116 SecurityZoneTopologyOperationOutput output =
117 exec(genericResourceApiProvider::securityZoneTopologyOperation, input, RpcResult::getResult);
119 assertEquals("500", output.getResponseCode());
120 assertEquals("test exception", output.getResponseMessage());
121 assertEquals("Y", output.getAckFinalIndicator());
125 public void should_fail_when_client_has_no_graph() throws Exception {
127 svcClient.mockHasGraph(false);
129 SecurityZoneTopologyOperationInput input = build(securityZoneTopologyOperationInput()
130 .setSdncRequestHeader(build(sdncRequestHeader()
131 .setSvcRequestId("test-svc-request-id")
132 .setSvcAction(SvcAction.Assign)
134 .setServiceInformation(build(serviceInformationBuilder()
135 .setServiceInstanceId("test-service-instance-id")
139 persistServiceInDataBroker(input);
141 SecurityZoneTopologyOperationOutput output =
142 exec(genericResourceApiProvider::securityZoneTopologyOperation, input, RpcResult::getResult);
144 assertEquals("503", output.getResponseCode());
145 assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
146 assertEquals("Y", output.getAckFinalIndicator());
150 public void should_fail_when_failed_to_update_mdsal() throws Exception {
152 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
153 svcClient.mockExecute(svcResultProp);
154 svcClient.mockHasGraph(true);
155 WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
156 when(mockWriteTransaction.commit()).thenThrow(new TransactionChainClosedException("test exception"));
158 DataBroker spyDataBroker = Mockito.spy(dataBroker);
159 when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
160 genericResourceApiProvider.setDataBroker(spyDataBroker);
162 SecurityZoneTopologyOperationInput input = build(securityZoneTopologyOperationInput()
163 .setSdncRequestHeader(build(sdncRequestHeader()
164 .setSvcRequestId("test-svc-request-id")
165 .setSvcAction(SvcAction.Assign)
167 .setServiceInformation(build(serviceInformationBuilder()
168 .setServiceInstanceId("test-service-instance-id")
172 persistServiceInDataBroker(input);
174 SecurityZoneTopologyOperationOutput output =
175 exec(genericResourceApiProvider::securityZoneTopologyOperation, input, RpcResult::getResult);
177 assertEquals("500", output.getResponseCode());
178 assertEquals("test exception", output.getResponseMessage());
179 assertEquals("Y", output.getAckFinalIndicator());
183 public void should_success_when_no_errors_encountered() throws Exception {
185 svcClient.mockHasGraph(true);
186 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
187 svcResultProp.set("security-zone-object-path", "securityZoneObjectPath: XYZ");
188 svcClient.mockExecute(svcResultProp);
190 SecurityZoneTopologyOperationInput input = build(securityZoneTopologyOperationInput()
191 .setSdncRequestHeader(build(sdncRequestHeader()
192 .setSvcRequestId("test-svc-request-id")
193 .setSvcAction(SvcAction.Assign)
195 .setRequestInformation(build(requestInformation()
196 .setRequestId("test-request-id")
197 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
199 .setServiceInformation(build(serviceInformationBuilder()
200 .setServiceInstanceId("test-service-instance-id")
204 Service service = persistServiceInDataBroker(input);
206 SecurityZoneTopologyOperationOutput output =
207 exec(genericResourceApiProvider::securityZoneTopologyOperation, input, RpcResult::getResult);
209 assertEquals("200", output.getResponseCode());
210 assertEquals("OK", output.getResponseMessage());
211 assertEquals("Y", output.getAckFinalIndicator());
213 SecurityZoneTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
214 assertEquals(expectedOutput, output);
216 Service actualService = db
217 .read(input.getServiceInformation().getServiceInstanceId(), LogicalDatastoreType.CONFIGURATION);
219 Service expectedService = createExpectedService(input, service.getServiceData());
220 assertEquals(expectedService, actualService);
223 private Service persistServiceInDataBroker(SecurityZoneTopologyOperationInput input) throws Exception {
225 Service service = build(service()
226 .setServiceInstanceId(input.getServiceInformation().getServiceInstanceId())
227 .setServiceData(build(serviceData()
228 .setServiceLevelOperStatus(build(serviceLevelOperStatus()
229 .setOrderStatus(OrderStatus.Created)
230 .setModifyTimestamp(Instant.now().toString())
231 .setLastSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
232 .setLastRpcAction(LastRpcAction.Activate)
233 .setLastOrderStatus(LastOrderStatus.PendingAssignment)
234 .setLastAction(LastAction.ActivateNetworkInstance)
235 .setCreateTimestamp(Instant.now().toString())
239 db.write(true, service, LogicalDatastoreType.CONFIGURATION);
243 private SecurityZoneTopologyOperationOutput createExpectedOutput(PropBuilder propBuilder,
244 SecurityZoneTopologyOperationInput input) {
246 return build(securityZoneTopologyOperationOutput()
247 .setSecurityZoneResponseInformation(build(securityZoneResponseInformation()
248 .setObjectPath(propBuilder.get("security-zone-object-path"))))
249 .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
250 .setResponseCode(propBuilder.get(svcClient.errorCode))
251 .setAckFinalIndicator(propBuilder.get(svcClient.ackFinal))
252 .setResponseMessage(propBuilder.get(svcClient.errorMessage))
253 .setServiceResponseInformation(build(serviceResponseInformation()
254 .setInstanceId(input.getServiceInformation().getServiceInstanceId())
255 .setObjectPath(propBuilder.get(svcClient.serviceObjectPath))
260 private Service createExpectedService(
261 SecurityZoneTopologyOperationInput expectedInput, ServiceData expectedServiceData) {
263 ServiceInformation expectedServiceInformation = expectedInput.getServiceInformation();
265 return build(service()
266 .setServiceInstanceId(expectedServiceInformation.getServiceInstanceId())
267 .setServiceData(build(serviceData()))
268 .setServiceData(expectedServiceData)
269 .setServiceStatus(build(serviceStatus()))