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.preloadVnfTopologyOperationInput;
11 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadVnfTopologyOperationOutput;
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.vnfTopologyIdentifierBuilder;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.vnfTopologyInformationBuilder;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.Mockito;
21 import org.mockito.runners.MockitoJUnitRunner;
22 import org.onap.sdnc.northbound.util.PropBuilder;
23 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
24 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
25 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainClosedException;
26 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVnfTopologyOperationInput;
27 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadVnfTopologyOperationOutput;
28 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
30 import org.opendaylight.yangtools.yang.common.RpcResult;
32 @RunWith(MockitoJUnitRunner.class)
33 public class PreloadVnfTopologyOperationRPCTest extends GenericResourceApiProviderTest {
35 private static final String SVC_OPERATION = "preload-vnf-topology-operation";
38 public void setUp() throws Exception {
40 svcClient.setScvOperation(SVC_OPERATION);
44 public void should_fail_when_invalid_vnf_topology() throws Exception {
46 PreloadVnfTopologyOperationInput input = build(preloadVnfTopologyOperationInput());
48 PreloadVnfTopologyOperationOutput output =
49 exec(genericResourceApiProvider::preloadVnfTopologyOperation, input, RpcResult::getResult);
51 assertEquals("403", output.getResponseCode());
52 assertEquals("invalid input: input is null", output.getResponseMessage());
53 assertEquals("Y", output.getAckFinalIndicator());
58 public void should_fail_when_invalid_preload_data() throws Exception {
60 PreloadVnfTopologyOperationInput input = build(preloadVnfTopologyOperationInput()
61 .setVnfTopologyInformation(build(vnfTopologyInformationBuilder()
62 .setVnfTopologyIdentifier(build(vnfTopologyIdentifierBuilder()
63 .setVnfName("test-vnf-name")))))
66 PreloadVnfTopologyOperationOutput output =
67 exec(genericResourceApiProvider::preloadVnfTopologyOperation, input, RpcResult::getResult);
69 assertEquals("403", output.getResponseCode());
70 assertEquals("invalid input: vnf-name or vnf-type is null or empty", output.getResponseMessage());
71 assertEquals("Y", output.getAckFinalIndicator());
76 public void should_fail_when_client_execution_failed() throws Exception {
78 svcClient.mockHasGraph(true);
79 svcClient.mockExecuteWoServiceData(new RuntimeException("test exception"));
81 PreloadVnfTopologyOperationInput input = build(preloadVnfTopologyOperationInput()
82 .setVnfTopologyInformation(build(vnfTopologyInformationBuilder()
83 .setVnfTopologyIdentifier(build(vnfTopologyIdentifierBuilder()
84 .setVnfName("test-vnf-name")
85 .setVnfType("test-vnf-type")))))
88 PreloadVnfTopologyOperationOutput output =
89 exec(genericResourceApiProvider::preloadVnfTopologyOperation, input, RpcResult::getResult);
91 assertEquals("500", output.getResponseCode());
92 assertEquals("test exception", output.getResponseMessage());
93 assertEquals("Y", output.getAckFinalIndicator());
97 public void should_fail_when_client_has_no_graph() throws Exception {
99 svcClient.mockHasGraph(false);
101 PreloadVnfTopologyOperationInput input = build(preloadVnfTopologyOperationInput()
102 .setVnfTopologyInformation(build(vnfTopologyInformationBuilder()
103 .setVnfTopologyIdentifier(build(vnfTopologyIdentifierBuilder()
104 .setVnfName("test-vnf-name")
105 .setVnfType("test-vnf-type")))))
108 PreloadVnfTopologyOperationOutput output =
109 exec(genericResourceApiProvider::preloadVnfTopologyOperation, input, RpcResult::getResult);
111 assertEquals("503", output.getResponseCode());
112 assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
113 assertEquals("Y", output.getAckFinalIndicator());
117 public void should_fail_when_failed_to_update_mdsal() throws Exception {
119 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
120 svcClient.mockExecuteWoServiceData(svcResultProp);
121 svcClient.mockHasGraph(true);
122 WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
123 when(mockWriteTransaction.submit()).thenThrow(new TransactionChainClosedException("test exception"));
125 DataBroker spyDataBroker = Mockito.spy(dataBroker);
126 when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
127 genericResourceApiProvider.setDataBroker(spyDataBroker);
129 PreloadVnfTopologyOperationInput input = build(preloadVnfTopologyOperationInput()
130 .setVnfTopologyInformation(build(vnfTopologyInformationBuilder()
131 .setVnfTopologyIdentifier(build(vnfTopologyIdentifierBuilder()
132 .setVnfName("test-vnf-name")
133 .setVnfType("test-vnf-type")))))
136 PreloadVnfTopologyOperationOutput output =
137 exec(genericResourceApiProvider::preloadVnfTopologyOperation, input, RpcResult::getResult);
139 assertEquals("500", output.getResponseCode());
140 assertEquals("test exception", output.getResponseMessage());
141 assertEquals("Y", output.getAckFinalIndicator());
145 public void should_complete_with_success_when_no_errors() throws Exception {
147 svcClient.mockHasGraph(true);
148 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
149 svcClient.mockExecute(svcResultProp);
151 PreloadVnfTopologyOperationInput input = build(preloadVnfTopologyOperationInput()
152 .setVnfTopologyInformation(build(vnfTopologyInformationBuilder()
153 .setVnfTopologyIdentifier(build(vnfTopologyIdentifierBuilder()
154 .setVnfName("test-vnf-name")
155 .setVnfType("test-vnf-type")))))
156 .setSdncRequestHeader(build(sdncRequestHeader()
157 .setSvcRequestId("test-svc-request-id")
158 .setSvcAction(SvcAction.Assign)
160 .setRequestInformation(build(requestInformation()
161 .setRequestId("test-request-id")
162 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
166 PreloadVnfTopologyOperationOutput output =
167 exec(genericResourceApiProvider::preloadVnfTopologyOperation, input, RpcResult::getResult);
169 assertEquals("200", output.getResponseCode());
170 assertEquals("Y", output.getAckFinalIndicator());
172 PreloadVnfTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
173 assertEquals(expectedOutput, output);
176 private PreloadVnfTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
177 PreloadVnfTopologyOperationInput input) {
178 return build(preloadVnfTopologyOperationOutput()
179 .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
180 .setResponseCode(svcResultProp.get(svcClient.errorCode))
181 .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))