1 package org.onap.sdnc.northbound;
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.networkTopologyIdentifierStructureBuilder;
12 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadNetworkTopologyInformationBuilder;
13 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadNetworkTopologyOperationInput;
14 import static org.onap.sdnc.northbound.util.MDSALUtil.preloadNetworkTopologyOperationOutput;
15 import static org.onap.sdnc.northbound.util.MDSALUtil.requestInformation;
16 import static org.onap.sdnc.northbound.util.MDSALUtil.sdncRequestHeader;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.junit.runner.RunWith;
21 import org.mockito.Mockito;
22 import org.mockito.junit.MockitoJUnitRunner;
23 import org.onap.sdnc.northbound.util.PropBuilder;
24 import org.opendaylight.mdsal.binding.api.DataBroker;
25 import org.opendaylight.mdsal.binding.api.TransactionChainClosedException;
26 import org.opendaylight.mdsal.binding.api.WriteTransaction;
27 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationInput;
28 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.PreloadNetworkTopologyOperationOutput;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader.SvcAction;
31 import org.opendaylight.yangtools.yang.common.RpcResult;
33 @RunWith(MockitoJUnitRunner.Silent.class)
34 public class PreloadNetworkTopologyRPCTest extends GenericResourceApiProviderTest {
36 private static final String SVC_OPERATION = "preload-network-topology-operation";
39 public void setUp() throws Exception {
41 svcClient.setScvOperation(SVC_OPERATION);
45 public void should_fail_when_invalid_network_topology() throws Exception {
47 PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput());
49 PreloadNetworkTopologyOperationOutput output =
50 exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
52 assertEquals("403", output.getResponseCode());
53 assertEquals("invalid input, null or empty preload-network-topology-information", output.getResponseMessage());
54 assertEquals("Y", output.getAckFinalIndicator());
59 public void should_fail_when_client_execution_failed() throws Exception {
61 svcClient.mockHasGraph(true);
62 svcClient.mockExecuteWoServiceDataPreload(new RuntimeException("test exception"));
64 PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
65 .setPreloadNetworkTopologyInformation(build(preloadNetworkTopologyInformationBuilder()
66 .setNetworkTopologyIdentifierStructure(build(networkTopologyIdentifierStructureBuilder()
67 .setNetworkName("test-network-name")
68 .setNetworkType("test-network-type")))))
71 PreloadNetworkTopologyOperationOutput output =
72 exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
74 assertEquals("500", output.getResponseCode());
75 assertEquals("test exception", output.getResponseMessage());
76 assertEquals("Y", output.getAckFinalIndicator());
80 public void should_fail_when_client_has_no_graph() throws Exception {
82 svcClient.mockHasGraph(false);
84 PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
85 .setPreloadNetworkTopologyInformation(build(preloadNetworkTopologyInformationBuilder()
86 .setNetworkTopologyIdentifierStructure(build(networkTopologyIdentifierStructureBuilder()
87 .setNetworkName("test-network-name")
88 .setNetworkType("test-network-type")))))
91 PreloadNetworkTopologyOperationOutput output =
92 exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
94 assertEquals("503", output.getResponseCode());
95 assertEquals(NO_SERVICE_LOGIC_ACTIVE + APP_NAME + ": '" + SVC_OPERATION + "'", output.getResponseMessage());
96 assertEquals("Y", output.getAckFinalIndicator());
100 public void should_fail_when_failed_to_update_mdsal() throws Exception {
102 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
103 svcClient.mockExecuteWoServiceData(svcResultProp);
104 svcClient.mockHasGraph(true);
105 WriteTransaction mockWriteTransaction = mock(WriteTransaction.class);
106 when(mockWriteTransaction.commit()).thenThrow(new TransactionChainClosedException("test exception"));
108 DataBroker spyDataBroker = Mockito.spy(dataBroker);
109 when(spyDataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTransaction);
110 genericResourceApiProvider.setDataBroker(spyDataBroker);
112 PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
113 .setPreloadNetworkTopologyInformation(build(preloadNetworkTopologyInformationBuilder()
114 .setNetworkTopologyIdentifierStructure(build(networkTopologyIdentifierStructureBuilder()
115 .setNetworkName("test-network-name")
116 .setNetworkType("test-network-type")))))
119 PreloadNetworkTopologyOperationOutput output =
120 exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
122 assertEquals("500", output.getResponseCode());
123 assertEquals("test exception", output.getResponseMessage());
124 assertEquals("Y", output.getAckFinalIndicator());
128 public void should_complete_with_success_when_no_errors() throws Exception {
130 svcClient.mockHasGraph(true);
131 PropBuilder svcResultProp = svcClient.createExecuteOKResult();
132 svcClient.mockExecute(svcResultProp);
134 PreloadNetworkTopologyOperationInput input = build(preloadNetworkTopologyOperationInput()
135 .setPreloadNetworkTopologyInformation(build(preloadNetworkTopologyInformationBuilder()
136 .setNetworkTopologyIdentifierStructure(build(networkTopologyIdentifierStructureBuilder()
137 .setNetworkName("test-network-name")
138 .setNetworkType("test-network-type")))))
139 .setSdncRequestHeader(build(sdncRequestHeader()
140 .setSvcRequestId("test-svc-request-id")
141 .setSvcAction(SvcAction.Assign)
143 .setRequestInformation(build(requestInformation()
144 .setRequestId("test-request-id")
145 .setRequestAction(RequestInformation.RequestAction.CreateServiceInstance)
149 PreloadNetworkTopologyOperationOutput output =
150 exec(genericResourceApiProvider::preloadNetworkTopologyOperation, input, RpcResult::getResult);
152 assertEquals("200", output.getResponseCode());
153 assertEquals("Y", output.getAckFinalIndicator());
155 PreloadNetworkTopologyOperationOutput expectedOutput = createExpectedOutput(svcResultProp, input);
156 assertEquals(expectedOutput, output);
159 private PreloadNetworkTopologyOperationOutput createExpectedOutput(PropBuilder svcResultProp,
160 PreloadNetworkTopologyOperationInput input) {
161 return build(preloadNetworkTopologyOperationOutput()
162 .setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId())
163 .setResponseCode(svcResultProp.get(svcClient.errorCode))
164 .setAckFinalIndicator(svcResultProp.get(svcClient.ackFinal))