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.contrailRouteTopologyOperationInput;
12 import static org.onap.sdnc.northbound.util.MDSALUtil.exec;
13 import static org.onap.sdnc.northbound.util.MDSALUtil.service;
14 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceData;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceInformationBuilder;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.serviceLevelOperStatus;
18 import java.time.Instant;
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.controller.md.sal.binding.api.DataBroker;
26 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
27 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
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.ContrailRouteTopologyOperationInput;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.ContrailRouteTopologyOperationOutput;
31 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.OperStatusData.LastAction;
32 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.OperStatusData.LastOrderStatus;
33 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.OperStatusData.LastRpcAction;
34 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.OperStatusData.OrderStatus;
35 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.service.model.infrastructure.Service;
36 import org.opendaylight.yangtools.yang.common.RpcResult;
38 @RunWith(MockitoJUnitRunner.class)
39 public class ContrailRouteTopologyOperationRPCTest extends GenericResourceApiProviderTest {
41 private static final String SVC_OPERATION = "contrail-route-topology-operation";
45 public void setUp() throws Exception {
47 svcClient.setScvOperation(SVC_OPERATION);
51 public void should_fail_when_service_instance_id_not_present() throws Exception {
53 ContrailRouteTopologyOperationInput input = build(contrailRouteTopologyOperationInput());
55 ContrailRouteTopologyOperationOutput output =
56 exec(genericResourceApiProvider::contrailRouteTopologyOperation, input, RpcResult::getResult);
58 assertEquals("404", output.getResponseCode());
59 assertEquals(NULL_OR_EMPTY_ERROR_PARAM, output.getResponseMessage());
60 assertEquals("Y", output.getAckFinalIndicator());
65 public void should_fail_when_invalid_service_data() throws Exception {
67 ContrailRouteTopologyOperationInput input = build(contrailRouteTopologyOperationInput()
68 .setServiceInformation(build(serviceInformationBuilder()
69 .setServiceInstanceId("test-service-instance-id")
73 ContrailRouteTopologyOperationOutput output =
74 exec(genericResourceApiProvider::contrailRouteTopologyOperation, input, RpcResult::getResult);
76 assertEquals("404", output.getResponseCode());
77 assertEquals(INVALID_INPUT_ERROR_MESSAGE, output.getResponseMessage());
78 assertEquals("Y", output.getAckFinalIndicator());
83 public void should_fail_when_client_execution_failed() throws Exception {
85 svcClient.mockHasGraph(true);
86 svcClient.mockExecute(new RuntimeException("test exception"));
88 ContrailRouteTopologyOperationInput input = build(contrailRouteTopologyOperationInput()
89 .setServiceInformation(build(serviceInformationBuilder()
90 .setServiceInstanceId("test-service-instance-id")
94 persistServiceInDataBroker(input);
96 ContrailRouteTopologyOperationOutput output =
97 exec(genericResourceApiProvider::contrailRouteTopologyOperation, input, RpcResult::getResult);
99 assertEquals("500", output.getResponseCode());
100 assertEquals("test exception", output.getResponseMessage());
101 assertEquals("Y", output.getAckFinalIndicator());
105 public void should_fail_when_client_has_no_graph() throws Exception {
107 svcClient.mockHasGraph(false);
109 ContrailRouteTopologyOperationInput input = build(contrailRouteTopologyOperationInput()
110 .setServiceInformation(build(serviceInformationBuilder()
111 .setServiceInstanceId("test-service-instance-id")
115 persistServiceInDataBroker(input);
117 ContrailRouteTopologyOperationOutput output =
118 exec(genericResourceApiProvider::contrailRouteTopologyOperation, input, RpcResult::getResult);
120 assertEquals("503", output.getResponseCode());
121 assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
122 assertEquals("Y", output.getAckFinalIndicator());
126 public void should_fail_when_failed_to_update_mdsal() throws Exception {
128 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
129 svcClient.mockExecute(svcResultProp);
130 svcClient.mockHasGraph(true);
131 WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
132 when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
134 DataBroker spyDataBroker = Mockito.spy(dataBroker);
135 when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
136 genericResourceApiProvider.setDataBroker(spyDataBroker);
138 ContrailRouteTopologyOperationInput input = build(contrailRouteTopologyOperationInput()
139 .setServiceInformation(build(serviceInformationBuilder()
140 .setServiceInstanceId("test-service-instance-id")
144 persistServiceInDataBroker(input);
146 ContrailRouteTopologyOperationOutput output =
147 exec(genericResourceApiProvider::contrailRouteTopologyOperation, input, RpcResult::getResult);
149 assertEquals("500", output.getResponseCode());
150 assertEquals("test exception", output.getResponseMessage());
151 assertEquals("Y", output.getAckFinalIndicator());
155 private Service persistServiceInDataBroker(ContrailRouteTopologyOperationInput input) throws Exception {
157 Service service = build(service()
158 .setServiceInstanceId(input.getServiceInformation().getServiceInstanceId())
159 .setServiceData(build(serviceData()
160 .setServiceLevelOperStatus(build(serviceLevelOperStatus()
161 .setOrderStatus(OrderStatus.Created)
162 .setModifyTimestamp(Instant.now().toString())
163 .setLastSvcRequestId("svc-request-id: abc")
164 .setLastRpcAction(LastRpcAction.Activate)
165 .setLastOrderStatus(LastOrderStatus.PendingAssignment)
166 .setLastAction(LastAction.ActivateNetworkInstance)
167 .setCreateTimestamp(Instant.now().toString())
171 db.write(true, service, LogicalDatastoreType.CONFIGURATION);