d3513f7000914f0a2fa8e3cd6cf79435c28a8ec1
[sdnc/northbound.git] / generic-resource-api / provider / src / test / java / org / onap / sdnc / northbound / ContrailRouteTopologyOperationRPCTest.java
1 package org.onap.sdnc.northbound;
2
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;
17
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;
37
38 @RunWith(MockitoJUnitRunner.class)
39 public class ContrailRouteTopologyOperationRPCTest extends GenericResourceApiProviderTest {
40
41     private static final String SVC_OPERATION = "contrail-route-topology-operation";
42
43
44     @Before
45     public void setUp() throws Exception {
46         super.setUp();
47         svcClient.setScvOperation(SVC_OPERATION);
48     }
49
50     @Test
51     public void should_fail_when_service_instance_id_not_present() throws Exception {
52
53         ContrailRouteTopologyOperationInput input = build(contrailRouteTopologyOperationInput());
54
55         ContrailRouteTopologyOperationOutput output =
56             exec(genericResourceApiProvider::contrailRouteTopologyOperation, input, RpcResult::getResult);
57
58         assertEquals("404", output.getResponseCode());
59         assertEquals(NULL_OR_EMPTY_ERROR_PARAM, output.getResponseMessage());
60         assertEquals("Y", output.getAckFinalIndicator());
61     }
62
63
64     @Test
65     public void should_fail_when_invalid_service_data() throws Exception {
66
67         ContrailRouteTopologyOperationInput input = build(contrailRouteTopologyOperationInput()
68             .setServiceInformation(build(serviceInformationBuilder()
69                 .setServiceInstanceId("test-service-instance-id")
70             ))
71         );
72
73         ContrailRouteTopologyOperationOutput output =
74             exec(genericResourceApiProvider::contrailRouteTopologyOperation, input, RpcResult::getResult);
75
76         assertEquals("404", output.getResponseCode());
77         assertEquals(INVALID_INPUT_ERROR_MESSAGE, output.getResponseMessage());
78         assertEquals("Y", output.getAckFinalIndicator());
79     }
80
81
82     @Test
83     public void should_fail_when_client_execution_failed() throws Exception {
84
85         svcClient.mockHasGraph(true);
86         svcClient.mockExecute(new RuntimeException("test exception"));
87
88         ContrailRouteTopologyOperationInput input = build(contrailRouteTopologyOperationInput()
89             .setServiceInformation(build(serviceInformationBuilder()
90                 .setServiceInstanceId("test-service-instance-id")
91             ))
92         );
93
94         persistServiceInDataBroker(input);
95
96         ContrailRouteTopologyOperationOutput output =
97             exec(genericResourceApiProvider::contrailRouteTopologyOperation, input, RpcResult::getResult);
98
99         assertEquals("500", output.getResponseCode());
100         assertEquals("test exception", output.getResponseMessage());
101         assertEquals("Y", output.getAckFinalIndicator());
102     }
103
104     @Test
105     public void should_fail_when_client_has_no_graph() throws Exception {
106
107         svcClient.mockHasGraph(false);
108
109         ContrailRouteTopologyOperationInput input = build(contrailRouteTopologyOperationInput()
110             .setServiceInformation(build(serviceInformationBuilder()
111                 .setServiceInstanceId("test-service-instance-id")
112             ))
113         );
114
115         persistServiceInDataBroker(input);
116
117         ContrailRouteTopologyOperationOutput output =
118             exec(genericResourceApiProvider::contrailRouteTopologyOperation, input, RpcResult::getResult);
119
120         assertEquals("503", output.getResponseCode());
121         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
122         assertEquals("Y", output.getAckFinalIndicator());
123     }
124
125     @Test
126     public void should_fail_when_failed_to_update_mdsal() throws Exception {
127
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"));
133
134         DataBroker spyDataBroker = Mockito.spy(dataBroker);
135         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
136         genericResourceApiProvider.setDataBroker(spyDataBroker);
137
138         ContrailRouteTopologyOperationInput input = build(contrailRouteTopologyOperationInput()
139             .setServiceInformation(build(serviceInformationBuilder()
140                 .setServiceInstanceId("test-service-instance-id")
141             ))
142         );
143
144         persistServiceInDataBroker(input);
145
146         ContrailRouteTopologyOperationOutput output =
147             exec(genericResourceApiProvider::contrailRouteTopologyOperation, input, RpcResult::getResult);
148
149         assertEquals("500", output.getResponseCode());
150         assertEquals("test exception", output.getResponseMessage());
151         assertEquals("Y", output.getAckFinalIndicator());
152     }
153
154
155     private Service persistServiceInDataBroker(ContrailRouteTopologyOperationInput input) throws Exception {
156
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())
168                 ))
169             ))
170         );
171         db.write(true, service, LogicalDatastoreType.CONFIGURATION);
172         return service;
173     }
174 }