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