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