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