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))