GenericResourceApiProvider unit tests part 3.
[sdnc/northbound.git] / generic-resource-api / provider / src / test / java / org / onap / sdnc / northbound / VnfTopologyOperationRPCTest.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.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.vnfInformationBuilder;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfTopologyOperationInput;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfTopologyOperationOutput;
18
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.TransactionChainClosedException;
28 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationInput;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VnfTopologyOperationOutput;
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;
33
34 @RunWith(MockitoJUnitRunner.class)
35 public class VnfTopologyOperationRPCTest extends GenericResourceApiProviderTest {
36
37     private static final String SVC_OPERATION = "vnf-topology-operation";
38
39     @Before
40     public void setUp() throws Exception {
41         super.setUp();
42         svcClient.setScvOperation(SVC_OPERATION);
43     }
44
45     @Test
46     public void should_fail_when_service_info_not_present() throws Exception {
47
48         VnfTopologyOperationInput input = build(vnfTopologyOperationInput());
49
50         VnfTopologyOperationOutput output =
51             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
52
53         assertEquals("404", output.getResponseCode());
54         assertEquals(NULL_OR_EMPTY_ERROR_PARAM, output.getResponseMessage());
55         assertEquals("Y", output.getAckFinalIndicator());
56     }
57
58
59     @Test
60     public void should_fail_when_invalid_vnf_id() throws Exception {
61
62         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
63             .setServiceInformation(build(serviceInformationBuilder().
64                 setServiceInstanceId("test-service-instance-id")
65             ))
66         );
67
68         VnfTopologyOperationOutput output =
69             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
70
71         assertEquals("404", output.getResponseCode());
72         assertEquals("invalid input, null or empty vnf-id", output.getResponseMessage());
73         assertEquals("Y", output.getAckFinalIndicator());
74     }
75
76
77     @Test
78     public void should_fail_when_client_execution_failed() throws Exception {
79
80         svcClient.mockHasGraph(true);
81         svcClient.mockExecute(new RuntimeException("test exception"));
82
83         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
84             .setServiceInformation(build(serviceInformationBuilder()
85                 .setServiceInstanceId("test-service-instance-id")
86             ))
87             .setVnfInformation(build(vnfInformationBuilder()
88                 .setVnfId("test-vnf-id")
89             ))
90         );
91
92         VnfTopologyOperationOutput output =
93             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
94
95         assertEquals("500", output.getResponseCode());
96         assertEquals("test exception", output.getResponseMessage());
97         assertEquals("Y", output.getAckFinalIndicator());
98     }
99
100     @Test
101     public void should_fail_when_client_has_no_graph() throws Exception {
102
103         svcClient.mockHasGraph(false);
104
105         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
106             .setServiceInformation(build(serviceInformationBuilder()
107                 .setServiceInstanceId("test-service-instance-id")
108             ))
109             .setVnfInformation(build(vnfInformationBuilder()
110                 .setVnfId("test-vnf-id")
111             ))
112         );
113
114         VnfTopologyOperationOutput output =
115             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
116
117         assertEquals("503", output.getResponseCode());
118         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
119         assertEquals("Y", output.getAckFinalIndicator());
120     }
121
122     @Test
123     public void should_fail_when_failed_to_update_mdsal() throws Exception {
124
125         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
126         svcClient.mockExecute(svcResultProp);
127         svcClient.mockHasGraph(true);
128         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
129         when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
130
131         DataBroker spyDataBroker = Mockito.spy(dataBroker);
132         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
133         genericResourceApiProvider.setDataBroker(spyDataBroker);
134
135         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
136             .setServiceInformation(build(serviceInformationBuilder()
137                 .setServiceInstanceId("test-service-instance-id")
138             ))
139             .setVnfInformation(build(vnfInformationBuilder()
140                 .setVnfId("test-vnf-id")
141             ))
142         );
143
144         VnfTopologyOperationOutput output =
145             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
146
147         assertEquals("500", output.getResponseCode());
148         assertEquals("test exception", output.getResponseMessage());
149         assertEquals("Y", output.getAckFinalIndicator());
150     }
151
152     @Test
153     public void should_complete_with_success_when_no_errors() throws Exception {
154
155         svcClient.mockHasGraph(true);
156         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
157         svcClient.mockExecute(svcResultProp);
158
159         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
160             .setSdncRequestHeader(build(sdncRequestHeader()
161                 .setSvcRequestId("test-svc-request-id")
162                 .setSvcAction(SvcAction.Assign)
163             ))
164             .setRequestInformation(build(requestInformation()
165                 .setRequestId("test-request-id")
166                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
167             ))
168             .setServiceInformation(build(serviceInformationBuilder()
169                 .setServiceInstanceId("test-service-instance-id")
170             ))
171             .setVnfInformation(build(vnfInformationBuilder()
172                 .setVnfId("test-vnf-id")
173             ))
174         );
175
176         VnfTopologyOperationOutput output =
177             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
178
179         assertEquals("200", output.getResponseCode());
180         assertEquals("OK", output.getResponseMessage());
181         assertEquals("Y", output.getAckFinalIndicator());
182
183         VnfTopologyOperationOutput expectedVnfTopologyOperationOutput = createExpectedVTOO(svcResultProp,
184             input);
185         assertEquals(expectedVnfTopologyOperationOutput, output);
186     }
187
188     private VnfTopologyOperationOutput createExpectedVTOO(PropBuilder expectedSvcResultProp,
189         VnfTopologyOperationInput vnfTopologyOperationInput) {
190         return build(
191             vnfTopologyOperationOutput()
192                 .setSvcRequestId(vnfTopologyOperationInput.getSdncRequestHeader().getSvcRequestId())
193                 .setResponseCode(expectedSvcResultProp.get(svcClient.errorCode))
194                 .setAckFinalIndicator(expectedSvcResultProp.get(svcClient.ackFinal))
195                 .setResponseMessage(expectedSvcResultProp.get(svcClient.errorMessage))
196                 .setServiceResponseInformation(build(serviceResponseInformation()
197                     .setInstanceId(vnfTopologyOperationInput.getServiceInformation().getServiceInstanceId())
198                     .setObjectPath(expectedSvcResultProp.get("vnf-object-path"))
199                 ))
200         );
201     }
202 }