Generic resource API catch up
[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.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.util.MDSALUtil.build;
9 import static org.onap.sdnc.northbound.util.MDSALUtil.exec;
10 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadVfModuleTopologyOperationInput;
11 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadVfModuleTopologyOperationOutput;
12 import static org.onap.sdnc.northbound.util.MDSALUtil.requestInformation;
13 import static org.onap.sdnc.northbound.util.MDSALUtil.sdncRequestHeader;
14 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfTopologyIdentifierStructureBuilder;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadVfModuleTopologyInformationBuilder;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleTopologyBuilder;
17 import static org.onap.sdnc.northbound.util.MDSALUtil.vfModuleTopologyIdentifierBuilder;
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.runners.MockitoJUnitRunner;
24 import org.onap.sdnc.northbound.util.PropBuilder;
25 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
26 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
27 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainClosedException;
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.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 = build(preloadVfModuleTopologyOperationInput());
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 = build(preloadVfModuleTopologyOperationInput()
63             .setPreloadVfModuleTopologyInformation(build(preloadVfModuleTopologyInformationBuilder()
64                 .setVnfTopologyIdentifierStructure(build(vnfTopologyIdentifierStructureBuilder()
65                     .setVnfName("test-vnf-name")))))
66         );
67
68         PreloadVfModuleTopologyOperationOutput output =
69             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
70
71         assertEquals("403", output.getResponseCode());
72         assertEquals("invalid input, null or empty preload-vf-module-topology-information.vf-module-topology.vf-module-topology-identifier.vf-module-name", output.getResponseMessage());
73         assertEquals("Y", output.getAckFinalIndicator());
74     }
75
76
77     @Test
78     public void should_fail_when_client_execution_failed() throws Exception {
79
80         svcClient.mockHasGraph(true);
81         svcClient.mockExecuteWoServiceDataPreload(new RuntimeException("test exception"));
82
83         PreloadVfModuleTopologyOperationInput input = build(preloadVfModuleTopologyOperationInput()
84                 .setPreloadVfModuleTopologyInformation(build(preloadVfModuleTopologyInformationBuilder()
85                     .setVnfTopologyIdentifierStructure(build(vnfTopologyIdentifierStructureBuilder()
86                         .setVnfName("test-vnf-name")
87                         .setVnfType("test-vnf-type")))
88                     .setVfModuleTopology(build(vfModuleTopologyBuilder()
89                         .setVfModuleTopologyIdentifier(build(vfModuleTopologyIdentifierBuilder()
90                             .setVfModuleName("vf-module-name"))
91                 )))))
92                 .setSdncRequestHeader(build(sdncRequestHeader()
93                     .setSvcRequestId("test-svc-request-id")
94                     .setSvcAction(SvcAction.Assign)
95                 ))
96                 .setRequestInformation(build(requestInformation()
97                     .setRequestId("test-request-id")
98                     .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
99                 ))
100             );
101
102         PreloadVfModuleTopologyOperationOutput output =
103             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
104
105         assertEquals("500", output.getResponseCode());
106         assertEquals("test exception", output.getResponseMessage());
107         assertEquals("Y", output.getAckFinalIndicator());
108     }
109
110     @Test
111     public void should_fail_when_client_has_no_graph() throws Exception {
112
113         svcClient.mockHasGraph(false);
114
115         PreloadVfModuleTopologyOperationInput input = build(preloadVfModuleTopologyOperationInput()
116                 .setPreloadVfModuleTopologyInformation(build(preloadVfModuleTopologyInformationBuilder()
117                     .setVnfTopologyIdentifierStructure(build(vnfTopologyIdentifierStructureBuilder()
118                         .setVnfName("test-vnf-name")
119                         .setVnfType("test-vnf-type")))
120                     .setVfModuleTopology(build(vfModuleTopologyBuilder()
121                         .setVfModuleTopologyIdentifier(build(vfModuleTopologyIdentifierBuilder()
122                             .setVfModuleName("vf-module-name"))
123                 )))))
124                 .setSdncRequestHeader(build(sdncRequestHeader()
125                     .setSvcRequestId("test-svc-request-id")
126                     .setSvcAction(SvcAction.Assign)
127                 ))
128                 .setRequestInformation(build(requestInformation()
129                     .setRequestId("test-request-id")
130                     .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
131                 ))
132             );
133
134         PreloadVfModuleTopologyOperationOutput output =
135             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
136
137         assertEquals("503", output.getResponseCode());
138         assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
139         assertEquals("Y", output.getAckFinalIndicator());
140     }
141
142     @Test
143     public void should_fail_when_failed_to_update_mdsal() throws Exception {
144
145         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
146         svcClient.mockExecuteWoServiceData(svcResultProp);
147         svcClient.mockHasGraph(true);
148         WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
149         when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
150
151         DataBroker spyDataBroker = Mockito.spy(dataBroker);
152         when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
153         genericResourceApiProvider.setDataBroker(spyDataBroker);
154
155         PreloadVfModuleTopologyOperationInput input = build(preloadVfModuleTopologyOperationInput()
156                 .setPreloadVfModuleTopologyInformation(build(preloadVfModuleTopologyInformationBuilder()
157                     .setVnfTopologyIdentifierStructure(build(vnfTopologyIdentifierStructureBuilder()
158                         .setVnfName("test-vnf-name")
159                         .setVnfType("test-vnf-type")))
160                     .setVfModuleTopology(build(vfModuleTopologyBuilder()
161                         .setVfModuleTopologyIdentifier(build(vfModuleTopologyIdentifierBuilder()
162                             .setVfModuleName("vf-module-name"))
163                 )))))
164                 .setSdncRequestHeader(build(sdncRequestHeader()
165                     .setSvcRequestId("test-svc-request-id")
166                     .setSvcAction(SvcAction.Assign)
167                 ))
168                 .setRequestInformation(build(requestInformation()
169                     .setRequestId("test-request-id")
170                     .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
171                 ))
172             );
173
174         PreloadVfModuleTopologyOperationOutput output =
175             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
176
177         assertEquals("500", output.getResponseCode());
178         assertEquals("test exception", output.getResponseMessage());
179         assertEquals("Y", output.getAckFinalIndicator());
180     }
181
182     @Test
183     public void should_complete_with_success_when_no_errors() throws Exception {
184
185         svcClient.mockHasGraph(true);
186         PropBuilder svcResultProp = svcClient.createExecuteOKResult();
187         svcClient.mockExecute(svcResultProp);
188
189         PreloadVfModuleTopologyOperationInput input = build(preloadVfModuleTopologyOperationInput()
190             .setPreloadVfModuleTopologyInformation(build(preloadVfModuleTopologyInformationBuilder()
191                 .setVnfTopologyIdentifierStructure(build(vnfTopologyIdentifierStructureBuilder()
192                     .setVnfName("test-vnf-name")
193                     .setVnfType("test-vnf-type")))
194                 .setVfModuleTopology(build(vfModuleTopologyBuilder()
195                     .setVfModuleTopologyIdentifier(build(vfModuleTopologyIdentifierBuilder()
196                         .setVfModuleName("vf-module-name"))
197             )))))
198             .setSdncRequestHeader(build(sdncRequestHeader()
199                 .setSvcRequestId("test-svc-request-id")
200                 .setSvcAction(SvcAction.Assign)
201             ))
202             .setRequestInformation(build(requestInformation()
203                 .setRequestId("test-request-id")
204                 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
205             ))
206         );
207
208         PreloadVfModuleTopologyOperationOutput output =
209             exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
210
211         assertEquals("200", output.getResponseCode());
212         assertEquals("Y", output.getAckFinalIndicator());
213
214         PreloadVfModuleTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
215         assertEquals(expectedOutput, output);
216     }
217
218     private PreloadVfModuleTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
219         PreloadVfModuleTopologyOperationInput input) {
220         return build(preloadVfModuleTopologyOperationOutput()
221             .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
222             .setResponseCode(svcResultProp.get(svcClient.errorCode))
223             .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))
224         );
225     }
226
227 }