863563f2005d632ea23b0acec0f3336c58e43167
[sdnc/northbound.git] / generic-resource-api / provider / src / test / java / org / onap / sdnc / northbound / PreloadVnfTopologyOperationRPCTest.java
1 package org.onap.sdnc.northbound;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.mockito.Mockito.lenient;
5 import static org.mockito.Mockito.mock;
6 import static org.mockito.Mockito.when;
7 import static org.onap.sdnc.northbound.GenericResourceApiProvider.APP_NAME;
8 import static org.onap.sdnc.northbound.GenericResourceApiProvider.NO_SERVICE_LOGIC_ACTIVE;
9 import static org.onap.sdnc.northbound.util.MDSALUtil.exec;
10 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadVfModuleTopologyInformationBuilder;
11 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadVfModuleTopologyOperationInput;
12 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadVfModuleTopologyOperationOutput;
13 import static org.onap.sdnc.northbound.util.MDSALUtil.requestInformation;
14 import static org.onap.sdnc.northbound.util.MDSALUtil.sdncRequestHeader;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleTopologyBuilder;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleTopologyIdentifierBuilder;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfTopologyIdentifierStructureBuilder;
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.junit.MockitoJUnitRunner;
24 import org.onap.sdnc.northbound.util.PropBuilder;
25 import org.opendaylight.mdsal.binding.api.DataBroker;
26 import org.opendaylight.mdsal.binding.api.TransactionChainClosedException;
27 import org.opendaylight.mdsal.binding.api.WriteTransaction;
28 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVfModuleTopologyOperationInput;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVfModuleTopologyOperationOutput;
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.Silent.class)
35 public class PreloadVnfTopologyOperationRPCTest extends GenericResourceApiProviderTest {
36
37     private static final String SVC_OPERATION = "preload-vf-module-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_invalid_vnf_topology() throws Exception {
47
48         PreloadVfModuleTopologyOperationInput input = preloadVfModuleTopologyOperationInput().build();
49
50         PreloadVfModuleTopologyOperationOutput output =
51             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
52
53         assertEquals("403", output.getResponseCode());
54         assertEquals("invalid input, null or empty preload-vf-module-topology-information.vf-module-topology.vf-module-topology-identifier.vf-module-name", output.getResponseMessage());
55         assertEquals("Y", output.getAckFinalIndicator());
56     }
57
58
59     @Test
60     public void should_fail_when_invalid_preload_data() throws Exception {
61
62         PreloadVfModuleTopologyOperationInput input = preloadVfModuleTopologyOperationInput()
63             .setPreloadVfModuleTopologyInformation(preloadVfModuleTopologyInformationBuilder()
64                 .setVnfTopologyIdentifierStructure(vnfTopologyIdentifierStructureBuilder()
65                     .setVnfName("test-vnf-name").build()
66                 ).build()
67             ).build();
68
69         PreloadVfModuleTopologyOperationOutput output =
70             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
71
72         assertEquals("403", output.getResponseCode());
73         assertEquals("invalid input, null or empty preload-vf-module-topology-information.vf-module-topology.vf-module-topology-identifier.vf-module-name", output.getResponseMessage());
74         assertEquals("Y", output.getAckFinalIndicator());
75     }
76
77
78     @Test
79     public void should_fail_when_client_execution_failed() throws Exception {
80
81         svcClient.mockHasGraph(true);
82         svcClient.mockExecuteWoServiceDataPreload(new RuntimeException("test exception"));
83
84         PreloadVfModuleTopologyOperationInput input = preloadVfModuleTopologyOperationInput()
85                 .setPreloadVfModuleTopologyInformation(preloadVfModuleTopologyInformationBuilder()
86                     .setVnfTopologyIdentifierStructure(vnfTopologyIdentifierStructureBuilder()
87                         .setVnfName("test-vnf-name")
88                         .setVnfType("test-vnf-type").build()
89                     )
90                     .setVfModuleTopology(vfModuleTopologyBuilder()
91                         .setVfModuleTopologyIdentifier(vfModuleTopologyIdentifierBuilder()
92                             .setVfModuleName("vf-module-name").build()
93                         ).build()
94                     ).build()
95                 )
96                 .setSdncRequestHeader(sdncRequestHeader()
97                     .setSvcRequestId("test-svc-request-id")
98                     .setSvcAction(SvcAction.Assign).build()
99                 )
100                 .setRequestInformation(requestInformation()
101                     .setRequestId("test-request-id")
102                     .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance).build()
103                 ).build();
104
105         PreloadVfModuleTopologyOperationOutput output =
106             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
107
108         assertEquals("500", output.getResponseCode());
109         assertEquals("test exception", output.getResponseMessage());
110         assertEquals("Y", output.getAckFinalIndicator());
111     }
112
113     @Test
114     public void should_fail_when_client_has_no_graph() throws Exception {
115
116         svcClient.mockHasGraph(false);
117
118         PreloadVfModuleTopologyOperationInput input = preloadVfModuleTopologyOperationInput()
119                 .setPreloadVfModuleTopologyInformation(preloadVfModuleTopologyInformationBuilder()
120                     .setVnfTopologyIdentifierStructure(vnfTopologyIdentifierStructureBuilder()
121                         .setVnfName("test-vnf-name")
122                         .setVnfType("test-vnf-type").build()
123                     )
124                     .setVfModuleTopology(vfModuleTopologyBuilder()
125                         .setVfModuleTopologyIdentifier(vfModuleTopologyIdentifierBuilder()
126                             .setVfModuleName("vf-module-name").build()
127                         ).build()
128                     ).build()
129                 )
130                 .setSdncRequestHeader(sdncRequestHeader()
131                     .setSvcRequestId("test-svc-request-id")
132                     .setSvcAction(SvcAction.Assign).build()
133                 )
134                 .setRequestInformation(requestInformation()
135                     .setRequestId("test-request-id")
136                     .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance).build()
137                 ).build();
138
139         PreloadVfModuleTopologyOperationOutput output =
140             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
141
142         assertEquals("503", output.getResponseCode());
143         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
144         assertEquals("Y", output.getAckFinalIndicator());
145     }
146
147     @Test
148     public void should_fail_when_failed_to_update_mdsal() throws Exception {
149
150         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
151         svcClient.mockExecuteWoServiceData(svcResultProp);
152         svcClient.mockHasGraph(true);
153         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
154         when(mockWriteTransaction.commit()).thenThrow(new TransactionChainClosedException("test exception"));
155
156         DataBroker spyDataBroker = Mockito.spy(dataBroker);
157         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
158         genericResourceApiProvider.setDataBroker(spyDataBroker);
159
160         PreloadVfModuleTopologyOperationInput input = preloadVfModuleTopologyOperationInput()
161                 .setPreloadVfModuleTopologyInformation(preloadVfModuleTopologyInformationBuilder()
162                     .setVnfTopologyIdentifierStructure(vnfTopologyIdentifierStructureBuilder()
163                         .setVnfName("test-vnf-name")
164                         .setVnfType("test-vnf-type").build()
165                     )
166                     .setVfModuleTopology(vfModuleTopologyBuilder()
167                         .setVfModuleTopologyIdentifier(vfModuleTopologyIdentifierBuilder()
168                             .setVfModuleName("vf-module-name").build()
169                         ).build()
170                     ).build()
171                 )
172                 .setSdncRequestHeader(sdncRequestHeader()
173                     .setSvcRequestId("test-svc-request-id")
174                     .setSvcAction(SvcAction.Assign).build()
175                 )
176                 .setRequestInformation(requestInformation()
177                     .setRequestId("test-request-id")
178                     .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance).build()
179                 ).build();
180
181
182         PreloadVfModuleTopologyOperationOutput output =
183             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
184
185         assertEquals("500", output.getResponseCode());
186         assertEquals("test exception", output.getResponseMessage());
187         assertEquals("Y", output.getAckFinalIndicator());
188     }
189
190     @Test
191     public void should_complete_with_success_when_no_errors() throws Exception {
192
193         svcClient.mockHasGraph(true);
194         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
195         svcClient.mockExecute(svcResultProp);
196
197         PreloadVfModuleTopologyOperationInput input = preloadVfModuleTopologyOperationInput()
198             .setPreloadVfModuleTopologyInformation(preloadVfModuleTopologyInformationBuilder()
199                 .setVnfTopologyIdentifierStructure(vnfTopologyIdentifierStructureBuilder()
200                     .setVnfName("test-vnf-name")
201                     .setVnfType("test-vnf-type").build()
202                 )
203                 .setVfModuleTopology(vfModuleTopologyBuilder()
204                     .setVfModuleTopologyIdentifier(vfModuleTopologyIdentifierBuilder()
205                         .setVfModuleName("vf-module-name").build()
206                     ).build()
207                 ).build()
208             )
209             .setSdncRequestHeader(sdncRequestHeader()
210                 .setSvcRequestId("test-svc-request-id")
211                 .setSvcAction(SvcAction.Assign).build()
212             )
213             .setRequestInformation(requestInformation()
214                 .setRequestId("test-request-id")
215                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance).build()
216             ).build();
217
218
219         PreloadVfModuleTopologyOperationOutput output =
220             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
221
222         assertEquals("200", output.getResponseCode());
223         assertEquals("Y", output.getAckFinalIndicator());
224
225         PreloadVfModuleTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
226         assertEquals(expectedOutput, output);
227     }
228
229
230     @Test
231     public void delete_complete_with_success_when_no_errors() throws Exception {
232
233         svcClient.mockHasGraph(true);
234         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
235         svcClient.mockExecute(svcResultProp);
236
237         PreloadVfModuleTopologyOperationInput input = preloadVfModuleTopologyOperationInput()
238                 .setPreloadVfModuleTopologyInformation(preloadVfModuleTopologyInformationBuilder()
239                         .setVnfTopologyIdentifierStructure(vnfTopologyIdentifierStructureBuilder()
240                                 .setVnfName("test-vnf-name")
241                                 .setVnfType("test-vnf-type").build()
242                         )
243                         .setVfModuleTopology(vfModuleTopologyBuilder()
244                                 .setVfModuleTopologyIdentifier(vfModuleTopologyIdentifierBuilder()
245                                         .setVfModuleName("vf-module-name").build()
246                                 ).build()
247                         ).build()
248                 )
249                 .setSdncRequestHeader(sdncRequestHeader()
250                         .setSvcRequestId("test-svc-request-id")
251                         .setSvcAction(SvcAction.Delete).build()
252                 )
253                 .setRequestInformation(requestInformation()
254                         .setRequestId("test-request-id")
255                         .setRequestAction(RequestInformation.RequestAction.DeleteServiceInstance).build()
256                 ).build();
257
258         PreloadVfModuleTopologyOperationOutput output =
259                 exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
260
261         assertEquals("200", output.getResponseCode());
262         assertEquals("Y", output.getAckFinalIndicator());
263
264         PreloadVfModuleTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
265         assertEquals(expectedOutput, output);
266     }
267
268
269
270     private PreloadVfModuleTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
271         PreloadVfModuleTopologyOperationInput input) {
272         return preloadVfModuleTopologyOperationOutput()
273             .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
274             .setResponseCode(svcResultProp.get(svcClient.errorCode))
275             .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal)).build();
276     }
277
278 }