GenericResourceApiProvider unit tests part 2.
[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         VnfTopologyOperationOutput output =
68             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
69
70         assertEquals("404", output.getResponseCode());
71         assertEquals("invalid input, null or empty vnf-id", output.getResponseMessage());
72         assertEquals("Y", output.getAckFinalIndicator());
73     }
74
75
76     @Test
77     public void should_fail_when_client_execution_failed() throws Exception {
78
79         svcClient.mockHasGraph(true);
80         svcClient.mockExecute(new RuntimeException("test exception"));
81
82         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
83             .setServiceInformation(build(serviceInformationBuilder()
84                 .setServiceInstanceId("test-service-instance-id")))
85             .setVnfInformation(build(vnfInformationBuilder()
86                 .setVnfId("test-vnf-id")))
87         );
88
89         VnfTopologyOperationOutput output =
90             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
91
92         assertEquals("500", output.getResponseCode());
93         assertEquals("test exception", output.getResponseMessage());
94         assertEquals("Y", output.getAckFinalIndicator());
95     }
96
97     @Test
98     public void should_fail_when_client_has_no_graph() throws Exception {
99
100         svcClient.mockHasGraph(false);
101
102         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
103             .setServiceInformation(build(serviceInformationBuilder()
104                 .setServiceInstanceId("test-service-instance-id")))
105             .setVnfInformation(build(vnfInformationBuilder()
106                 .setVnfId("test-vnf-id")))
107         );
108
109         VnfTopologyOperationOutput output =
110             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
111
112         assertEquals("503", output.getResponseCode());
113         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
114         assertEquals("Y", output.getAckFinalIndicator());
115     }
116
117     @Test
118     public void should_fail_when_failed_to_update_mdsal() throws Exception {
119
120         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
121         svcClient.mockExecute(svcResultProp);
122         svcClient.mockHasGraph(true);
123         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
124         when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
125
126         DataBroker spyDataBroker = Mockito.spy(dataBroker);
127         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
128         genericResourceApiProvider.setDataBroker(spyDataBroker);
129
130         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
131             .setServiceInformation(build(serviceInformationBuilder()
132                 .setServiceInstanceId("test-service-instance-id")))
133             .setVnfInformation(build(vnfInformationBuilder()
134                 .setVnfId("test-vnf-id")))
135         );
136
137         VnfTopologyOperationOutput output =
138             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
139
140         assertEquals("500", output.getResponseCode());
141         assertEquals("test exception", output.getResponseMessage());
142         assertEquals("Y", output.getAckFinalIndicator());
143     }
144
145     @Test
146     public void should_complete_with_success_when_no_errors() throws Exception {
147
148         svcClient.mockHasGraph(true);
149         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
150         svcClient.mockExecute(svcResultProp);
151
152         VnfTopologyOperationInput input = build(vnfTopologyOperationInput()
153             .setSdncRequestHeader(build(sdncRequestHeader()
154                 .setSvcRequestId("test-svc-request-id")
155                 .setSvcAction(SvcAction.Assign)
156             ))
157             .setRequestInformation(build(requestInformation()
158                 .setRequestId("test-request-id")
159                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
160             ))
161             .setServiceInformation(build(serviceInformationBuilder()
162                 .setServiceInstanceId("test-service-instance-id")))
163             .setVnfInformation(build(vnfInformationBuilder()
164                 .setVnfId("test-vnf-id")))
165
166         );
167
168         VnfTopologyOperationOutput output =
169             exec(genericResourceApiProvider::vnfTopologyOperation, input, RpcResult::getResult);
170
171         assertEquals("200", output.getResponseCode());
172         assertEquals("OK", output.getResponseMessage());
173         assertEquals("Y", output.getAckFinalIndicator());
174
175         VnfTopologyOperationOutput expectedVnfTopologyOperationOutput = createExpectedVTOO(svcResultProp,
176             input);
177         assertEquals(expectedVnfTopologyOperationOutput, output);
178     }
179
180     private VnfTopologyOperationOutput createExpectedVTOO(PropBuilder expectedSvcResultProp,
181         VnfTopologyOperationInput vnfTopologyOperationInput) {
182         return build(
183             vnfTopologyOperationOutput()
184                 .setSvcRequestId(vnfTopologyOperationInput.getSdncRequestHeader().getSvcRequestId())
185                 .setResponseCode(expectedSvcResultProp.get(svcClient.errorCode))
186                 .setAckFinalIndicator(expectedSvcResultProp.get(svcClient.ackFinal))
187                 .setResponseMessage(expectedSvcResultProp.get(svcClient.errorMessage))
188                 .setServiceResponseInformation(build(serviceResponseInformation()
189                     .setInstanceId(vnfTopologyOperationInput.getServiceInformation().getServiceInstanceId())
190                     .setObjectPath(expectedSvcResultProp.get("vnf-object-path"))
191                 ))
192         );
193     }
194 }