Generic resource API catch up
[sdnc/northbound.git] / generic-resource-api / provider / src / test / java / org / onap / sdnc / northbound / VfModuleTopologyOperationRPCTest.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.vnfResponseInformation;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleResponseInformation;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleInformationBuilder;
18 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleTopologyOperationInput;
19 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleTopologyOperationOutput;
20 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfInformationBuilder;
21
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 import org.mockito.Mockito;
26 import org.mockito.runners.MockitoJUnitRunner;
27 import org.onap.sdnc.northbound.util.PropBuilder;
28 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
29 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
30 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainClosedException;
31 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationInput;
32 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.VfModuleTopologyOperationOutput;
33 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
34 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
35 import org.opendaylight.yangtools.yang.common.RpcResult;
36
37 @RunWith(MockitoJUnitRunner.class)
38 public class VfModuleTopologyOperationRPCTest extends GenericResourceApiProviderTest {
39
40     private static final String SVC_OPERATION = "vf-module-topology-operation";
41
42     @Before
43     public void setUp() throws Exception {
44         super.setUp();
45         svcClient.setScvOperation(SVC_OPERATION);
46     }
47
48     @Test
49     public void should_fail_when_service_info_not_present() throws Exception {
50
51         VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput());
52
53         VfModuleTopologyOperationOutput output =
54             exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
55
56         assertEquals("403", output.getResponseCode());
57         assertEquals(NULL_OR_EMPTY_ERROR_PARAM, output.getResponseMessage());
58         assertEquals("Y", output.getAckFinalIndicator());
59     }
60
61
62     @Test
63     public void should_fail_when_invalid_vnf_id() throws Exception {
64
65         VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
66             .setServiceInformation(build(serviceInformationBuilder()
67                 .setServiceInstanceId("test-service-instance-id")
68             ))
69         );
70
71         VfModuleTopologyOperationOutput output =
72             exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
73
74         assertEquals("403", output.getResponseCode());
75         assertEquals("invalid input, null or empty vnf-id", output.getResponseMessage());
76         assertEquals("Y", output.getAckFinalIndicator());
77     }
78
79     @Test
80     public void should_fail_when_invalid_vf_module_id() throws Exception {
81
82         VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
83             .setServiceInformation(build(serviceInformationBuilder()
84                 .setServiceInstanceId("test-service-instance-id")
85             ))
86             .setVnfInformation(build(vnfInformationBuilder()
87                 .setVnfId("test-vnf-id")))
88         );
89
90         VfModuleTopologyOperationOutput output =
91             exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
92
93         assertEquals("403", output.getResponseCode());
94         assertEquals("invalid input, vf-module-id is null or empty", output.getResponseMessage());
95         assertEquals("Y", output.getAckFinalIndicator());
96     }
97
98
99     @Test
100     public void should_fail_when_client_execution_failed() throws Exception {
101
102         svcClient.mockHasGraph(true);
103         svcClient.mockExecute(new RuntimeException("test exception"));
104
105         VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
106             .setServiceInformation(build(serviceInformationBuilder()
107                 .setServiceInstanceId("test-service-instance-id")
108             ))
109             .setVnfInformation(build(vnfInformationBuilder()
110                 .setVnfId("test-vnf-id")
111             ))
112             .setVfModuleInformation(build(vfModuleInformationBuilder()
113                 .setVfModuleId("test-vf-module-id")
114             ))
115         );
116
117         VfModuleTopologyOperationOutput output =
118             exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
119
120         assertEquals("500", output.getResponseCode());
121         assertEquals("test exception", output.getResponseMessage());
122         assertEquals("Y", output.getAckFinalIndicator());
123     }
124
125     @Test
126     public void should_fail_when_client_has_no_graph() throws Exception {
127
128         svcClient.mockHasGraph(false);
129
130         VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
131             .setServiceInformation(build(serviceInformationBuilder()
132                 .setServiceInstanceId("test-service-instance-id")
133             ))
134             .setVnfInformation(build(vnfInformationBuilder()
135                 .setVnfId("test-vnf-id")
136             ))
137             .setVfModuleInformation(build(vfModuleInformationBuilder()
138                 .setVfModuleId("test-vf-module-id")
139             ))
140         );
141
142         VfModuleTopologyOperationOutput output =
143             exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
144
145         assertEquals("503", output.getResponseCode());
146         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
147         assertEquals("Y", output.getAckFinalIndicator());
148     }
149
150     @Test
151     public void should_fail_when_failed_to_update_mdsal() throws Exception {
152
153         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
154         svcClient.mockExecute(svcResultProp);
155         svcClient.mockHasGraph(true);
156         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
157         when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
158
159         DataBroker spyDataBroker = Mockito.spy(dataBroker);
160         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
161         genericResourceApiProvider.setDataBroker(spyDataBroker);
162
163         VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
164             .setServiceInformation(build(serviceInformationBuilder()
165                 .setServiceInstanceId("test-service-instance-id")
166             ))
167             .setVnfInformation(build(vnfInformationBuilder()
168                 .setVnfId("test-vnf-id")
169             ))
170             .setVfModuleInformation(build(vfModuleInformationBuilder()
171                 .setVfModuleId("test-vf-module-id")
172             ))
173         );
174
175         VfModuleTopologyOperationOutput output =
176             exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
177
178         assertEquals("500", output.getResponseCode());
179         assertEquals("test exception", output.getResponseMessage());
180         assertEquals("Y", output.getAckFinalIndicator());
181     }
182
183     @Test
184     public void should_complete_with_success_when_no_errors() throws Exception {
185
186         svcClient.mockHasGraph(true);
187         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
188         svcClient.mockExecute(svcResultProp);
189
190         VfModuleTopologyOperationInput input = build(vfModuleTopologyOperationInput()
191             .setSdncRequestHeader(build(sdncRequestHeader()
192                 .setSvcRequestId("test-svc-request-id")
193                 .setSvcAction(SvcAction.Assign)
194             ))
195             .setRequestInformation(build(requestInformation()
196                 .setRequestId("test-request-id")
197                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
198             ))
199             .setServiceInformation(build(serviceInformationBuilder()
200                 .setServiceInstanceId("test-service-instance-id")
201             ))
202             .setVnfInformation(build(vnfInformationBuilder()
203                 .setVnfId("test-vnf-id")
204             ))
205             .setVfModuleInformation(build(vfModuleInformationBuilder()
206                 .setVfModuleId("test-vf-module-id")
207             ))
208         );
209
210         VfModuleTopologyOperationOutput output =
211             exec(genericResourceApiProvider::vfModuleTopologyOperation, input, RpcResult::getResult);
212
213         assertEquals("200", output.getResponseCode());
214         assertEquals("OK", output.getResponseMessage());
215         assertEquals("Y", output.getAckFinalIndicator());
216
217         VfModuleTopologyOperationOutput expectedOutput = createExpectedVMTOO(svcResultProp, input);
218         assertEquals(expectedOutput, output);
219     }
220
221     private VfModuleTopologyOperationOutput createExpectedVMTOO(PropBuilder propBuilder,
222         VfModuleTopologyOperationInput input) {
223         return build(vfModuleTopologyOperationOutput()
224                 .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
225                 .setResponseCode(propBuilder.get(svcClient.errorCode))
226                 .setAckFinalIndicator(propBuilder.get(svcClient.ackFinal))
227                 .setResponseMessage(propBuilder.get(svcClient.errorMessage))
228                 .setServiceResponseInformation(build(serviceResponseInformation()
229                     .setInstanceId(input.getServiceInformation().getServiceInstanceId())
230                     .setObjectPath(propBuilder.get(svcClient.serviceObjectPath)))
231                 )
232                 .setVnfResponseInformation(build(vnfResponseInformation()
233                         .setInstanceId(input.getVnfInformation().getVnfId())
234                         .setObjectPath(propBuilder.get(svcClient.vnfObjectPath)))
235                     )
236                 .setVfModuleResponseInformation(build(vfModuleResponseInformation()
237                         .setInstanceId(input.getVfModuleInformation().getVfModuleId())
238                         .setObjectPath(propBuilder.get(svcClient.vfModuleObjectPath)))
239                     )
240         );
241     }
242 }