From 785c77ae295b287678d4842269222c31b3e4c330 Mon Sep 17 00:00:00 2001 From: "waqas.ikram" Date: Fri, 12 Jul 2019 17:51:59 +0100 Subject: [PATCH] Fixing ASDCRestInterface for CSIT to simulate SDC req Change-Id: I6331d08441b9bf1f621f56ec1b7d911851010e62 Issue-ID: SO-1948 Signed-off-by: waqas.ikram --- .../org/onap/so/asdc/ASDCControllerSingleton.java | 25 +++--- .../main/java/org/onap/so/asdc/Application.java | 6 -- .../java/org/onap/so/asdc/JerseyConfiguration.java | 12 ++- .../org/onap/so/asdc/client/ASDCController.java | 30 ++++--- .../asdc/client/test/rest/ASDCRestInterface.java | 91 ++++++++++++++-------- 5 files changed, 102 insertions(+), 62 deletions(-) diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java b/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java index a5e3340c76..e00bb1eb36 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/ASDCControllerSingleton.java @@ -38,21 +38,26 @@ import java.security.SecureRandom; @Profile("!test") public class ASDCControllerSingleton { + private static final Logger logger = LoggerFactory.getLogger(ASDCControllerSingleton.class); + private final ASDCController asdcController; @Autowired - private ASDCController asdcController; - private static Logger logger = LoggerFactory.getLogger(ASDCControllerSingleton.class); - - + public ASDCControllerSingleton(final ASDCController asdcController) { + this.asdcController = asdcController; + } @Scheduled(fixedRate = 50000) public void periodicControllerTask() { try { - int randomNumber = new SecureRandom().nextInt(Integer.MAX_VALUE); + final int randomNumber = new SecureRandom().nextInt(Integer.MAX_VALUE); asdcController.setControllerName("mso-controller" + randomNumber); - asdcController.initASDC(); - } catch (ASDCControllerException e) { - logger.error("Exception occurred", e); + if (asdcController.isStopped()) { + logger.info("{} not running will try to initialize it, currrent status: {}", + asdcController.getClass().getName(), asdcController.getControllerStatus()); + asdcController.initASDC(); + } + } catch (final ASDCControllerException controllerException) { + logger.error("Exception occurred", controllerException); } } @@ -60,8 +65,8 @@ public class ASDCControllerSingleton { private void terminate() { try { asdcController.closeASDC(); - } catch (ASDCControllerException e) { - logger.error("Exception occurred", e); + } catch (final ASDCControllerException controllerException) { + logger.error("Exception occurred", controllerException); } } diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/Application.java b/asdc-controller/src/main/java/org/onap/so/asdc/Application.java index eb2957c6f8..2c8347260f 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/Application.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/Application.java @@ -35,7 +35,6 @@ import org.springframework.scheduling.annotation.EnableScheduling; @EnableJpaRepositories("org.onap.so.db.catalog.data.repository") public class Application { private static final Logger logger = LoggerFactory.getLogger(Application.class); - private static final String MSO_CONFIG_PATH = "mso.config.path"; private static final String LOGS_DIR = "logs_dir"; @Autowired @@ -47,11 +46,6 @@ public class Application { } } - private static void setConfigPath() { - if (System.getProperty(MSO_CONFIG_PATH) == null) - System.getProperties().setProperty(MSO_CONFIG_PATH, "."); - } - @PostConstruct private void deployActivities() { try { diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/JerseyConfiguration.java b/asdc-controller/src/main/java/org/onap/so/asdc/JerseyConfiguration.java index 902506974a..22265a0cc6 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/JerseyConfiguration.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/JerseyConfiguration.java @@ -24,7 +24,9 @@ import javax.annotation.PostConstruct; import javax.ws.rs.ApplicationPath; import org.glassfish.jersey.server.ResourceConfig; import org.onap.so.asdc.client.test.rest.ASDCRestInterface; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; import io.swagger.jaxrs.config.BeanConfig; import io.swagger.jaxrs.listing.ApiListingResource; import io.swagger.jaxrs.listing.SwaggerSerializers; @@ -33,6 +35,12 @@ import io.swagger.jaxrs.listing.SwaggerSerializers; @ApplicationPath("/test") public class JerseyConfiguration extends ResourceConfig { + private Environment environment; + + @Autowired + public JerseyConfiguration(final Environment environment) { + this.environment = environment; + } @PostConstruct public void setUp() { @@ -40,10 +48,10 @@ public class JerseyConfiguration extends ResourceConfig { register(ApiListingResource.class); register(SwaggerSerializers.class); - BeanConfig beanConfig = new BeanConfig(); + final BeanConfig beanConfig = new BeanConfig(); beanConfig.setVersion("1.0.2"); beanConfig.setSchemes(new String[] {"http"}); - beanConfig.setHost("localhost:8080"); + beanConfig.setHost("localhost:" + environment.getProperty("server.port")); beanConfig.setBasePath("/mso"); beanConfig.setResourcePackage("org.onap.so.apihandlerinfra"); beanConfig.setPrettyPrint(true); diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java index 563291c479..3b9406a697 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java @@ -196,11 +196,9 @@ public class ASDCController { * @throws IOException In case of issues when trying to load the key file */ public void initASDC() throws ASDCControllerException { - String event = "Initialize the ASDC Controller"; - logger.debug(event); - if (this.getControllerStatus() != ASDCControllerStatus.STOPPED) { - String endEvent = "The controller is already initialized, call the closeASDC method first"; - throw new ASDCControllerException(endEvent); + logger.debug("Initialize the ASDC Controller"); + if (!isStopped()) { + throw new ASDCControllerException("The controller is already initialized, call the closeASDC method first"); } if (asdcConfig != null) { @@ -237,6 +235,13 @@ public class ASDCController { "changeControllerStatus"); } + /** + * @return true if controller is stopped + */ + public boolean isStopped() { + return this.getControllerStatus() == ASDCControllerStatus.STOPPED; + } + /** * This method closes the ASDC Controller and the ASDC Client. * @@ -245,7 +250,7 @@ public class ASDCController { */ public void closeASDC() throws ASDCControllerException { - if (this.getControllerStatus() == ASDCControllerStatus.BUSY) { + if (isBusy()) { throw new ASDCControllerException("Cannot close the ASDC controller as it's currently in BUSY state"); } if (this.distributionClient != null) { @@ -261,6 +266,13 @@ public class ASDCController { this.changeControllerStatus(ASDCControllerStatus.STOPPED); } + /** + * @return true if controller is currently processing notification + */ + public boolean isBusy() { + return this.getControllerStatus() == ASDCControllerStatus.BUSY; + } + protected boolean checkResourceAlreadyDeployed(ResourceStructure resource, boolean serviceDeployed) throws ArtifactInstallerException { @@ -713,12 +725,6 @@ public class ASDCController { try { this.processCsarServiceArtifacts(iNotif, toscaResourceStructure); - IArtifactInfo iArtifact = toscaResourceStructure.getToscaArtifact(); - String filePath = - msoConfigPath + "/ASDC/" + iArtifact.getArtifactVersion() + "/" + iArtifact.getArtifactName(); - File csarFile = new File(filePath); - - if (isCsarAlreadyDeployed(iNotif, toscaResourceStructure)) { return; } diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/rest/ASDCRestInterface.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/rest/ASDCRestInterface.java index 56690a8c38..24e1887847 100644 --- a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/rest/ASDCRestInterface.java +++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/rest/ASDCRestInterface.java @@ -23,7 +23,6 @@ package org.onap.so.asdc.client.test.rest; -import java.io.IOException; import javax.transaction.Transactional; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; @@ -31,15 +30,14 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.onap.so.logger.LoggingAnchor; +import javax.ws.rs.core.Response.Status; import org.onap.so.asdc.client.ASDCController; -import org.onap.so.asdc.client.exceptions.ASDCControllerException; -import org.onap.so.asdc.client.exceptions.ASDCParametersException; import org.onap.so.asdc.client.test.emulators.DistributionClientEmulator; -import org.onap.so.asdc.client.test.emulators.NotificationDataImpl; import org.onap.so.asdc.client.test.emulators.JsonStatusData; +import org.onap.so.asdc.client.test.emulators.NotificationDataImpl; import org.onap.so.asdc.installer.heat.ToscaResourceInstaller; import org.onap.so.logger.ErrorCode; +import org.onap.so.logger.LoggingAnchor; import org.onap.so.logger.MessageEnum; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,13 +46,15 @@ import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; /** - * This is a TEST only rest interface. It is not used in production, it is used to aid in testing the ASDC service on - * jboss without the need to be connected to the ASDC service broker. It starts the test at the treatNotification step - * and simulates both the notification step as well as the artifact download step. + * This is a TEST only rest interface. It is not used in production, it is used to aid in testing the ASDC service + * without the need to be connected to the ASDC service broker. It starts the test at the treatNotification step and + * simulates both the notification step as well as the artifact download step. *

- * i.e. http://localhost:8080/asdc/treatNotification/v1 + * i.e. http://localhost:8085/test/treatNotification/v1 *

- * i.e. http://localhost:8080/asdc/statusData/v1 + * i.e. http://localhost:8085/test/statusData/v1 + * + * This interface is also used in CSIT to simulate a distribution of a service, without using SDC * * @author jm5423 */ @@ -66,48 +66,75 @@ public class ASDCRestInterface { private static final Logger logger = LoggerFactory.getLogger(ASDCRestInterface.class); - @Autowired - private ASDCController asdcController; + private final ASDCController asdcController; + + private final ToscaResourceInstaller toscaInstaller; @Autowired - private ToscaResourceInstaller toscaInstaller; + public ASDCRestInterface(final ASDCController asdcController, final ToscaResourceInstaller toscaInstaller) { + this.asdcController = asdcController; + this.toscaInstaller = toscaInstaller; + } @POST @Path("/treatNotification/v1") @Produces(MediaType.APPLICATION_JSON) @Transactional - public Response invokeASDCService(NotificationDataImpl request, - @HeaderParam("resource-location") String resourceLocation) - throws ASDCControllerException, ASDCParametersException, IOException { - DistributionClientEmulator distributionClientEmulator = new DistributionClientEmulator(resourceLocation); - - asdcController.setControllerName("asdc-controller1"); - asdcController.setDistributionClient(distributionClientEmulator); - asdcController.initASDC(); - asdcController.treatNotification(request); - asdcController.closeASDC(); - return Response.status(200).build(); + public Response invokeASDCService(final NotificationDataImpl request, + @HeaderParam("resource-location") final String resourceLocation) { + + try { + logger.info("Received message : {}", request); + logger.info("resource-location : {}", resourceLocation); + final DistributionClientEmulator distributionClientEmulator = + getDistributionClientEmulator(resourceLocation); + + asdcController.setControllerName("asdc-controller1"); + asdcController.setDistributionClient(distributionClientEmulator); + + if (asdcController.isStopped()) { + logger.info("{} not running will try to initialize it, currrent status: {}", + asdcController.getClass().getName(), asdcController.getControllerStatus()); + asdcController.initASDC(); + } + + asdcController.treatNotification(request); + + if (!asdcController.isBusy()) { + asdcController.closeASDC(); + } + + return Response.status(Status.OK).build(); + } catch (final Exception exception) { + logger.error("Unable to process notification request", exception); + return Response.status(Status.INTERNAL_SERVER_ERROR).build(); + } + + } + + private DistributionClientEmulator getDistributionClientEmulator(final String resourceLocation) { + return new DistributionClientEmulator(resourceLocation); } @POST @Path("/statusData/v1") @Produces(MediaType.APPLICATION_JSON) @Transactional - public Response invokeASDCStatusData(String request) { + public Response invokeASDCStatusData(final String request) { try { - DistributionClientEmulator distributionClientEmulator = - new DistributionClientEmulator("resource-examples/"); - JsonStatusData statusData = JsonStatusData.instantiateNotifFromJsonFile("resource-examples/"); + final DistributionClientEmulator distributionClientEmulator = + getDistributionClientEmulator("resource-examples/"); + final JsonStatusData statusData = JsonStatusData.instantiateNotifFromJsonFile("resource-examples/"); - ASDCController controller = new ASDCController("asdc-controller1", distributionClientEmulator); - controller.initASDC(); + asdcController.setDistributionClient(distributionClientEmulator); + asdcController.initASDC(); toscaInstaller.installTheComponentStatus(statusData); - controller.closeASDC(); + asdcController.closeASDC(); logger.info(LoggingAnchor.FOUR, MessageEnum.ASDC_ARTIFACT_DEPLOY_SUC.toString(), statusData.getDistributionID(), "ASDC", "ASDC Updates Are Complete"); - } catch (Exception e) { + } catch (final Exception e) { logger.info("Error caught " + e.getMessage()); logger.error(LoggingAnchor.SIX, MessageEnum.ASDC_GENERAL_EXCEPTION.toString(), "Exception caught during ASDCRestInterface", "ASDC", "invokeASDCService", -- 2.16.6