1 package org.onap.sdnc.northbound;
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;
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;
34 @RunWith(MockitoJUnitRunner.class)
35 public class PreloadVnfTopologyOperationRPCTest extends GenericResourceApiProviderTest {
37 private static final String SVC_OPERATION = "preload-vf-module-topology-operation";
40 public void setUp() throws Exception {
42 svcClient.setScvOperation(SVC_OPERATION);
46 public void should_fail_when_invalid_vnf_topology() throws Exception {
48 PreloadVfModuleTopologyOperationInput input = build(preloadVfModuleTopologyOperationInput());
50 PreloadVfModuleTopologyOperationOutput output =
51 exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
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());
60 public void should_fail_when_invalid_preload_data() throws Exception {
62 PreloadVfModuleTopologyOperationInput input = build(preloadVfModuleTopologyOperationInput()
63 .setPreloadVfModuleTopologyInformation(build(preloadVfModuleTopologyInformationBuilder()
64 .setVnfTopologyIdentifierStructure(build(vnfTopologyIdentifierStructureBuilder()
65 .setVnfName("test-vnf-name")))))
68 PreloadVfModuleTopologyOperationOutput output =
69 exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
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());
78 public void should_fail_when_client_execution_failed() throws Exception {
80 svcClient.mockHasGraph(true);
81 svcClient.mockExecuteWoServiceDataPreload(new RuntimeException("test exception"));
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"))
92 .setSdncRequestHeader(build(sdncRequestHeader()
93 .setSvcRequestId("test-svc-request-id")
94 .setSvcAction(SvcAction.Assign)
96 .setRequestInformation(build(requestInformation()
97 .setRequestId("test-request-id")
98 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
102 PreloadVfModuleTopologyOperationOutput output =
103 exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
105 assertEquals("500", output.getResponseCode());
106 assertEquals("test exception", output.getResponseMessage());
107 assertEquals("Y", output.getAckFinalIndicator());
111 public void should_fail_when_client_has_no_graph() throws Exception {
113 svcClient.mockHasGraph(false);
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"))
124 .setSdncRequestHeader(build(sdncRequestHeader()
125 .setSvcRequestId("test-svc-request-id")
126 .setSvcAction(SvcAction.Assign)
128 .setRequestInformation(build(requestInformation()
129 .setRequestId("test-request-id")
130 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
134 PreloadVfModuleTopologyOperationOutput output =
135 exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
137 assertEquals("503", output.getResponseCode());
138 assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
139 assertEquals("Y", output.getAckFinalIndicator());
143 public void should_fail_when_failed_to_update_mdsal() throws Exception {
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"));
151 DataBroker spyDataBroker = Mockito.spy(dataBroker);
152 when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
153 genericResourceApiProvider.setDataBroker(spyDataBroker);
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"))
164 .setSdncRequestHeader(build(sdncRequestHeader()
165 .setSvcRequestId("test-svc-request-id")
166 .setSvcAction(SvcAction.Assign)
168 .setRequestInformation(build(requestInformation()
169 .setRequestId("test-request-id")
170 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
174 PreloadVfModuleTopologyOperationOutput output =
175 exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
177 assertEquals("500", output.getResponseCode());
178 assertEquals("test exception", output.getResponseMessage());
179 assertEquals("Y", output.getAckFinalIndicator());
183 public void should_complete_with_success_when_no_errors() throws Exception {
185 svcClient.mockHasGraph(true);
186 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
187 svcClient.mockExecute(svcResultProp);
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"))
198 .setSdncRequestHeader(build(sdncRequestHeader()
199 .setSvcRequestId("test-svc-request-id")
200 .setSvcAction(SvcAction.Assign)
202 .setRequestInformation(build(requestInformation()
203 .setRequestId("test-request-id")
204 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
208 PreloadVfModuleTopologyOperationOutput output =
209 exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
211 assertEquals("200", output.getResponseCode());
212 assertEquals("Y", output.getAckFinalIndicator());
214 PreloadVfModuleTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
215 assertEquals(expectedOutput, output);
220 public void delete_complete_with_success_when_no_errors() throws Exception {
222 svcClient.mockHasGraph(true);
223 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
224 svcClient.mockExecute(svcResultProp);
226 PreloadVfModuleTopologyOperationInput input = build(preloadVfModuleTopologyOperationInput()
227 .setPreloadVfModuleTopologyInformation(build(preloadVfModuleTopologyInformationBuilder()
228 .setVnfTopologyIdentifierStructure(build(vnfTopologyIdentifierStructureBuilder()
229 .setVnfName("test-vnf-name")
230 .setVnfType("test-vnf-type")))
231 .setVfModuleTopology(build(vfModuleTopologyBuilder()
232 .setVfModuleTopologyIdentifier(build(vfModuleTopologyIdentifierBuilder()
233 .setVfModuleName("vf-module-name"))
235 .setSdncRequestHeader(build(sdncRequestHeader()
236 .setSvcRequestId("test-svc-request-id")
237 .setSvcAction(SvcAction.Delete)
239 .setRequestInformation(build(requestInformation()
240 .setRequestId("test-request-id")
241 .setRequestAction(RequestInformation.RequestAction.DeleteServiceInstance)
245 PreloadVfModuleTopologyOperationOutput output =
246 exec(genericResourceApiProvider::preloadVfModuleTopologyOperation, input, RpcResult::getResult);
248 assertEquals("200", output.getResponseCode());
249 assertEquals("Y", output.getAckFinalIndicator());
251 PreloadVfModuleTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
252 assertEquals(expectedOutput, output);
257 private PreloadVfModuleTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
258 PreloadVfModuleTopologyOperationInput input) {
259 return build(preloadVfModuleTopologyOperationOutput()
260 .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
261 .setResponseCode(svcResultProp.get(svcClient.errorCode))
262 .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))