From e1d67de22d0bf9fe50c16ee6bc1e50310e74d4fa Mon Sep 17 00:00:00 2001 From: Taka Cho Date: Tue, 24 Aug 2021 13:03:02 -0400 Subject: clamp sonar fix on test code and the rest - rename files to "...ItTestCase" to comply SONAR and checkstyle - surefire plugin include *Test.java files - failsafe plugin include *ItTestCase.java files - use assertEquals etc. - replace to "var" - remove unused import Issue-ID: POLICY-3452 Change-Id: I2e6e829726c4585f5f8bc985f4e8f2b88d17aef1 Signed-off-by: Taka Cho --- .../authorization/AuthorizationController.java | 1 - .../org/onap/policy/clamp/clds/ClampServlet.java | 2 - .../onap/policy/clamp/clds/client/CdsServices.java | 1 - .../policy/clamp/clds/config/ClampProperties.java | 1 - .../policy/clamp/clds/filter/ClampCadiFilter.java | 1 - .../clds/model/dcae/DcaeInventoryResponse.java | 5 +- .../clds/sdc/controller/installer/CsarHandler.java | 3 - .../clds/tosca/update/templates/JsonTemplate.java | 6 +- .../onap/policy/clamp/clds/util/LoggingUtils.java | 4 +- .../org/onap/policy/clamp/loop/LoopService.java | 2 - .../clamp/loop/service/CsarServiceInstaller.java | 2 +- .../onap/policy/clamp/loop/service/Service.java | 1 - .../clamp/loop/template/LoopElementModel.java | 4 +- .../policy/clamp/loop/template/PolicyModel.java | 1 - .../policy/microservice/MicroServicePolicy.java | 1 - .../policy/operational/OperationalPolicy.java | 1 - .../operational/OperationalPolicyService.java | 2 - .../clamp/clds/config/CldsUserJsonDecoderTest.java | 3 +- .../sdc/SdcSingleControllerConfigurationTest.java | 6 +- .../clds/it/AuthorizationControllerItCase.java | 139 -------- .../clds/it/AuthorizationControllerItTestCase.java | 139 ++++++++ .../clds/it/CldsHealthcheckServiceItCase.java | 55 --- .../clds/it/CldsHealthcheckServiceItTestCase.java | 55 +++ .../org/onap/policy/clamp/clds/it/HttpsItCase.java | 106 ------ .../onap/policy/clamp/clds/it/HttpsItTestCase.java | 106 ++++++ .../org/onap/policy/clamp/clds/it/RobotItCase.java | 136 -------- .../onap/policy/clamp/clds/it/RobotItTestCase.java | 136 ++++++++ .../it/config/CldsReferencePropertiesItCase.java | 64 ---- .../config/CldsReferencePropertiesItTestCase.java | 64 ++++ .../config/SdcControllersConfigurationItCase.java | 88 ----- .../SdcControllersConfigurationItTestCase.java | 88 +++++ .../sdc/controller/SdcSingleControllerItCase.java | 152 -------- .../controller/SdcSingleControllerItTestCase.java | 152 ++++++++ .../dcae/DcaeInventoryResponseCacheItTestCase.java | 127 +++++++ .../dcae/DcaeInventoryResponseCacheTestItCase.java | 127 ------- .../clds/model/dcae/DcaeInventoryResponseTest.java | 4 +- .../tosca/DictionaryRepositoriesTestItCase.java | 88 ----- .../DictionaryRepositoriesTestItTestCase.java | 88 +++++ .../clds/tosca/update/JsonTemplateFieldTest.java | 16 +- .../clamp/clds/tosca/update/JsonTemplateTest.java | 13 +- .../ToscaConverterWithDictionarySupportItCase.java | 147 -------- ...caConverterWithDictionarySupportItTestCase.java | 147 ++++++++ .../policy/clamp/loop/CsarInstallerItCase.java | 322 ----------------- .../policy/clamp/loop/CsarInstallerItTestCase.java | 322 +++++++++++++++++ .../policy/clamp/loop/DeployFlowItTestCase.java | 320 +++++++++++++++++ .../policy/clamp/loop/DeployFlowTestItCase.java | 321 ----------------- .../clamp/loop/ExternalComponentStateTest.java | 20 +- .../clamp/loop/LoopControllerItTestCase.java | 175 ++++++++++ .../clamp/loop/LoopControllerTestItCase.java | 173 ---------- .../clamp/loop/LoopLogServiceItTestCase.java | 97 ++++++ .../clamp/loop/LoopLogServiceTestItCase.java | 95 ----- .../policy/clamp/loop/LoopRepositoriesItCase.java | 258 -------------- .../clamp/loop/LoopRepositoriesItTestCase.java | 258 ++++++++++++++ .../policy/clamp/loop/LoopServiceItTestCase.java | 381 +++++++++++++++++++++ .../policy/clamp/loop/LoopServiceTestItCase.java | 381 --------------------- .../clamp/loop/LoopTemplatesServiceItCase.java | 146 -------- .../clamp/loop/LoopTemplatesServiceItTestCase.java | 146 ++++++++ .../clamp/loop/PolicyModelServiceItCase.java | 300 ---------------- .../clamp/loop/PolicyModelServiceItTestCase.java | 299 ++++++++++++++++ .../org/onap/policy/clamp/loop/ServiceTest.java | 8 +- .../PolicyEngineControllerItTestCase.java | 118 +++++++ .../PolicyEngineControllerTestItCase.java | 119 ------- .../RuntimeCommissioningResponseItTestCase.java | 199 +++++++++++ .../RuntimeCommissioningResponseTestItCase.java | 197 ----------- .../clamp/tosca/DictionaryServiceItCase.java | 247 ------------- .../clamp/tosca/DictionaryServiceItTestCase.java | 248 ++++++++++++++ .../onap/policy/clamp/util/PassDecoderTest.java | 2 +- .../policy/clamp/util/SemanticVersioningTest.java | 8 +- 68 files changed, 3714 insertions(+), 3730 deletions(-) delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/AuthorizationControllerItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/AuthorizationControllerItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/CldsHealthcheckServiceItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/CldsHealthcheckServiceItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/HttpsItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/HttpsItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/RobotItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/RobotItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/config/CldsReferencePropertiesItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/config/CldsReferencePropertiesItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/config/SdcControllersConfigurationItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/config/SdcControllersConfigurationItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/sdc/controller/SdcSingleControllerItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/it/sdc/controller/SdcSingleControllerItTestCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseCacheItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseCacheTestItCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/tosca/DictionaryRepositoriesTestItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/tosca/DictionaryRepositoriesTestItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/CsarInstallerItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/CsarInstallerItTestCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/DeployFlowItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/DeployFlowTestItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/LoopControllerItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/LoopControllerTestItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/LoopLogServiceItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/LoopLogServiceTestItCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/LoopRepositoriesItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/LoopRepositoriesItTestCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/LoopServiceItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/LoopServiceTestItCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/LoopTemplatesServiceItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/LoopTemplatesServiceItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItTestCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/policy/downloader/PolicyEngineControllerItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/policy/downloader/PolicyEngineControllerTestItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/runtime/RuntimeCommissioningResponseItTestCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/runtime/RuntimeCommissioningResponseTestItCase.java delete mode 100644 runtime/src/test/java/org/onap/policy/clamp/tosca/DictionaryServiceItCase.java create mode 100644 runtime/src/test/java/org/onap/policy/clamp/tosca/DictionaryServiceItTestCase.java (limited to 'runtime/src') diff --git a/runtime/src/main/java/org/onap/policy/clamp/authorization/AuthorizationController.java b/runtime/src/main/java/org/onap/policy/clamp/authorization/AuthorizationController.java index 62614e729..cf639a35d 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/authorization/AuthorizationController.java +++ b/runtime/src/main/java/org/onap/policy/clamp/authorization/AuthorizationController.java @@ -35,7 +35,6 @@ import org.onap.policy.common.utils.logging.LoggerUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; diff --git a/runtime/src/main/java/org/onap/policy/clamp/clds/ClampServlet.java b/runtime/src/main/java/org/onap/policy/clamp/clds/ClampServlet.java index 0e520dec1..1e5b003f1 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/clds/ClampServlet.java +++ b/runtime/src/main/java/org/onap/policy/clamp/clds/ClampServlet.java @@ -26,7 +26,6 @@ package org.onap.policy.clamp.clds; import java.io.IOException; -import java.security.Principal; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -48,7 +47,6 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.User; -import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; public class ClampServlet extends CamelHttpTransportServlet { diff --git a/runtime/src/main/java/org/onap/policy/clamp/clds/client/CdsServices.java b/runtime/src/main/java/org/onap/policy/clamp/clds/client/CdsServices.java index 27f706d77..8f492c761 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/clds/client/CdsServices.java +++ b/runtime/src/main/java/org/onap/policy/clamp/clds/client/CdsServices.java @@ -34,7 +34,6 @@ import java.util.Date; import java.util.Map; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; -import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.ExchangeBuilder; import org.onap.policy.clamp.clds.exception.cds.CdsParametersException; import org.onap.policy.clamp.clds.model.cds.CdsBpWorkFlowListResponse; diff --git a/runtime/src/main/java/org/onap/policy/clamp/clds/config/ClampProperties.java b/runtime/src/main/java/org/onap/policy/clamp/clds/config/ClampProperties.java index 34f0662c7..0ac58fc80 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/clds/config/ClampProperties.java +++ b/runtime/src/main/java/org/onap/policy/clamp/clds/config/ClampProperties.java @@ -24,7 +24,6 @@ package org.onap.policy.clamp.clds.config; import java.io.IOException; -import java.net.URL; import java.nio.charset.StandardCharsets; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; diff --git a/runtime/src/main/java/org/onap/policy/clamp/clds/filter/ClampCadiFilter.java b/runtime/src/main/java/org/onap/policy/clamp/clds/filter/ClampCadiFilter.java index eb9de056c..7224493b5 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/clds/filter/ClampCadiFilter.java +++ b/runtime/src/main/java/org/onap/policy/clamp/clds/filter/ClampCadiFilter.java @@ -26,7 +26,6 @@ package org.onap.policy.clamp.clds.filter; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.nio.file.StandardCopyOption; diff --git a/runtime/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponse.java b/runtime/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponse.java index 9f5300a9f..9862728df 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponse.java +++ b/runtime/src/main/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponse.java @@ -1,13 +1,10 @@ - /*- * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ - * Modifications Copyright (c) 2021 AT&T Intellectual Property. All rights reserved. - * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at diff --git a/runtime/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/CsarHandler.java b/runtime/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/CsarHandler.java index 89046afd1..2ca463ede 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/CsarHandler.java +++ b/runtime/src/main/java/org/onap/policy/clamp/clds/sdc/controller/installer/CsarHandler.java @@ -24,11 +24,8 @@ package org.onap.policy.clamp.clds.sdc.controller.installer; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.Paths; import java.util.Enumeration; import java.util.HashMap; diff --git a/runtime/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplate.java b/runtime/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplate.java index 5c96f2c4a..8e619969d 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplate.java +++ b/runtime/src/main/java/org/onap/policy/clamp/clds/tosca/update/templates/JsonTemplate.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -148,9 +148,9 @@ public class JsonTemplate { * @return a boolean */ public boolean checkFields(JsonTemplate jsonTemplate) { - boolean duplicateFields = false; + var duplicateFields = false; if (jsonTemplate.getJsonTemplateFields().size() == this.getJsonTemplateFields().size()) { - int countMatchingFields = 0; + var countMatchingFields = 0; //loop each component of first for (JsonTemplateField jsonTemplateFieldToCheck : jsonTemplate.getJsonTemplateFields()) { for (JsonTemplateField jsonTemplateField : this.getJsonTemplateFields()) { diff --git a/runtime/src/main/java/org/onap/policy/clamp/clds/util/LoggingUtils.java b/runtime/src/main/java/org/onap/policy/clamp/clds/util/LoggingUtils.java index 5d09c065a..fcd375ad3 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/clds/util/LoggingUtils.java +++ b/runtime/src/main/java/org/onap/policy/clamp/clds/util/LoggingUtils.java @@ -292,7 +292,7 @@ public class LoggingUtils { * @param targetServiceName The target service name */ public void invoke(String targetEntity, String targetServiceName) { - final String invocationId = UUID.randomUUID().toString(); + final var invocationId = UUID.randomUUID().toString(); invokeContext(targetEntity, targetServiceName, invocationId); @@ -396,7 +396,7 @@ public class LoggingUtils { private T invokeGeneric(final T con, String targetEntity, String targetServiceName) { - final String invocationId = UUID.randomUUID().toString(); + final var invocationId = UUID.randomUUID().toString(); // Set standard HTTP headers on (southbound request) builder. con.setRequestProperty(OnapLogConstants.Headers.REQUEST_ID, diff --git a/runtime/src/main/java/org/onap/policy/clamp/loop/LoopService.java b/runtime/src/main/java/org/onap/policy/clamp/loop/LoopService.java index 946edd767..9449c25eb 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/loop/LoopService.java +++ b/runtime/src/main/java/org/onap/policy/clamp/loop/LoopService.java @@ -26,13 +26,11 @@ package org.onap.policy.clamp.loop; import com.google.gson.JsonObject; -import java.io.IOException; import java.util.List; import java.util.Set; import javax.persistence.EntityNotFoundException; import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport; import org.onap.policy.clamp.loop.template.LoopTemplatesService; -import org.onap.policy.clamp.loop.template.PolicyModel; import org.onap.policy.clamp.loop.template.PolicyModelsService; import org.onap.policy.clamp.policy.microservice.MicroServicePolicy; import org.onap.policy.clamp.policy.microservice.MicroServicePolicyService; diff --git a/runtime/src/main/java/org/onap/policy/clamp/loop/service/CsarServiceInstaller.java b/runtime/src/main/java/org/onap/policy/clamp/loop/service/CsarServiceInstaller.java index 53365806b..10d98e362 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/loop/service/CsarServiceInstaller.java +++ b/runtime/src/main/java/org/onap/policy/clamp/loop/service/CsarServiceInstaller.java @@ -120,7 +120,7 @@ public class CsarServiceInstaller { * @throws SdcArtifactInstallerException The SdcArtifactInstallerException */ public boolean isServiceAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException { - boolean alreadyInstalled = true; + var alreadyInstalled = true; var serviceDetails = JsonUtils.GSON.fromJson( JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class); alreadyInstalled = serviceRepository.existsById(serviceDetails.get("UUID").getAsString()); diff --git a/runtime/src/main/java/org/onap/policy/clamp/loop/service/Service.java b/runtime/src/main/java/org/onap/policy/clamp/loop/service/Service.java index cc4e4c2fc..c955d2696 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/loop/service/Service.java +++ b/runtime/src/main/java/org/onap/policy/clamp/loop/service/Service.java @@ -33,7 +33,6 @@ import javax.persistence.Table; import javax.persistence.Transient; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; -import org.hibernate.annotations.TypeDefs; import org.onap.policy.clamp.clds.util.JsonUtils; import org.onap.policy.clamp.dao.model.jsontype.StringJsonUserType; import org.slf4j.Logger; diff --git a/runtime/src/main/java/org/onap/policy/clamp/loop/template/LoopElementModel.java b/runtime/src/main/java/org/onap/policy/clamp/loop/template/LoopElementModel.java index 7477ae31f..e15731fc7 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/loop/template/LoopElementModel.java +++ b/runtime/src/main/java/org/onap/policy/clamp/loop/template/LoopElementModel.java @@ -163,8 +163,8 @@ public class LoopElementModel extends AuditEntity implements Serializable { @Override public int hashCode() { - final int prime = 31; - int result = 1; + final var prime = 31; + var result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } diff --git a/runtime/src/main/java/org/onap/policy/clamp/loop/template/PolicyModel.java b/runtime/src/main/java/org/onap/policy/clamp/loop/template/PolicyModel.java index 0d57caada..741530e99 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/loop/template/PolicyModel.java +++ b/runtime/src/main/java/org/onap/policy/clamp/loop/template/PolicyModel.java @@ -37,7 +37,6 @@ import javax.persistence.ManyToMany; import javax.persistence.Table; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; -import org.hibernate.annotations.TypeDefs; import org.onap.policy.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.policy.clamp.loop.common.AuditEntity; import org.onap.policy.clamp.util.SemanticVersioning; diff --git a/runtime/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicy.java b/runtime/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicy.java index 96edfa190..3f0f4e7b9 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicy.java +++ b/runtime/src/main/java/org/onap/policy/clamp/policy/microservice/MicroServicePolicy.java @@ -37,7 +37,6 @@ import javax.persistence.ManyToMany; import javax.persistence.Table; import org.apache.commons.lang3.RandomStringUtils; import org.hibernate.annotations.TypeDef; -import org.hibernate.annotations.TypeDefs; import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport; import org.onap.policy.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.policy.clamp.loop.Loop; diff --git a/runtime/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicy.java b/runtime/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicy.java index c7d67bd4e..203f2771e 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicy.java +++ b/runtime/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicy.java @@ -40,7 +40,6 @@ import javax.persistence.Table; import javax.persistence.Transient; import org.apache.commons.lang3.RandomStringUtils; import org.hibernate.annotations.TypeDef; -import org.hibernate.annotations.TypeDefs; import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySupport; import org.onap.policy.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.policy.clamp.loop.Loop; diff --git a/runtime/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyService.java b/runtime/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyService.java index 63df3a7b0..84bf72b62 100644 --- a/runtime/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyService.java +++ b/runtime/src/main/java/org/onap/policy/clamp/policy/operational/OperationalPolicyService.java @@ -32,8 +32,6 @@ import org.onap.policy.clamp.clds.tosca.update.ToscaConverterWithDictionarySuppo import org.onap.policy.clamp.loop.Loop; import org.onap.policy.clamp.loop.template.PolicyModelsRepository; import org.onap.policy.clamp.policy.PolicyService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/config/CldsUserJsonDecoderTest.java b/runtime/src/test/java/org/onap/policy/clamp/clds/config/CldsUserJsonDecoderTest.java index 605ab99ae..59d9e7320 100644 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/config/CldsUserJsonDecoderTest.java +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/config/CldsUserJsonDecoderTest.java @@ -6,6 +6,7 @@ * reserved. * ================================================================================ * Modifications Copyright (c) 2019 Samsung + * Modifications Copyright (c) 2021 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -71,7 +72,7 @@ public class CldsUserJsonDecoderTest { assertThat(usersArray).hasSize(1); CldsUser user = usersArray[0]; assertThat(user.getUser()).isEqualTo(user1); - assertThat(user.getPassword()).isEqualTo(null); + assertThat(user.getPassword()).isNull(); assertThat(user.getPermissionsString()).isEmpty(); } diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/config/sdc/SdcSingleControllerConfigurationTest.java b/runtime/src/test/java/org/onap/policy/clamp/clds/config/sdc/SdcSingleControllerConfigurationTest.java index 7390b65ba..eed3f4edb 100644 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/config/sdc/SdcSingleControllerConfigurationTest.java +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/config/sdc/SdcSingleControllerConfigurationTest.java @@ -74,8 +74,8 @@ public class SdcSingleControllerConfigurationTest { assertEquals(10, sdcConfig.getPollingInterval()); assertEquals(30, sdcConfig.getPollingTimeout()); - assertThat(SdcSingleControllerConfiguration.SUPPORTED_ARTIFACT_TYPES_LIST) - .hasSameSizeAs(sdcConfig.getRelevantArtifactTypes()); + assertThat(sdcConfig.getRelevantArtifactTypes()) + .hasSameSizeAs(SdcSingleControllerConfiguration.SUPPORTED_ARTIFACT_TYPES_LIST); assertEquals("ThePassword", sdcConfig.getKeyStorePassword()); assertTrue(sdcConfig.activateServerTLSAuth()); assertThat(sdcConfig.getMsgBusAddress()).contains("localhost"); @@ -103,6 +103,6 @@ public class SdcSingleControllerConfigurationTest { public final void testConsumerGroupWithNull() throws IOException { SdcSingleControllerConfiguration sdcConfig = loadControllerConfiguration("clds/sdc-controller-config-NULL.json", "sdc-controller1"); - assertTrue(sdcConfig.getConsumerGroup() == null); + assertNull(sdcConfig.getConsumerGroup()); } } diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/AuthorizationControllerItCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/AuthorizationControllerItCase.java deleted file mode 100644 index 45d4d64b1..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/it/AuthorizationControllerItCase.java +++ /dev/null @@ -1,139 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Modifications Copyright (c) 2019 Samsung - * Modifications Copyright (C) 2020 Nordix Foundation. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.clds.it; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.Arrays; -import java.util.Collection; -import org.apache.camel.Exchange; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.onap.policy.clamp.authorization.AuthorizationController; -import org.onap.policy.clamp.authorization.SecureServicePermission; -import org.onap.policy.clamp.clds.exception.NotAuthorizedException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.test.context.junit4.SpringRunner; - -/** - * Test CldsDAO calls through CldsModel and CldsEvent. This really test the DB - * and stored procedures. - */ -@RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class AuthorizationControllerItCase { - - @Autowired - private AuthorizationController auth; - - private static SecurityContext sc = SecurityContextHolder.getContext(); - - /** - * Setup the variable before the tests execution. - */ - @BeforeClass - public static void setupBefore() { - - sc.setAuthentication(new Authentication() { - private static final long serialVersionUID = -6282526745791629050L; - - @Override - public Collection getAuthorities() { - return Arrays.asList(new SimpleGrantedAuthority( - new SecureServicePermission("permission-type-cl", "dev", "read").getKey()), - new SimpleGrantedAuthority(new SecureServicePermission("permission-type-cl-manage", "dev", - "DEPLOY").getKey()), - new SimpleGrantedAuthority(new SecureServicePermission("permission-type-filter-vf", "dev", - "12345-55555-55555-5555").getKey())); - } - - @Override - public Object getCredentials() { - return null; - } - - @Override - public Object getDetails() { - return null; - } - - @Override - public Object getPrincipal() { - return "admin"; - } - - @Override - public boolean isAuthenticated() { - return true; - } - - @Override - public void setAuthenticated(boolean authenticatedFlag) throws IllegalArgumentException { - - } - - @Override - public String getName() { - return "admin"; - } - }); - - } - - @AfterClass - - public static void afterCleanup() { - sc.setAuthentication(null); - } - - @Test - public void testIsUserPermitted() { - assertEquals("admin", AuthorizationController.getPrincipalName(sc)); - assertTrue(auth.isUserPermitted(new SecureServicePermission("permission-type-cl", "dev", "read"))); - assertTrue(auth.isUserPermitted(new SecureServicePermission("permission-type-cl-manage", "dev", "DEPLOY"))); - assertTrue(auth.isUserPermitted( - new SecureServicePermission("permission-type-filter-vf", "dev", "12345-55555-55555-5555"))); - assertFalse(auth.isUserPermitted(new SecureServicePermission("permission-type-cl", "test", "read"))); - } - - @Test(expected = NotAuthorizedException.class) - public void testIfAuthorizeThrowException() { - Exchange ex = Mockito.mock(Exchange.class); - auth.authorize(ex, "cl", "test", "read"); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/AuthorizationControllerItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/AuthorizationControllerItTestCase.java new file mode 100644 index 000000000..746b8381a --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/it/AuthorizationControllerItTestCase.java @@ -0,0 +1,139 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Modifications Copyright (c) 2019 Samsung + * Modifications Copyright (C) 2020 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.clds.it; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.Collection; +import org.apache.camel.Exchange; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.onap.policy.clamp.authorization.AuthorizationController; +import org.onap.policy.clamp.authorization.SecureServicePermission; +import org.onap.policy.clamp.clds.exception.NotAuthorizedException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Test CldsDAO calls through CldsModel and CldsEvent. This really test the DB + * and stored procedures. + */ +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class AuthorizationControllerItTestCase { + + @Autowired + private AuthorizationController auth; + + private static SecurityContext sc = SecurityContextHolder.getContext(); + + /** + * Setup the variable before the tests execution. + */ + @BeforeClass + public static void setupBefore() { + + sc.setAuthentication(new Authentication() { + private static final long serialVersionUID = -6282526745791629050L; + + @Override + public Collection getAuthorities() { + return Arrays.asList(new SimpleGrantedAuthority( + new SecureServicePermission("permission-type-cl", "dev", "read").getKey()), + new SimpleGrantedAuthority(new SecureServicePermission("permission-type-cl-manage", "dev", + "DEPLOY").getKey()), + new SimpleGrantedAuthority(new SecureServicePermission("permission-type-filter-vf", "dev", + "12345-55555-55555-5555").getKey())); + } + + @Override + public Object getCredentials() { + return null; + } + + @Override + public Object getDetails() { + return null; + } + + @Override + public Object getPrincipal() { + return "admin"; + } + + @Override + public boolean isAuthenticated() { + return true; + } + + @Override + public void setAuthenticated(boolean authenticatedFlag) throws IllegalArgumentException { + + } + + @Override + public String getName() { + return "admin"; + } + }); + + } + + @AfterClass + + public static void afterCleanup() { + sc.setAuthentication(null); + } + + @Test + public void testIsUserPermitted() { + assertEquals("admin", AuthorizationController.getPrincipalName(sc)); + assertTrue(auth.isUserPermitted(new SecureServicePermission("permission-type-cl", "dev", "read"))); + assertTrue(auth.isUserPermitted(new SecureServicePermission("permission-type-cl-manage", "dev", "DEPLOY"))); + assertTrue(auth.isUserPermitted( + new SecureServicePermission("permission-type-filter-vf", "dev", "12345-55555-55555-5555"))); + assertFalse(auth.isUserPermitted(new SecureServicePermission("permission-type-cl", "test", "read"))); + } + + @Test(expected = NotAuthorizedException.class) + public void testIfAuthorizeThrowException() { + Exchange ex = Mockito.mock(Exchange.class); + auth.authorize(ex, "cl", "test", "read"); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/CldsHealthcheckServiceItCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/CldsHealthcheckServiceItCase.java deleted file mode 100644 index 52da63952..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/it/CldsHealthcheckServiceItCase.java +++ /dev/null @@ -1,55 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - */ - -package org.onap.policy.clamp.clds.it; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.model.CldsHealthCheck; -import org.onap.policy.clamp.clds.service.CldsHealthcheckService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -/** - * Tests HealthCheck Service. - */ -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -public class CldsHealthcheckServiceItCase { - - @Autowired - private CldsHealthcheckService cldsHealthcheckService; - - @Test - public void testGetHealthCheck() { - CldsHealthCheck cldsHealthCheck = cldsHealthcheckService.gethealthcheck(); - assertNotNull(cldsHealthCheck); - assertEquals("UP", cldsHealthCheck.getHealthCheckStatus()); - assertEquals("CLDS-APP", cldsHealthCheck.getHealthCheckComponent()); - assertEquals("OK", cldsHealthCheck.getDescription()); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/CldsHealthcheckServiceItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/CldsHealthcheckServiceItTestCase.java new file mode 100644 index 000000000..da2007e07 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/it/CldsHealthcheckServiceItTestCase.java @@ -0,0 +1,55 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017-2018, 2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + */ + +package org.onap.policy.clamp.clds.it; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.model.CldsHealthCheck; +import org.onap.policy.clamp.clds.service.CldsHealthcheckService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * Tests HealthCheck Service. + */ +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +public class CldsHealthcheckServiceItTestCase { + + @Autowired + private CldsHealthcheckService cldsHealthcheckService; + + @Test + public void testGetHealthCheck() { + CldsHealthCheck cldsHealthCheck = cldsHealthcheckService.gethealthcheck(); + assertNotNull(cldsHealthCheck); + assertEquals("UP", cldsHealthCheck.getHealthCheckStatus()); + assertEquals("CLDS-APP", cldsHealthCheck.getHealthCheckComponent()); + assertEquals("OK", cldsHealthCheck.getDescription()); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/HttpsItCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/HttpsItCase.java deleted file mode 100644 index 180c3094d..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/it/HttpsItCase.java +++ /dev/null @@ -1,106 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2017-2018, 2021 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.clds.it; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.io.File; -import java.nio.charset.Charset; -import java.security.KeyManagementException; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import javax.net.ssl.SSLContext; -import org.apache.commons.io.FileUtils; -import org.apache.http.conn.ssl.NoopHostnameVerifier; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.conn.ssl.TrustStrategy; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.web.client.RestTemplate; - -/** - * Test HTTP and HTTPS settings + redirection of HTTP to HTTPS. - */ -@RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT) -@TestPropertySource(locations = "classpath:https/https-test.properties") -@DirtiesContext -public class HttpsItCase { - - @Value("${server.port}") - private String httpsPort; - @Value("${server.http-to-https-redirection.port}") - private String httpPort; - - @Test - public void testDesignerIndex() throws Exception { - ResponseEntity entity = - new RestTemplate().getForEntity("http://localhost:" + this.httpPort + "/restservices/clds/api-doc", - String.class); - assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); - ResponseEntity httpsEntity = getRestTemplate() - .getForEntity("https://localhost:" + this.httpsPort + "/restservices/clds/api-doc", String.class); - assertThat(httpsEntity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(httpsEntity.getBody()).contains("Clamp Rest API"); - } - - @Test - public void testSwaggerJson() throws Exception { - ResponseEntity httpsEntity = getRestTemplate() - .getForEntity("https://localhost:" + this.httpsPort + "/restservices/clds/api-doc", String.class); - assertThat(httpsEntity.getStatusCode()).isEqualTo(HttpStatus.OK); - assertThat(httpsEntity.getBody()).contains("swagger"); - FileUtils.writeStringToFile(new File("target/swagger/swagger.json"), httpsEntity.getBody(), - Charset.defaultCharset()); - } - - private RestTemplate getRestTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { - SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom() - .loadTrustMaterial(null, new TrustStrategy() { - @Override - public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { - return true; - } - }).build(); - SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier()); - CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build(); - HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); - requestFactory.setHttpClient(httpClient); - RestTemplate restTemplate = new RestTemplate(requestFactory); - return restTemplate; - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/HttpsItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/HttpsItTestCase.java new file mode 100644 index 000000000..06f0c1310 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/it/HttpsItTestCase.java @@ -0,0 +1,106 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017-2018, 2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.clds.it; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.File; +import java.nio.charset.Charset; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import javax.net.ssl.SSLContext; +import org.apache.commons.io.FileUtils; +import org.apache.http.conn.ssl.NoopHostnameVerifier; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.TrustStrategy; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.web.client.RestTemplate; + +/** + * Test HTTP and HTTPS settings + redirection of HTTP to HTTPS. + */ +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT) +@TestPropertySource(locations = "classpath:https/https-test.properties") +@DirtiesContext +public class HttpsItTestCase { + + @Value("${server.port}") + private String httpsPort; + @Value("${server.http-to-https-redirection.port}") + private String httpPort; + + @Test + public void testDesignerIndex() throws Exception { + ResponseEntity entity = + new RestTemplate().getForEntity("http://localhost:" + this.httpPort + "/restservices/clds/api-doc", + String.class); + assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.FOUND); + ResponseEntity httpsEntity = getRestTemplate() + .getForEntity("https://localhost:" + this.httpsPort + "/restservices/clds/api-doc", String.class); + assertThat(httpsEntity.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(httpsEntity.getBody()).contains("Clamp Rest API"); + } + + @Test + public void testSwaggerJson() throws Exception { + ResponseEntity httpsEntity = getRestTemplate() + .getForEntity("https://localhost:" + this.httpsPort + "/restservices/clds/api-doc", String.class); + assertThat(httpsEntity.getStatusCode()).isEqualTo(HttpStatus.OK); + assertThat(httpsEntity.getBody()).contains("swagger"); + FileUtils.writeStringToFile(new File("target/swagger/swagger.json"), httpsEntity.getBody(), + Charset.defaultCharset()); + } + + private RestTemplate getRestTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { + SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom() + .loadTrustMaterial(null, new TrustStrategy() { + @Override + public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { + return true; + } + }).build(); + SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier()); + CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build(); + HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); + requestFactory.setHttpClient(httpClient); + RestTemplate restTemplate = new RestTemplate(requestFactory); + return restTemplate; + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/RobotItCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/RobotItCase.java deleted file mode 100644 index 66c7f3589..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/it/RobotItCase.java +++ /dev/null @@ -1,136 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.clds.it; - -import static org.apache.commons.io.FileUtils.copyInputStreamToFile; - -import com.github.dockerjava.api.DockerClient; -import com.github.dockerjava.api.command.BuildImageResultCallback; -import com.github.dockerjava.api.command.CreateContainerResponse; -import com.github.dockerjava.api.command.InspectContainerResponse; -import com.github.dockerjava.api.command.LogContainerCmd; -import com.github.dockerjava.api.model.AccessMode; -import com.github.dockerjava.api.model.Bind; -import com.github.dockerjava.api.model.BuildResponseItem; -import com.github.dockerjava.api.model.Frame; -import com.github.dockerjava.api.model.Volume; -import com.github.dockerjava.core.DockerClientBuilder; -import com.github.dockerjava.core.command.LogContainerResultCallback; -import com.github.dockerjava.netty.NettyDockerCmdExecFactory; -import java.io.File; -import java.util.Objects; -import org.codehaus.plexus.util.FileUtils; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) -@TestPropertySource(locations = "classpath:robotframework/robotframework-test.properties") -@DirtiesContext -public class RobotItCase { - - @Value("${server.port}") - private String httpPort; - private static final int TIMEOUT_S = 150; - protected static final Logger logger = LoggerFactory.getLogger(RobotItCase.class); - - @Test - public void robotTests() throws Exception { - File robotFolder = new File(getClass().getClassLoader().getResource("robotframework").getFile()); - Volume testsVolume = new Volume("/opt/robotframework/tests"); - // @formatter:off - DockerClient client = - DockerClientBuilder - .getInstance() - .withDockerCmdExecFactory(new NettyDockerCmdExecFactory()) - .build(); - // @formatter:on - - BuildImageResultCallback callback = new BuildImageResultCallback() { - @Override - public void onNext(BuildResponseItem item) { - System.out.println("XXX ITEM " + item); - super.onNext(item); - } - }; - - String imageId = client.buildImageCmd(robotFolder).exec(callback).awaitImageId(); - // @formatter:off - CreateContainerResponse createContainerResponse = - client - .createContainerCmd(imageId) - .withVolumes(testsVolume) - .withBinds(new Bind(robotFolder.getAbsolutePath() + "/tests/", testsVolume, AccessMode.rw)) - .withEnv("CLAMP_PORT=" + httpPort) - .withStopTimeout(TIMEOUT_S) - .withNetworkMode("host") - .exec(); - // @formatter:on - String id = createContainerResponse.getId(); - client.startContainerCmd(id).exec(); - InspectContainerResponse exec; - - int tries = 0; - do { - Thread.sleep(1000); - exec = client.inspectContainerCmd(id).exec(); - tries++; - } while (exec.getState().getRunning() && tries < TIMEOUT_S); - logger.info("RobotFramework result: {}", exec.getState()); - - LogContainerCmd logContainerCmd = client.logContainerCmd(id); - logContainerCmd.withStdOut(true).withStdErr(true); - try { - logContainerCmd.exec(new LogContainerResultCallback() { - @Override - public void onNext(Frame item) { - logger.info(item.toString()); - } - }).awaitCompletion(); - } catch (InterruptedException e) { - throw new Exception("Failed to retrieve logs of container " + id, e); - } - - copyInputStreamToFile(client.copyArchiveFromContainerCmd(id, "/opt/robotframework/reports/output.xml").exec(), - new File("target/robotframework/output.xml")); - copyInputStreamToFile(client.copyArchiveFromContainerCmd(id, "/opt/robotframework/reports/log.html").exec(), - new File("target/robotframework/log.html")); - copyInputStreamToFile(client.copyArchiveFromContainerCmd(id, "/opt/robotframework/reports/report.html").exec(), - new File("target/robotframework/report.html")); - client.stopContainerCmd(id); - - logger.info("RobotFramework output.xml file: {}", FileUtils.fileRead("target/robotframework/output.xml")); - - Assert.assertEquals(exec.getState().getError(), 0L, - Objects.requireNonNull(exec.getState().getExitCodeLong()).longValue()); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/RobotItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/RobotItTestCase.java new file mode 100644 index 000000000..367bd4109 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/it/RobotItTestCase.java @@ -0,0 +1,136 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.clds.it; + +import static org.apache.commons.io.FileUtils.copyInputStreamToFile; + +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.api.command.BuildImageResultCallback; +import com.github.dockerjava.api.command.CreateContainerResponse; +import com.github.dockerjava.api.command.InspectContainerResponse; +import com.github.dockerjava.api.command.LogContainerCmd; +import com.github.dockerjava.api.model.AccessMode; +import com.github.dockerjava.api.model.Bind; +import com.github.dockerjava.api.model.BuildResponseItem; +import com.github.dockerjava.api.model.Frame; +import com.github.dockerjava.api.model.Volume; +import com.github.dockerjava.core.DockerClientBuilder; +import com.github.dockerjava.core.command.LogContainerResultCallback; +import com.github.dockerjava.netty.NettyDockerCmdExecFactory; +import java.io.File; +import java.util.Objects; +import org.codehaus.plexus.util.FileUtils; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) +@TestPropertySource(locations = "classpath:robotframework/robotframework-test.properties") +@DirtiesContext +public class RobotItTestCase { + + @Value("${server.port}") + private String httpPort; + private static final int TIMEOUT_S = 150; + protected static final Logger logger = LoggerFactory.getLogger(RobotItTestCase.class); + + @Test + public void robotTests() throws Exception { + File robotFolder = new File(getClass().getClassLoader().getResource("robotframework").getFile()); + Volume testsVolume = new Volume("/opt/robotframework/tests"); + // @formatter:off + DockerClient client = + DockerClientBuilder + .getInstance() + .withDockerCmdExecFactory(new NettyDockerCmdExecFactory()) + .build(); + // @formatter:on + + BuildImageResultCallback callback = new BuildImageResultCallback() { + @Override + public void onNext(BuildResponseItem item) { + System.out.println("XXX ITEM " + item); + super.onNext(item); + } + }; + + String imageId = client.buildImageCmd(robotFolder).exec(callback).awaitImageId(); + // @formatter:off + CreateContainerResponse createContainerResponse = + client + .createContainerCmd(imageId) + .withVolumes(testsVolume) + .withBinds(new Bind(robotFolder.getAbsolutePath() + "/tests/", testsVolume, AccessMode.rw)) + .withEnv("CLAMP_PORT=" + httpPort) + .withStopTimeout(TIMEOUT_S) + .withNetworkMode("host") + .exec(); + // @formatter:on + String id = createContainerResponse.getId(); + client.startContainerCmd(id).exec(); + InspectContainerResponse exec; + + int tries = 0; + do { + Thread.sleep(1000); + exec = client.inspectContainerCmd(id).exec(); + tries++; + } while (exec.getState().getRunning() && tries < TIMEOUT_S); + logger.info("RobotFramework result: {}", exec.getState()); + + LogContainerCmd logContainerCmd = client.logContainerCmd(id); + logContainerCmd.withStdOut(true).withStdErr(true); + try { + logContainerCmd.exec(new LogContainerResultCallback() { + @Override + public void onNext(Frame item) { + logger.info(item.toString()); + } + }).awaitCompletion(); + } catch (InterruptedException e) { + throw new Exception("Failed to retrieve logs of container " + id, e); + } + + copyInputStreamToFile(client.copyArchiveFromContainerCmd(id, "/opt/robotframework/reports/output.xml").exec(), + new File("target/robotframework/output.xml")); + copyInputStreamToFile(client.copyArchiveFromContainerCmd(id, "/opt/robotframework/reports/log.html").exec(), + new File("target/robotframework/log.html")); + copyInputStreamToFile(client.copyArchiveFromContainerCmd(id, "/opt/robotframework/reports/report.html").exec(), + new File("target/robotframework/report.html")); + client.stopContainerCmd(id); + + logger.info("RobotFramework output.xml file: {}", FileUtils.fileRead("target/robotframework/output.xml")); + + Assert.assertEquals(exec.getState().getError(), 0L, + Objects.requireNonNull(exec.getState().getExitCodeLong()).longValue()); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/CldsReferencePropertiesItCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/CldsReferencePropertiesItCase.java deleted file mode 100644 index c8b9932cc..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/CldsReferencePropertiesItCase.java +++ /dev/null @@ -1,64 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.clds.it.config; - -import static org.junit.Assert.assertEquals; - -import java.io.IOException; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.config.ClampProperties; -import org.onap.policy.clamp.clds.util.ResourceFileUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class CldsReferencePropertiesItCase { - - @Autowired - private ClampProperties refProp; - - /** - * Test getting a value the properties in string. - */ - @Test - public void testGetStringValue() { - assertEquals("healthcheck", refProp.getStringValue("policy.api.userName")); - } - - /** - * Test getting prop value as a JSON Node / template. - * - * @throws IOException when JSON parsing fails - */ - @Test - public void testGetFileContent() throws IOException { - String users = ResourceFileUtils.getResourceAsString("clds/clds-users.json"); - assertEquals(users, refProp.getFileContent("files.cldsUsers")); - // Test composite key - assertEquals(users, refProp.getFileContent("files", "cldsUsers")); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/CldsReferencePropertiesItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/CldsReferencePropertiesItTestCase.java new file mode 100644 index 000000000..eeed51c12 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/CldsReferencePropertiesItTestCase.java @@ -0,0 +1,64 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2017-2018, 2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.clds.it.config; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.config.ClampProperties; +import org.onap.policy.clamp.clds.util.ResourceFileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class CldsReferencePropertiesItTestCase { + + @Autowired + private ClampProperties refProp; + + /** + * Test getting a value the properties in string. + */ + @Test + public void testGetStringValue() { + assertEquals("healthcheck", refProp.getStringValue("policy.api.userName")); + } + + /** + * Test getting prop value as a JSON Node / template. + * + * @throws IOException when JSON parsing fails + */ + @Test + public void testGetFileContent() throws IOException { + String users = ResourceFileUtils.getResourceAsString("clds/clds-users.json"); + assertEquals(users, refProp.getFileContent("files.cldsUsers")); + // Test composite key + assertEquals(users, refProp.getFileContent("files", "cldsUsers")); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/SdcControllersConfigurationItCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/SdcControllersConfigurationItCase.java deleted file mode 100644 index 70aeccf59..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/SdcControllersConfigurationItCase.java +++ /dev/null @@ -1,88 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP POLICY-CLAMP - * ================================================================================ - * Copyright (C) 2017, 2021 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.clamp.clds.it.config; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import com.google.gson.JsonSyntaxException; -import java.io.IOException; -import java.util.Map; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.config.sdc.SdcControllersConfiguration; -import org.onap.policy.clamp.clds.config.sdc.SdcSingleControllerConfiguration; -import org.onap.policy.clamp.clds.exception.sdc.controller.SdcParametersException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.util.ReflectionTestUtils; - -/** - * This class tests the SDC Controller config. - */ -@RunWith(SpringRunner.class) -@SpringBootTest -@ActiveProfiles({"clamp-default", "clamp-default-user", "clamp-sdc-controller"}) -public class SdcControllersConfigurationItCase { - - @Autowired - private SdcControllersConfiguration sdcControllersConfiguration; - - public final void loadFile(String fileName) throws IOException { - ReflectionTestUtils.setField(sdcControllersConfiguration, "sdcControllerFile", fileName); - sdcControllersConfiguration.loadConfiguration(); - } - - @Test - public void testGetAllDefinedControllers() throws IOException { - loadFile("classpath:clds/sdc-controllers-config.json"); - Map mapResult = sdcControllersConfiguration - .getAllDefinedControllers(); - assertTrue(mapResult.size() == 2); - assertEquals("sdc-controller1", mapResult.get("sdc-controller1").getSdcControllerName()); - assertEquals("sdc-controller2", mapResult.get("sdc-controller2").getSdcControllerName()); - } - - @Test - public void testGetSdcSingleControllerConfiguration() throws IOException { - loadFile("classpath:clds/sdc-controllers-config.json"); - assertEquals("sdc-controller1", sdcControllersConfiguration - .getSdcSingleControllerConfiguration("sdc-controller1").getSdcControllerName()); - assertEquals("sdc-controller2", sdcControllersConfiguration - .getSdcSingleControllerConfiguration("sdc-controller2").getSdcControllerName()); - } - - @Test(expected = JsonSyntaxException.class) - public void testBadJsonLoading() throws IOException { - loadFile("classpath:clds/sdc-controllers-config-bad.json"); - fail("Should have raised an exception"); - } - - @Test(expected = SdcParametersException.class) - public void testMissingParamInJsonLoading() throws IOException { - loadFile("classpath:clds/sdc-controllers-config-missing-param.json"); - sdcControllersConfiguration.getAllDefinedControllers(); - fail("Should have raised an exception"); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/SdcControllersConfigurationItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/SdcControllersConfigurationItTestCase.java new file mode 100644 index 000000000..cf4987fa8 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/it/config/SdcControllersConfigurationItTestCase.java @@ -0,0 +1,88 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP POLICY-CLAMP + * ================================================================================ + * Copyright (C) 2017, 2021 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.clamp.clds.it.config; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import com.google.gson.JsonSyntaxException; +import java.io.IOException; +import java.util.Map; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.config.sdc.SdcControllersConfiguration; +import org.onap.policy.clamp.clds.config.sdc.SdcSingleControllerConfiguration; +import org.onap.policy.clamp.clds.exception.sdc.controller.SdcParametersException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.util.ReflectionTestUtils; + +/** + * This class tests the SDC Controller config. + */ +@RunWith(SpringRunner.class) +@SpringBootTest +@ActiveProfiles({"clamp-default", "clamp-default-user", "clamp-sdc-controller"}) +public class SdcControllersConfigurationItTestCase { + + @Autowired + private SdcControllersConfiguration sdcControllersConfiguration; + + public final void loadFile(String fileName) throws IOException { + ReflectionTestUtils.setField(sdcControllersConfiguration, "sdcControllerFile", fileName); + sdcControllersConfiguration.loadConfiguration(); + } + + @Test + public void testGetAllDefinedControllers() throws IOException { + loadFile("classpath:clds/sdc-controllers-config.json"); + Map mapResult = sdcControllersConfiguration + .getAllDefinedControllers(); + assertThat(mapResult).hasSize(2); + assertEquals("sdc-controller1", mapResult.get("sdc-controller1").getSdcControllerName()); + assertEquals("sdc-controller2", mapResult.get("sdc-controller2").getSdcControllerName()); + } + + @Test + public void testGetSdcSingleControllerConfiguration() throws IOException { + loadFile("classpath:clds/sdc-controllers-config.json"); + assertEquals("sdc-controller1", sdcControllersConfiguration + .getSdcSingleControllerConfiguration("sdc-controller1").getSdcControllerName()); + assertEquals("sdc-controller2", sdcControllersConfiguration + .getSdcSingleControllerConfiguration("sdc-controller2").getSdcControllerName()); + } + + @Test(expected = JsonSyntaxException.class) + public void testBadJsonLoading() throws IOException { + loadFile("classpath:clds/sdc-controllers-config-bad.json"); + fail("Should have raised an exception"); + } + + @Test(expected = SdcParametersException.class) + public void testMissingParamInJsonLoading() throws IOException { + loadFile("classpath:clds/sdc-controllers-config-missing-param.json"); + sdcControllersConfiguration.getAllDefinedControllers(); + fail("Should have raised an exception"); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/sdc/controller/SdcSingleControllerItCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/sdc/controller/SdcSingleControllerItCase.java deleted file mode 100644 index 787118902..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/it/sdc/controller/SdcSingleControllerItCase.java +++ /dev/null @@ -1,152 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Modifications Copyright (c) 2019 Samsung - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.clds.it.sdc.controller; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import org.assertj.core.api.Assertions; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.onap.policy.clamp.clds.config.ClampProperties; -import org.onap.policy.clamp.clds.config.sdc.SdcSingleControllerConfigurationTest; -import org.onap.policy.clamp.clds.exception.sdc.controller.SdcControllerException; -import org.onap.policy.clamp.clds.sdc.controller.SdcSingleController; -import org.onap.policy.clamp.clds.sdc.controller.SdcSingleControllerStatus; -import org.onap.policy.clamp.clds.sdc.controller.installer.CsarHandler; -import org.onap.policy.clamp.loop.CsarInstaller; -import org.onap.sdc.api.notification.IArtifactInfo; -import org.onap.sdc.api.notification.INotificationData; -import org.onap.sdc.api.notification.IResourceInstance; -import org.slf4j.MDC; -import org.slf4j.spi.MDCAdapter; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -@ActiveProfiles({"clamp-default", "clamp-default-user", "clamp-sdc-controller"}) -public class SdcSingleControllerItCase { - - private static final String CSAR_ARTIFACT_NAME = "testArtifact.csar"; - private static final String SERVICE_UUID = "serviceUUID"; - private static final String RESOURCE1_UUID = "resource1UUID"; - private static final String RESOURCE1_INSTANCE_NAME = "sim-1802 0"; - - @Autowired - private ClampProperties clampProp; - - private SdcSingleController sdcSingleController; - - private CsarInstaller csarInstaller = mock(CsarInstaller.class); - - private INotificationData buildFakeSdcNotification() { - // BUild what is needed for CSAR - IArtifactInfo serviceArtifact = mock(IArtifactInfo.class); - Mockito.when(serviceArtifact.getArtifactType()).thenReturn(CsarHandler.CSAR_TYPE); - Mockito.when(serviceArtifact.getArtifactName()).thenReturn(CSAR_ARTIFACT_NAME); - List servicesList = new ArrayList<>(); - servicesList.add(serviceArtifact); - INotificationData notifData = mock(INotificationData.class); - Mockito.when(notifData.getServiceArtifacts()).thenReturn(servicesList); - // Build what is needed for UUID - Mockito.when(notifData.getServiceInvariantUUID()).thenReturn(SERVICE_UUID); - // Build fake resource with one artifact BLUEPRINT - IResourceInstance resource1 = mock(IResourceInstance.class); - Mockito.when(resource1.getResourceType()).thenReturn("VF"); - Mockito.when(resource1.getResourceInvariantUUID()).thenReturn(RESOURCE1_UUID); - Mockito.when(resource1.getResourceInstanceName()).thenReturn(RESOURCE1_INSTANCE_NAME); - // Create a fake artifact for resource - IArtifactInfo blueprintArtifact = mock(IArtifactInfo.class); - Mockito.when(blueprintArtifact.getArtifactType()).thenReturn(CsarHandler.BLUEPRINT_TYPE); - List artifactsListForResource = new ArrayList<>(); - artifactsListForResource.add(blueprintArtifact); - Mockito.when(resource1.getArtifacts()).thenReturn(artifactsListForResource); - List resourcesList = new ArrayList<>(); - resourcesList.add(resource1); - Mockito.when(notifData.getResources()).thenReturn(resourcesList); - return notifData; - } - - /** - * Initialization method. - */ - @Before - public void init() { - sdcSingleController = new SdcSingleController(clampProp, csarInstaller, SdcSingleControllerConfigurationTest - .loadControllerConfiguration("clds/sdc-controller-config-TLS.json", "sdc-controller1"), null) { - }; - } - - @Test - public void testTreatNotification() { - // when - sdcSingleController.treatNotification(buildFakeSdcNotification()); - // then - Assertions.assertThat(sdcSingleController.getNbOfNotificationsOngoing()).isEqualTo(0); - } - - @Test - public void testCloseSdc() throws SdcControllerException { - // when - sdcSingleController.closeSdc(); - // then - assertThat(sdcSingleController.getControllerStatus()).isEqualTo(SdcSingleControllerStatus.STOPPED); - } - - @Test - public void testActivateCallback() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException, - InstantiationException, ClassNotFoundException { - // given - - Class innerClass = Class - .forName("org.onap.policy.clamp.clds.sdc.controller.SdcSingleController$SdcNotificationCallBack"); - Constructor constructor = innerClass.getDeclaredConstructor(SdcSingleController.class, - SdcSingleController.class); - constructor.setAccessible(true); - Object child = constructor.newInstance(sdcSingleController, sdcSingleController); - Method method = child.getClass().getDeclaredMethod("activateCallback", INotificationData.class); - method.setAccessible(true); - MDCAdapter mdcAdapter = MDC.getMDCAdapter(); - // when - method.invoke(child, buildFakeSdcNotification()); - // then - assertThat(mdcAdapter.get("ResponseCode")).isEqualTo("0"); - assertThat(mdcAdapter.get("StatusCode")).isEqualTo("COMPLETE"); - assertThat(mdcAdapter.get("ResponseDescription")) - .isEqualTo("SDC Notification received and processed successfully"); - assertThat(mdcAdapter.get("ClassName")).isEqualTo(child.getClass().getName()); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/it/sdc/controller/SdcSingleControllerItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/it/sdc/controller/SdcSingleControllerItTestCase.java new file mode 100644 index 000000000..2201d1a2e --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/it/sdc/controller/SdcSingleControllerItTestCase.java @@ -0,0 +1,152 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2018, 2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Modifications Copyright (c) 2019 Samsung + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.clds.it.sdc.controller; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import org.assertj.core.api.Assertions; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.onap.policy.clamp.clds.config.ClampProperties; +import org.onap.policy.clamp.clds.config.sdc.SdcSingleControllerConfigurationTest; +import org.onap.policy.clamp.clds.exception.sdc.controller.SdcControllerException; +import org.onap.policy.clamp.clds.sdc.controller.SdcSingleController; +import org.onap.policy.clamp.clds.sdc.controller.SdcSingleControllerStatus; +import org.onap.policy.clamp.clds.sdc.controller.installer.CsarHandler; +import org.onap.policy.clamp.loop.CsarInstaller; +import org.onap.sdc.api.notification.IArtifactInfo; +import org.onap.sdc.api.notification.INotificationData; +import org.onap.sdc.api.notification.IResourceInstance; +import org.slf4j.MDC; +import org.slf4j.spi.MDCAdapter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +@ActiveProfiles({"clamp-default", "clamp-default-user", "clamp-sdc-controller"}) +public class SdcSingleControllerItTestCase { + + private static final String CSAR_ARTIFACT_NAME = "testArtifact.csar"; + private static final String SERVICE_UUID = "serviceUUID"; + private static final String RESOURCE1_UUID = "resource1UUID"; + private static final String RESOURCE1_INSTANCE_NAME = "sim-1802 0"; + + @Autowired + private ClampProperties clampProp; + + private SdcSingleController sdcSingleController; + + private CsarInstaller csarInstaller = mock(CsarInstaller.class); + + private INotificationData buildFakeSdcNotification() { + // BUild what is needed for CSAR + IArtifactInfo serviceArtifact = mock(IArtifactInfo.class); + Mockito.when(serviceArtifact.getArtifactType()).thenReturn(CsarHandler.CSAR_TYPE); + Mockito.when(serviceArtifact.getArtifactName()).thenReturn(CSAR_ARTIFACT_NAME); + List servicesList = new ArrayList<>(); + servicesList.add(serviceArtifact); + INotificationData notifData = mock(INotificationData.class); + Mockito.when(notifData.getServiceArtifacts()).thenReturn(servicesList); + // Build what is needed for UUID + Mockito.when(notifData.getServiceInvariantUUID()).thenReturn(SERVICE_UUID); + // Build fake resource with one artifact BLUEPRINT + IResourceInstance resource1 = mock(IResourceInstance.class); + Mockito.when(resource1.getResourceType()).thenReturn("VF"); + Mockito.when(resource1.getResourceInvariantUUID()).thenReturn(RESOURCE1_UUID); + Mockito.when(resource1.getResourceInstanceName()).thenReturn(RESOURCE1_INSTANCE_NAME); + // Create a fake artifact for resource + IArtifactInfo blueprintArtifact = mock(IArtifactInfo.class); + Mockito.when(blueprintArtifact.getArtifactType()).thenReturn(CsarHandler.BLUEPRINT_TYPE); + List artifactsListForResource = new ArrayList<>(); + artifactsListForResource.add(blueprintArtifact); + Mockito.when(resource1.getArtifacts()).thenReturn(artifactsListForResource); + List resourcesList = new ArrayList<>(); + resourcesList.add(resource1); + Mockito.when(notifData.getResources()).thenReturn(resourcesList); + return notifData; + } + + /** + * Initialization method. + */ + @Before + public void init() { + sdcSingleController = new SdcSingleController(clampProp, csarInstaller, SdcSingleControllerConfigurationTest + .loadControllerConfiguration("clds/sdc-controller-config-TLS.json", "sdc-controller1"), null) { + }; + } + + @Test + public void testTreatNotification() { + // when + sdcSingleController.treatNotification(buildFakeSdcNotification()); + // then + Assertions.assertThat(sdcSingleController.getNbOfNotificationsOngoing()).isZero(); + } + + @Test + public void testCloseSdc() throws SdcControllerException { + // when + sdcSingleController.closeSdc(); + // then + assertThat(sdcSingleController.getControllerStatus()).isEqualTo(SdcSingleControllerStatus.STOPPED); + } + + @Test + public void testActivateCallback() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException, + InstantiationException, ClassNotFoundException { + // given + + Class innerClass = Class + .forName("org.onap.policy.clamp.clds.sdc.controller.SdcSingleController$SdcNotificationCallBack"); + Constructor constructor = innerClass.getDeclaredConstructor(SdcSingleController.class, + SdcSingleController.class); + constructor.setAccessible(true); + Object child = constructor.newInstance(sdcSingleController, sdcSingleController); + Method method = child.getClass().getDeclaredMethod("activateCallback", INotificationData.class); + method.setAccessible(true); + MDCAdapter mdcAdapter = MDC.getMDCAdapter(); + // when + method.invoke(child, buildFakeSdcNotification()); + // then + assertThat(mdcAdapter.get("ResponseCode")).isEqualTo("0"); + assertThat(mdcAdapter.get("StatusCode")).isEqualTo("COMPLETE"); + assertThat(mdcAdapter.get("ResponseDescription")) + .isEqualTo("SDC Notification received and processed successfully"); + assertThat(mdcAdapter.get("ClassName")).isEqualTo(child.getClass().getName()); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseCacheItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseCacheItTestCase.java new file mode 100644 index 000000000..71d5f2dab --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseCacheItTestCase.java @@ -0,0 +1,127 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.clds.model.dcae; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; + +import java.util.HashSet; +import java.util.Set; +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.builder.ExchangeBuilder; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpStatus; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class DcaeInventoryResponseCacheItTestCase { + + public static DcaeInventoryCache inventoryCache = new DcaeInventoryCache(); + + @Autowired + CamelContext camelContext; + + /** + * Initialize the responses. + */ + @BeforeClass + public static void createExample() { + DcaeInventoryResponse response1 = new DcaeInventoryResponse(); + response1.setAsdcServiceId("id1"); + response1.setAsdcResourceId("0"); + DcaeInventoryResponse response2 = new DcaeInventoryResponse(); + response2.setAsdcServiceId("id1"); + response2.setAsdcResourceId("1"); + DcaeInventoryResponse response3 = new DcaeInventoryResponse(); + response3.setAsdcServiceId("id1"); + response3.setAsdcResourceId("2"); + DcaeInventoryResponse response4 = new DcaeInventoryResponse(); + response4.setAsdcServiceId("id2"); + response4.setAsdcResourceId("0"); + DcaeInventoryResponse response5 = new DcaeInventoryResponse(); + response5.setAsdcServiceId("id2"); + response5.setAsdcResourceId("1"); + + inventoryCache.addDcaeInventoryResponse(response1); + inventoryCache.addDcaeInventoryResponse(response3); + inventoryCache.addDcaeInventoryResponse(response2); + inventoryCache.addDcaeInventoryResponse(response4); + inventoryCache.addDcaeInventoryResponse(response5); + } + + @Test + public void testGetAllLoopIds() { + assertThat(inventoryCache.getAllLoopIds().size()).isEqualTo(2); + } + + @Test + public void testGetAllBlueprintsPerLoopId() { + int value = 0; + for (DcaeInventoryResponse inventoryResponse : inventoryCache.getAllBlueprintsPerLoopId("id1")) { + assertThat(Integer.valueOf(inventoryResponse.getAsdcResourceId())).isEqualTo(value++); + } + + value = 0; + for (DcaeInventoryResponse inventoryResponse : inventoryCache.getAllBlueprintsPerLoopId("id2")) { + assertThat(Integer.valueOf(inventoryResponse.getAsdcResourceId())).isEqualTo(value++); + } + } + + @Test + public void testDcaeInventoryResponse() { + Exchange exchange = ExchangeBuilder.anExchange(camelContext).build(); + Exchange exchangeResponse = camelContext.createProducerTemplate() + .send("direct:get-all-dcae-blueprint-inventory", exchange); + assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) + .is2xxSuccessful()).isTrue(); + Set blueprint = inventoryCache.getAllBlueprintsPerLoopId("testAsdcServiceId"); + assertThat(blueprint.size()).isEqualTo(2); + + DcaeInventoryResponse response1 = new DcaeInventoryResponse(); + response1.setAsdcResourceId("0"); + response1.setTypeName("testTypeName"); + response1.setAsdcServiceId("testAsdcServiceId"); + response1.setBlueprintTemplate("testBlueprintTemplate"); + response1.setTypeId("testtypeId"); + DcaeInventoryResponse response2 = new DcaeInventoryResponse(); + response2.setAsdcResourceId("1"); + response2.setTypeName("testTypeName2"); + response2.setAsdcServiceId("testAsdcServiceId"); + response2.setBlueprintTemplate("testBlueprintTemplate2"); + response2.setTypeId("testtypeId2"); + + Set expectedBlueprint = new HashSet<>(); + expectedBlueprint.add(response1); + expectedBlueprint.add(response2); + + assertEquals(blueprint, expectedBlueprint); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseCacheTestItCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseCacheTestItCase.java deleted file mode 100644 index f406e5ed2..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseCacheTestItCase.java +++ /dev/null @@ -1,127 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.clds.model.dcae; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; - -import java.util.HashSet; -import java.util.Set; -import org.apache.camel.CamelContext; -import org.apache.camel.Exchange; -import org.apache.camel.builder.ExchangeBuilder; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.HttpStatus; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class DcaeInventoryResponseCacheTestItCase { - - public static DcaeInventoryCache inventoryCache = new DcaeInventoryCache(); - - @Autowired - CamelContext camelContext; - - /** - * Initialize the responses. - */ - @BeforeClass - public static void createExample() { - DcaeInventoryResponse response1 = new DcaeInventoryResponse(); - response1.setAsdcServiceId("id1"); - response1.setAsdcResourceId("0"); - DcaeInventoryResponse response2 = new DcaeInventoryResponse(); - response2.setAsdcServiceId("id1"); - response2.setAsdcResourceId("1"); - DcaeInventoryResponse response3 = new DcaeInventoryResponse(); - response3.setAsdcServiceId("id1"); - response3.setAsdcResourceId("2"); - DcaeInventoryResponse response4 = new DcaeInventoryResponse(); - response4.setAsdcServiceId("id2"); - response4.setAsdcResourceId("0"); - DcaeInventoryResponse response5 = new DcaeInventoryResponse(); - response5.setAsdcServiceId("id2"); - response5.setAsdcResourceId("1"); - - inventoryCache.addDcaeInventoryResponse(response1); - inventoryCache.addDcaeInventoryResponse(response3); - inventoryCache.addDcaeInventoryResponse(response2); - inventoryCache.addDcaeInventoryResponse(response4); - inventoryCache.addDcaeInventoryResponse(response5); - } - - @Test - public void testGetAllLoopIds() { - assertThat(inventoryCache.getAllLoopIds().size()).isEqualTo(2); - } - - @Test - public void testGetAllBlueprintsPerLoopId() { - int value = 0; - for (DcaeInventoryResponse inventoryResponse : inventoryCache.getAllBlueprintsPerLoopId("id1")) { - assertThat(Integer.valueOf(inventoryResponse.getAsdcResourceId())).isEqualTo(value++); - } - - value = 0; - for (DcaeInventoryResponse inventoryResponse : inventoryCache.getAllBlueprintsPerLoopId("id2")) { - assertThat(Integer.valueOf(inventoryResponse.getAsdcResourceId())).isEqualTo(value++); - } - } - - @Test - public void testDcaeInventoryResponse() { - Exchange exchange = ExchangeBuilder.anExchange(camelContext).build(); - Exchange exchangeResponse = camelContext.createProducerTemplate() - .send("direct:get-all-dcae-blueprint-inventory", exchange); - assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) - .is2xxSuccessful()).isTrue(); - Set blueprint = inventoryCache.getAllBlueprintsPerLoopId("testAsdcServiceId"); - assertThat(blueprint.size()).isEqualTo(2); - - DcaeInventoryResponse response1 = new DcaeInventoryResponse(); - response1.setAsdcResourceId("0"); - response1.setTypeName("testTypeName"); - response1.setAsdcServiceId("testAsdcServiceId"); - response1.setBlueprintTemplate("testBlueprintTemplate"); - response1.setTypeId("testtypeId"); - DcaeInventoryResponse response2 = new DcaeInventoryResponse(); - response2.setAsdcResourceId("1"); - response2.setTypeName("testTypeName2"); - response2.setAsdcServiceId("testAsdcServiceId"); - response2.setBlueprintTemplate("testBlueprintTemplate2"); - response2.setTypeId("testtypeId2"); - - Set expectedBlueprint = new HashSet<>(); - expectedBlueprint.add(response1); - expectedBlueprint.add(response2); - - assertEquals(blueprint, expectedBlueprint); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseTest.java b/runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseTest.java index a246e0efa..25b3b92c9 100644 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseTest.java +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/model/dcae/DcaeInventoryResponseTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -53,7 +53,7 @@ public class DcaeInventoryResponseTest { int value = 0; for (DcaeInventoryResponse inventoryResponse : responseSet) { - assertThat(Integer.valueOf(inventoryResponse.getAsdcResourceId()) == value++).isTrue(); + assertThat(Integer.valueOf(inventoryResponse.getAsdcResourceId())).isSameAs(value++); } } } diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/DictionaryRepositoriesTestItCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/DictionaryRepositoriesTestItCase.java deleted file mode 100644 index f70e74cd6..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/DictionaryRepositoriesTestItCase.java +++ /dev/null @@ -1,88 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.clds.tosca; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.List; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.tosca.Dictionary; -import org.onap.policy.clamp.tosca.DictionaryElement; -import org.onap.policy.clamp.tosca.DictionaryRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.transaction.annotation.Transactional; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(classes = Application.class) -public class DictionaryRepositoriesTestItCase { - @Autowired - private DictionaryRepository dictionaryRepository; - - @Test - @Transactional - public void crudTest() { - // Setup - Dictionary dictionaryTest1 = new Dictionary(); - dictionaryTest1.setName("testDictionary1"); - dictionaryTest1.setSecondLevelDictionary(1); - dictionaryTest1.setSubDictionaryType("testType"); - - DictionaryElement element1 = new DictionaryElement(); - element1.setName("element1"); - element1.setShortName("shortName1"); - element1.setType("type1"); - element1.setDescription("description1"); - - dictionaryTest1.addDictionaryElements(element1); - - Dictionary dictionaryTest2 = new Dictionary(); - dictionaryTest2.setName("testDictionary2"); - dictionaryTest2.setSecondLevelDictionary(1); - dictionaryTest2.setSubDictionaryType("testType"); - - DictionaryElement element2 = new DictionaryElement(); - element2.setName("element2"); - element2.setShortName("shortName2"); - element2.setSubDictionary("testDictionary1"); - element2.setType("type2"); - element2.setDescription("description2"); - - dictionaryTest2.addDictionaryElements(element2); - - dictionaryRepository.save(dictionaryTest1); - List res1 = dictionaryRepository.getAllDictionaryNames(); - assertThat(res1.size()).isGreaterThanOrEqualTo(1); - assertThat(res1).contains("testDictionary1"); - - dictionaryRepository.save(dictionaryTest2); - List res2 = dictionaryRepository.getAllDictionaryNames(); - assertThat(res2.size()).isGreaterThanOrEqualTo(2); - assertThat(res2).contains("testDictionary1"); - assertThat(res2).contains("testDictionary2"); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/DictionaryRepositoriesTestItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/DictionaryRepositoriesTestItTestCase.java new file mode 100644 index 000000000..5880bad0b --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/DictionaryRepositoriesTestItTestCase.java @@ -0,0 +1,88 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.clds.tosca; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.tosca.Dictionary; +import org.onap.policy.clamp.tosca.DictionaryElement; +import org.onap.policy.clamp.tosca.DictionaryRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = Application.class) +public class DictionaryRepositoriesTestItTestCase { + @Autowired + private DictionaryRepository dictionaryRepository; + + @Test + @Transactional + public void crudTest() { + // Setup + Dictionary dictionaryTest1 = new Dictionary(); + dictionaryTest1.setName("testDictionary1"); + dictionaryTest1.setSecondLevelDictionary(1); + dictionaryTest1.setSubDictionaryType("testType"); + + DictionaryElement element1 = new DictionaryElement(); + element1.setName("element1"); + element1.setShortName("shortName1"); + element1.setType("type1"); + element1.setDescription("description1"); + + dictionaryTest1.addDictionaryElements(element1); + + Dictionary dictionaryTest2 = new Dictionary(); + dictionaryTest2.setName("testDictionary2"); + dictionaryTest2.setSecondLevelDictionary(1); + dictionaryTest2.setSubDictionaryType("testType"); + + DictionaryElement element2 = new DictionaryElement(); + element2.setName("element2"); + element2.setShortName("shortName2"); + element2.setSubDictionary("testDictionary1"); + element2.setType("type2"); + element2.setDescription("description2"); + + dictionaryTest2.addDictionaryElements(element2); + + dictionaryRepository.save(dictionaryTest1); + List res1 = dictionaryRepository.getAllDictionaryNames(); + assertThat(res1.size()).isPositive(); + assertThat(res1).contains("testDictionary1"); + + dictionaryRepository.save(dictionaryTest2); + List res2 = dictionaryRepository.getAllDictionaryNames(); + assertThat(res2.size()).isGreaterThanOrEqualTo(2); + assertThat(res2).contains("testDictionary1") + .contains("testDictionary2"); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/JsonTemplateFieldTest.java b/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/JsonTemplateFieldTest.java index 3eaa0ce51..ad8593787 100644 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/JsonTemplateFieldTest.java +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/JsonTemplateFieldTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -49,11 +49,11 @@ public class JsonTemplateFieldTest extends TestCase { * Test equals method. */ public void testEqualsMethod() { - assertTrue(field1.equals(field2)); - assertTrue(field1.equals(field3)); - assertTrue(field1.equals(field4)); - assertTrue(field1.equals(field5)); - assertTrue(field1.equals(field6)); + assertEquals(field1, field2); + assertEquals(field1, field3); + assertEquals(field1, field4); + assertEquals(field1, field5); + assertEquals(field1, field6); } /** @@ -64,6 +64,6 @@ public class JsonTemplateFieldTest extends TestCase { assertFalse(field1.compareWithField(field3)); assertFalse(field1.compareWithField(field4)); assertFalse(field1.compareWithField(field5)); - assertTrue(field1.equals(field6)); + assertEquals(field1, field6); } -} \ No newline at end of file +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/JsonTemplateTest.java b/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/JsonTemplateTest.java index dc27d8aaa..63bc36321 100644 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/JsonTemplateTest.java +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/JsonTemplateTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -58,12 +58,11 @@ public class JsonTemplateTest extends TestCase { toTest.setVisibility("moreField", true); toTest.setStatic("moreField", true); toTest.updateValueField("moreField", "testValue"); - + assertTrue(toTest.isVisible("moreField")); - assertTrue(toTest.getSpecificField("moreField").getValue().equals("testValue")); + assertEquals("testValue", toTest.getSpecificField("moreField").getValue()); assertTrue(toTest.fieldStaticStatus("moreField")); - assertTrue(toTest.toString() - .equals(" templateFields : [type null null null, description null null null, " - + "enum null null null, moreField testValue true true]")); + assertEquals(" templateFields : [type null null null, description null null null, " + + "enum null null null, moreField testValue true true]", toTest.toString()); } -} \ No newline at end of file +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItCase.java deleted file mode 100644 index 658419d4c..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItCase.java +++ /dev/null @@ -1,147 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.clds.tosca.update; - -import com.google.gson.JsonObject; -import java.io.IOException; -import javax.transaction.Transactional; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.clds.tosca.update.execution.ToscaMetadataExecutor; -import org.onap.policy.clamp.clds.tosca.update.parser.metadata.ToscaMetadataParserWithDictionarySupport; -import org.onap.policy.clamp.clds.tosca.update.templates.JsonTemplateManager; -import org.onap.policy.clamp.clds.util.JsonUtils; -import org.onap.policy.clamp.clds.util.ResourceFileUtils; -import org.onap.policy.clamp.loop.service.Service; -import org.onap.policy.clamp.tosca.Dictionary; -import org.onap.policy.clamp.tosca.DictionaryElement; -import org.onap.policy.clamp.tosca.DictionaryService; -import org.skyscreamer.jsonassert.JSONAssert; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(classes = Application.class) -@ActiveProfiles({"clamp-default", "clamp-default-user", "default-dictionary-elements"}) -public class ToscaConverterWithDictionarySupportItCase { - - @Autowired - private DictionaryService dictionaryService; - - @Autowired - private ToscaMetadataParserWithDictionarySupport toscaMetadataParserWithDictionarySupport; - - @Autowired - private ToscaMetadataExecutor toscaMetadataExecutor; - - /** - * This Test validates Tosca yaml with metadata tag that contains policy_model_type and acronym - * parameters which defines the Tosca Policy name and its short name. - * - * @throws IOException In case of issue when opening the tosca yaml file and - * converted json file - */ - @Test - @Transactional - public final void testMetadataClampPossibleValues() throws IOException, UnknownComponentException { - - // Set up dictionary elements - Dictionary dictionaryTest = new Dictionary(); - dictionaryTest.setName("Context"); - dictionaryTest.setSecondLevelDictionary(0); - - DictionaryElement element = new DictionaryElement(); - element.setName("PROD"); - element.setShortName("PROD"); - element.setType("string"); - element.setDescription("Production"); - dictionaryTest.addDictionaryElements(element); - - dictionaryService.saveOrUpdateDictionary(dictionaryTest); - - Dictionary dictionaryTest1 = new Dictionary(); - dictionaryTest1.setName("EventDictionary"); - dictionaryTest1.setSecondLevelDictionary(0); - - DictionaryElement element1 = new DictionaryElement(); - element1.setName("alarmCondition"); - element1.setShortName("alarmCondition"); - element1.setType("string"); - element1.setDescription("Alarm Condition"); - dictionaryTest1.addDictionaryElements(element1); - - dictionaryService.saveOrUpdateDictionary(dictionaryTest1); - - Dictionary dictionaryTest2 = new Dictionary(); - dictionaryTest2.setName("Operators"); - dictionaryTest2.setSecondLevelDictionary(0); - - DictionaryElement element2 = new DictionaryElement(); - element2.setName("equals"); - element2.setShortName("equals"); - element2.setType("string"); - element2.setDescription("equals"); - dictionaryTest2.addDictionaryElements(element2); - dictionaryService.saveOrUpdateDictionary(dictionaryTest2); - - JsonTemplateManager jsonTemplateManager = - new JsonTemplateManager( - ResourceFileUtils - .getResourceAsString("tosca/new-converter/tosca_metadata_clamp_possible_values.yaml"), - ResourceFileUtils.getResourceAsString("clds/tosca-converter/default-tosca-types.yaml"), - ResourceFileUtils.getResourceAsString("clds/tosca-converter/templates.json")); - - JsonObject jsonSchema = jsonTemplateManager.getJsonSchemaForPolicyType( - "onap.policies.monitoring.cdap.tca.hi.lo.app", toscaMetadataParserWithDictionarySupport, null); - - JSONAssert.assertEquals( - ResourceFileUtils - .getResourceAsString("tosca/new-converter/tca-with-metadata.json"), - JsonUtils.GSON.toJson(jsonSchema), true); - } - - @Test - @Transactional - public final void testMetadataClampPossibleValueWithExecutor() throws IOException, UnknownComponentException { - Service service = new Service(ResourceFileUtils.getResourceAsString("tosca/service-details.json"), - ResourceFileUtils.getResourceAsString("tosca/resource-details-cds.json")); - JsonTemplateManager jsonTemplateManager = - new JsonTemplateManager( - ResourceFileUtils.getResourceAsString("http-cache/example/policy/api/v1/policytypes/onap" - + ".policies.controlloop.operational.common.Apex/versions/1.0.0/.file"), - ResourceFileUtils.getResourceAsString("clds/tosca-converter/default-tosca-types.yaml"), - ResourceFileUtils.getResourceAsString("clds/tosca-converter/templates.json")); - - JsonObject jsonSchema = jsonTemplateManager.getJsonSchemaForPolicyType( - "onap.policies.controlloop.operational.common.Apex", toscaMetadataParserWithDictionarySupport, service); - - JSONAssert.assertEquals( - ResourceFileUtils - .getResourceAsString("tosca/new-converter/tosca_apex_with_metadata.json"), - JsonUtils.GSON.toJson(jsonSchema), true); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItTestCase.java new file mode 100644 index 000000000..1d78d6ce1 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/clds/tosca/update/ToscaConverterWithDictionarySupportItTestCase.java @@ -0,0 +1,147 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.clds.tosca.update; + +import com.google.gson.JsonObject; +import java.io.IOException; +import javax.transaction.Transactional; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.clds.tosca.update.execution.ToscaMetadataExecutor; +import org.onap.policy.clamp.clds.tosca.update.parser.metadata.ToscaMetadataParserWithDictionarySupport; +import org.onap.policy.clamp.clds.tosca.update.templates.JsonTemplateManager; +import org.onap.policy.clamp.clds.util.JsonUtils; +import org.onap.policy.clamp.clds.util.ResourceFileUtils; +import org.onap.policy.clamp.loop.service.Service; +import org.onap.policy.clamp.tosca.Dictionary; +import org.onap.policy.clamp.tosca.DictionaryElement; +import org.onap.policy.clamp.tosca.DictionaryService; +import org.skyscreamer.jsonassert.JSONAssert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = Application.class) +@ActiveProfiles({"clamp-default", "clamp-default-user", "default-dictionary-elements"}) +public class ToscaConverterWithDictionarySupportItTestCase { + + @Autowired + private DictionaryService dictionaryService; + + @Autowired + private ToscaMetadataParserWithDictionarySupport toscaMetadataParserWithDictionarySupport; + + @Autowired + private ToscaMetadataExecutor toscaMetadataExecutor; + + /** + * This Test validates Tosca yaml with metadata tag that contains policy_model_type and acronym + * parameters which defines the Tosca Policy name and its short name. + * + * @throws IOException In case of issue when opening the tosca yaml file and + * converted json file + */ + @Test + @Transactional + public final void testMetadataClampPossibleValues() throws IOException, UnknownComponentException { + + // Set up dictionary elements + Dictionary dictionaryTest = new Dictionary(); + dictionaryTest.setName("Context"); + dictionaryTest.setSecondLevelDictionary(0); + + DictionaryElement element = new DictionaryElement(); + element.setName("PROD"); + element.setShortName("PROD"); + element.setType("string"); + element.setDescription("Production"); + dictionaryTest.addDictionaryElements(element); + + dictionaryService.saveOrUpdateDictionary(dictionaryTest); + + Dictionary dictionaryTest1 = new Dictionary(); + dictionaryTest1.setName("EventDictionary"); + dictionaryTest1.setSecondLevelDictionary(0); + + DictionaryElement element1 = new DictionaryElement(); + element1.setName("alarmCondition"); + element1.setShortName("alarmCondition"); + element1.setType("string"); + element1.setDescription("Alarm Condition"); + dictionaryTest1.addDictionaryElements(element1); + + dictionaryService.saveOrUpdateDictionary(dictionaryTest1); + + Dictionary dictionaryTest2 = new Dictionary(); + dictionaryTest2.setName("Operators"); + dictionaryTest2.setSecondLevelDictionary(0); + + DictionaryElement element2 = new DictionaryElement(); + element2.setName("equals"); + element2.setShortName("equals"); + element2.setType("string"); + element2.setDescription("equals"); + dictionaryTest2.addDictionaryElements(element2); + dictionaryService.saveOrUpdateDictionary(dictionaryTest2); + + JsonTemplateManager jsonTemplateManager = + new JsonTemplateManager( + ResourceFileUtils + .getResourceAsString("tosca/new-converter/tosca_metadata_clamp_possible_values.yaml"), + ResourceFileUtils.getResourceAsString("clds/tosca-converter/default-tosca-types.yaml"), + ResourceFileUtils.getResourceAsString("clds/tosca-converter/templates.json")); + + JsonObject jsonSchema = jsonTemplateManager.getJsonSchemaForPolicyType( + "onap.policies.monitoring.cdap.tca.hi.lo.app", toscaMetadataParserWithDictionarySupport, null); + + JSONAssert.assertEquals( + ResourceFileUtils + .getResourceAsString("tosca/new-converter/tca-with-metadata.json"), + JsonUtils.GSON.toJson(jsonSchema), true); + } + + @Test + @Transactional + public final void testMetadataClampPossibleValueWithExecutor() throws IOException, UnknownComponentException { + Service service = new Service(ResourceFileUtils.getResourceAsString("tosca/service-details.json"), + ResourceFileUtils.getResourceAsString("tosca/resource-details-cds.json")); + JsonTemplateManager jsonTemplateManager = + new JsonTemplateManager( + ResourceFileUtils.getResourceAsString("http-cache/example/policy/api/v1/policytypes/onap" + + ".policies.controlloop.operational.common.Apex/versions/1.0.0/.file"), + ResourceFileUtils.getResourceAsString("clds/tosca-converter/default-tosca-types.yaml"), + ResourceFileUtils.getResourceAsString("clds/tosca-converter/templates.json")); + + JsonObject jsonSchema = jsonTemplateManager.getJsonSchemaForPolicyType( + "onap.policies.controlloop.operational.common.Apex", toscaMetadataParserWithDictionarySupport, service); + + JSONAssert.assertEquals( + ResourceFileUtils + .getResourceAsString("tosca/new-converter/tosca_apex_with_metadata.json"), + JsonUtils.GSON.toJson(jsonSchema), true); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/CsarInstallerItCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/CsarInstallerItCase.java deleted file mode 100644 index b0abf832b..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/loop/CsarInstallerItCase.java +++ /dev/null @@ -1,322 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP POLICY-CLAMP - * ================================================================================ - * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Modifications copyright (c) 2019 Nokia - * Modifications Copyright (c) 2019 Samsung - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.loop; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import javax.transaction.Transactional; -import org.apache.commons.lang3.RandomStringUtils; -import org.assertj.core.api.Assertions; -import org.json.JSONException; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mockito; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.clds.exception.sdc.controller.BlueprintParserException; -import org.onap.policy.clamp.clds.exception.sdc.controller.CsarHandlerException; -import org.onap.policy.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; -import org.onap.policy.clamp.clds.sdc.controller.installer.BlueprintArtifact; -import org.onap.policy.clamp.clds.sdc.controller.installer.CsarHandler; -import org.onap.policy.clamp.clds.util.JsonUtils; -import org.onap.policy.clamp.clds.util.ResourceFileUtils; -import org.onap.policy.clamp.loop.cds.CdsDataInstaller; -import org.onap.policy.clamp.loop.service.ServicesRepository; -import org.onap.policy.clamp.loop.template.LoopTemplate; -import org.onap.policy.clamp.loop.template.LoopTemplateLoopElementModel; -import org.onap.policy.clamp.loop.template.LoopTemplatesRepository; -import org.onap.policy.clamp.loop.template.PolicyModelId; -import org.onap.policy.clamp.loop.template.PolicyModelsRepository; -import org.onap.sdc.api.notification.IArtifactInfo; -import org.onap.sdc.api.notification.INotificationData; -import org.onap.sdc.api.notification.IResourceInstance; -import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; -import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; -import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory; -import org.onap.sdc.toscaparser.api.elements.Metadata; -import org.skyscreamer.jsonassert.JSONAssert; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.Commit; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -@ActiveProfiles({"clamp-default", "clamp-default-user", "clamp-sdc-controller"}) -public class CsarInstallerItCase { - - private static final String CSAR_ARTIFACT_NAME_CDS = "example/sdc/service_Vloadbalancerms_cds.csar"; - private static final String CSAR_ARTIFACT_NAME_NO_CDS = "example/sdc/service_Vloadbalancerms_no_cds.csar"; - private static final String INVARIANT_SERVICE_UUID = "4cc5b45a-1f63-4194-8100-cd8e14248c92"; - private static final String INVARIANT_RESOURCE1_UUID = "07e266fc-49ab-4cd7-8378-ca4676f1b9ec"; - private static final String INVARIANT_RESOURCE2_UUID = "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"; - private static final String RESOURCE_INSTANCE_NAME_RESOURCE1 = "ResourceInstanceName1"; - private static final String RESOURCE_INSTANCE_NAME_RESOURCE2 = "ResourceInstanceName2"; - - @Autowired - private LoopTemplatesRepository loopTemplatesRepo; - - @Autowired - ServicesRepository serviceRepository; - - @Autowired - PolicyModelsRepository policyModelsRepository; - - @Autowired - @Qualifier("csarInstaller") - private CsarInstaller csarInstaller; - - private BlueprintArtifact buildFakeBlueprintArtifact(String instanceName, String invariantResourceUuid, - String blueprintFilePath, String artifactName, - String invariantServiceUuid) throws IOException { - IResourceInstance resource = Mockito.mock(IResourceInstance.class); - Mockito.when(resource.getResourceInstanceName()).thenReturn(instanceName); - Mockito.when(resource.getResourceInvariantUUID()).thenReturn(invariantResourceUuid); - BlueprintArtifact blueprintArtifact = Mockito.mock(BlueprintArtifact.class); - Mockito.when(blueprintArtifact.getDcaeBlueprint()) - .thenReturn(ResourceFileUtils.getResourceAsString(blueprintFilePath)); - Mockito.when(blueprintArtifact.getBlueprintArtifactName()).thenReturn(artifactName); - Mockito.when(blueprintArtifact.getBlueprintInvariantServiceUuid()).thenReturn(invariantServiceUuid); - Mockito.when(blueprintArtifact.getResourceAttached()).thenReturn(resource); - return blueprintArtifact; - } - - private CsarHandler buildBadFakeCsarHandler(String generatedName, String csarFileName) throws IOException, - SdcToscaParserException { - - // Build a Bad csar because the blueprint contains a link to a microservice that does not exist in the emulator - // Create fake notification - INotificationData notificationData = Mockito.mock(INotificationData.class); - Mockito.when(notificationData.getServiceVersion()).thenReturn("1.0"); - // Create fake resource in notification - CsarHandler csarHandler = Mockito.mock(CsarHandler.class); - List listResources = new ArrayList<>(); - Mockito.when(notificationData.getResources()).thenReturn(listResources); - Map blueprintMap = new HashMap<>(); - Mockito.when(csarHandler.getMapOfBlueprints()).thenReturn(blueprintMap); - // Create fake blueprint artifact 1 on resource1 - BlueprintArtifact blueprintArtifact = buildFakeBlueprintArtifact(RESOURCE_INSTANCE_NAME_RESOURCE1, - INVARIANT_RESOURCE1_UUID, "example/sdc/blueprint-dcae/tca-bad-policy.yaml", "tca-bad-policy.yaml", - INVARIANT_SERVICE_UUID); - listResources.add(blueprintArtifact.getResourceAttached()); - blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); - - // Build fake csarhandler - Mockito.when(csarHandler.getSdcNotification()).thenReturn(notificationData); - // Build fake csar Helper - ISdcCsarHelper csarHelper = Mockito.mock(ISdcCsarHelper.class); - Metadata data = Mockito.mock(Metadata.class); - Mockito.when(data.getValue("name")).thenReturn(generatedName); - Mockito.when(notificationData.getServiceName()).thenReturn(generatedName); - Mockito.when(csarHelper.getServiceMetadata()).thenReturn(data); - - // Create helper based on real csar to test policy yaml and global properties - // set - SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); - String path = Thread.currentThread().getContextClassLoader().getResource(csarFileName).getFile(); - ISdcCsarHelper sdcHelper = factory.getSdcCsarHelper(path); - Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(sdcHelper); - - // Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(csarHelper); - Mockito.when(csarHandler.getPolicyModelYaml()) - .thenReturn(Optional.ofNullable(ResourceFileUtils.getResourceAsString("tosca/tosca_example.yaml"))); - return csarHandler; - } - - private CsarHandler buildFakeCsarHandler(String generatedName, String csarFileName) throws IOException, - SdcToscaParserException { - // Create fake notification - INotificationData notificationData = Mockito.mock(INotificationData.class); - Mockito.when(notificationData.getServiceVersion()).thenReturn("1.0"); - // Create fake resource in notification - CsarHandler csarHandler = Mockito.mock(CsarHandler.class); - List listResources = new ArrayList<>(); - Mockito.when(notificationData.getResources()).thenReturn(listResources); - Map blueprintMap = new HashMap<>(); - Mockito.when(csarHandler.getMapOfBlueprints()).thenReturn(blueprintMap); - // Create fake blueprint artifact 1 on resource1 - BlueprintArtifact blueprintArtifact = buildFakeBlueprintArtifact(RESOURCE_INSTANCE_NAME_RESOURCE1, - INVARIANT_RESOURCE1_UUID, "example/sdc/blueprint-dcae/tca.yaml", "tca.yaml", INVARIANT_SERVICE_UUID); - listResources.add(blueprintArtifact.getResourceAttached()); - blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); - // Create fake blueprint artifact 2 on resource2 - blueprintArtifact = buildFakeBlueprintArtifact(RESOURCE_INSTANCE_NAME_RESOURCE2, INVARIANT_RESOURCE2_UUID, - "example/sdc/blueprint-dcae/tca_2.yaml", "tca_2.yaml", INVARIANT_SERVICE_UUID); - listResources.add(blueprintArtifact.getResourceAttached()); - blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); - - // Create fake blueprint artifact 3 on resource 1 so that it's possible to - // test multiple CL deployment per Service/vnf - blueprintArtifact = buildFakeBlueprintArtifact(RESOURCE_INSTANCE_NAME_RESOURCE1, INVARIANT_RESOURCE1_UUID, - "example/sdc/blueprint-dcae/tca_3.yaml", "tca_3.yaml", INVARIANT_SERVICE_UUID); - blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); - - // Create fake blueprint artifact 3 on resource 1 so that it's possible to - // test multiple CL deployment per Service/vnf - blueprintArtifact = buildFakeBlueprintArtifact(RESOURCE_INSTANCE_NAME_RESOURCE1, INVARIANT_RESOURCE1_UUID, - "example/sdc/blueprint-dcae/tca-guilin.yaml", "tca-guilin.yaml", INVARIANT_SERVICE_UUID); - blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); - - - // Build fake csarhandler - Mockito.when(csarHandler.getSdcNotification()).thenReturn(notificationData); - // Build fake csar Helper - ISdcCsarHelper csarHelper = Mockito.mock(ISdcCsarHelper.class); - Metadata data = Mockito.mock(Metadata.class); - Mockito.when(data.getValue("name")).thenReturn(generatedName); - Mockito.when(notificationData.getServiceName()).thenReturn(generatedName); - Mockito.when(csarHelper.getServiceMetadata()).thenReturn(data); - - // Create helper based on real csar to test policy yaml and global properties - // set - SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); - String path = Thread.currentThread().getContextClassLoader().getResource(csarFileName).getFile(); - ISdcCsarHelper sdcHelper = factory.getSdcCsarHelper(path); - Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(sdcHelper); - - // Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(csarHelper); - Mockito.when(csarHandler.getPolicyModelYaml()) - .thenReturn(Optional.ofNullable(ResourceFileUtils.getResourceAsString("tosca/tosca_example.yaml"))); - return csarHandler; - } - - @Test - @Transactional - public void testGetPolicyModelYaml() throws IOException, SdcToscaParserException, CsarHandlerException { - INotificationData notificationData = Mockito.mock(INotificationData.class); - IArtifactInfo serviceArtifacts = Mockito.mock(IArtifactInfo.class); - Mockito.when(serviceArtifacts.getArtifactType()).thenReturn("TOSCA_CSAR"); - List serviceArtifactsList = new ArrayList<>(); - serviceArtifactsList.add(serviceArtifacts); - Mockito.when(notificationData.getServiceArtifacts()).thenReturn(serviceArtifactsList); - - CsarHandler csarHandler = new CsarHandler(notificationData, "", ""); - csarHandler.setFilePath(Thread.currentThread().getContextClassLoader().getResource(CSAR_ARTIFACT_NAME_CDS) - .getFile()); - Assert.assertEquals(csarHandler.getPolicyModelYaml(), Optional - .ofNullable(ResourceFileUtils.getResourceAsString("example/sdc/expected-result/policy-data.yaml"))); - } - - @Test - @Transactional - public void testIsCsarAlreadyDeployedTca() throws SdcArtifactInstallerException, SdcToscaParserException, - CsarHandlerException, IOException, InterruptedException, BlueprintParserException { - String generatedName = RandomStringUtils.randomAlphanumeric(5); - CsarHandler csarHandler = buildFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_CDS); - assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isFalse(); - csarInstaller.installTheCsar(csarHandler); - assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isTrue(); - } - - @Test - @Transactional - public void testWithoutCdsTca() throws SdcArtifactInstallerException, SdcToscaParserException, - CsarHandlerException, IOException, InterruptedException, BlueprintParserException { - String generatedName = RandomStringUtils.randomAlphanumeric(5); - CsarHandler csarHandler = buildFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_NO_CDS); - - assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isFalse(); - csarInstaller.installTheCsar(csarHandler); - assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isTrue(); - } - - @Test(expected = SdcArtifactInstallerException.class) - @Transactional - public void testInstallTheBadCsarTca() - throws IOException, SdcToscaParserException, InterruptedException, BlueprintParserException, - SdcArtifactInstallerException { - // This test validates that the blueprint is well rejected because the blueprint contains a link - // to a policy that does not exist on the policy engine emulator. - String generatedName = RandomStringUtils.randomAlphanumeric(5); - csarInstaller.installTheCsar(buildBadFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_NO_CDS)); - } - - @Test - @Transactional - @Commit - public void testInstallTheCsarTca() throws SdcArtifactInstallerException, SdcToscaParserException, - CsarHandlerException, IOException, JSONException, InterruptedException, BlueprintParserException { - String generatedName = RandomStringUtils.randomAlphanumeric(5); - csarInstaller.installTheCsar(buildFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_CDS)); - - assertThat(serviceRepository.existsById("63cac700-ab9a-4115-a74f-7eac85e3fce0")).isTrue(); - // We should have CDS info - assertThat(serviceRepository.findById("63cac700-ab9a-4115-a74f-7eac85e3fce0").get().getResourceByType("VF") - .getAsJsonObject("vLoadBalancerMS 0").getAsJsonObject( - CdsDataInstaller.CONTROLLER_PROPERTIES)).isNotNull(); - assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", - RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml"))).isTrue(); - assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", - RESOURCE_INSTANCE_NAME_RESOURCE1, "tca_3.yaml"))).isTrue(); - assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", - RESOURCE_INSTANCE_NAME_RESOURCE2, "tca_2.yaml"))).isTrue(); - assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", - RESOURCE_INSTANCE_NAME_RESOURCE1, "tca-guilin.yaml"))).isTrue(); - // Verify now that policy and json representation, global properties are well - // set - LoopTemplate loopTemplate = loopTemplatesRepo.findById(LoopTemplate.generateLoopTemplateName(generatedName, - "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml")).get(); - assertThat(loopTemplate.getLoopElementModelsUsed()).hasSize(1); - Assertions.assertThat(loopTemplate.getModelService().getServiceUuid()) - .isEqualTo("63cac700-ab9a-4115-a74f-7eac85e3fce0"); - JSONAssert.assertEquals(ResourceFileUtils.getResourceAsString("tosca/model-properties.json"), - JsonUtils.GSON_JPA_MODEL.toJson(loopTemplate.getModelService()), true); - JSONAssert.assertEquals(ResourceFileUtils.getResourceAsString("tosca/service-details.json"), - JsonUtils.GSON_JPA_MODEL.toJson(loopTemplate.getModelService().getServiceDetails()), true); - JSONAssert.assertEquals(ResourceFileUtils.getResourceAsString("tosca/resource-details.json"), - JsonUtils.GSON_JPA_MODEL.toJson(loopTemplate.getModelService().getResourceDetails()), true); - Assertions.assertThat(((LoopTemplateLoopElementModel) (loopTemplate.getLoopElementModelsUsed().toArray()[0])) - .getLoopElementModel().getName()).isNotEmpty(); - - loopTemplate = loopTemplatesRepo.findById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", - RESOURCE_INSTANCE_NAME_RESOURCE1, "tca_3.yaml")).get(); - assertThat(((LoopTemplateLoopElementModel) (loopTemplate.getLoopElementModelsUsed().toArray()[0])) - .getLoopElementModel().getName()).isNotEmpty(); - assertThat(((LoopTemplateLoopElementModel) (loopTemplate.getLoopElementModelsUsed().toArray()[0])) - .getLoopElementModel().getName()).isNotEmpty(); - assertThat(loopTemplate.getMaximumInstancesAllowed()).isEqualByComparingTo(Integer.valueOf(0)); - loopTemplate = loopTemplatesRepo.findById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", - RESOURCE_INSTANCE_NAME_RESOURCE2, "tca_2.yaml")).get(); - assertThat(((LoopTemplateLoopElementModel) (loopTemplate.getLoopElementModelsUsed().toArray()[0])) - .getLoopElementModel().getName()).isNotEmpty(); - - assertThat(policyModelsRepository.findAll().size()).isGreaterThanOrEqualTo(1); - assertThat(policyModelsRepository - .existsById(new PolicyModelId("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0"))).isTrue(); - assertThat(policyModelsRepository - .getOne((new PolicyModelId("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0"))) - .getPolicyModelTosca()).isNotBlank(); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/CsarInstallerItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/CsarInstallerItTestCase.java new file mode 100644 index 000000000..661696e55 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/loop/CsarInstallerItTestCase.java @@ -0,0 +1,322 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP POLICY-CLAMP + * ================================================================================ + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Modifications copyright (c) 2019 Nokia + * Modifications Copyright (c) 2019 Samsung + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.transaction.Transactional; +import org.apache.commons.lang3.RandomStringUtils; +import org.assertj.core.api.Assertions; +import org.json.JSONException; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.clds.exception.sdc.controller.BlueprintParserException; +import org.onap.policy.clamp.clds.exception.sdc.controller.CsarHandlerException; +import org.onap.policy.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; +import org.onap.policy.clamp.clds.sdc.controller.installer.BlueprintArtifact; +import org.onap.policy.clamp.clds.sdc.controller.installer.CsarHandler; +import org.onap.policy.clamp.clds.util.JsonUtils; +import org.onap.policy.clamp.clds.util.ResourceFileUtils; +import org.onap.policy.clamp.loop.cds.CdsDataInstaller; +import org.onap.policy.clamp.loop.service.ServicesRepository; +import org.onap.policy.clamp.loop.template.LoopTemplate; +import org.onap.policy.clamp.loop.template.LoopTemplateLoopElementModel; +import org.onap.policy.clamp.loop.template.LoopTemplatesRepository; +import org.onap.policy.clamp.loop.template.PolicyModelId; +import org.onap.policy.clamp.loop.template.PolicyModelsRepository; +import org.onap.sdc.api.notification.IArtifactInfo; +import org.onap.sdc.api.notification.INotificationData; +import org.onap.sdc.api.notification.IResourceInstance; +import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; +import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory; +import org.onap.sdc.toscaparser.api.elements.Metadata; +import org.skyscreamer.jsonassert.JSONAssert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.Commit; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +@ActiveProfiles({"clamp-default", "clamp-default-user", "clamp-sdc-controller"}) +public class CsarInstallerItTestCase { + + private static final String CSAR_ARTIFACT_NAME_CDS = "example/sdc/service_Vloadbalancerms_cds.csar"; + private static final String CSAR_ARTIFACT_NAME_NO_CDS = "example/sdc/service_Vloadbalancerms_no_cds.csar"; + private static final String INVARIANT_SERVICE_UUID = "4cc5b45a-1f63-4194-8100-cd8e14248c92"; + private static final String INVARIANT_RESOURCE1_UUID = "07e266fc-49ab-4cd7-8378-ca4676f1b9ec"; + private static final String INVARIANT_RESOURCE2_UUID = "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"; + private static final String RESOURCE_INSTANCE_NAME_RESOURCE1 = "ResourceInstanceName1"; + private static final String RESOURCE_INSTANCE_NAME_RESOURCE2 = "ResourceInstanceName2"; + + @Autowired + private LoopTemplatesRepository loopTemplatesRepo; + + @Autowired + ServicesRepository serviceRepository; + + @Autowired + PolicyModelsRepository policyModelsRepository; + + @Autowired + @Qualifier("csarInstaller") + private CsarInstaller csarInstaller; + + private BlueprintArtifact buildFakeBlueprintArtifact(String instanceName, String invariantResourceUuid, + String blueprintFilePath, String artifactName, + String invariantServiceUuid) throws IOException { + IResourceInstance resource = Mockito.mock(IResourceInstance.class); + Mockito.when(resource.getResourceInstanceName()).thenReturn(instanceName); + Mockito.when(resource.getResourceInvariantUUID()).thenReturn(invariantResourceUuid); + BlueprintArtifact blueprintArtifact = Mockito.mock(BlueprintArtifact.class); + Mockito.when(blueprintArtifact.getDcaeBlueprint()) + .thenReturn(ResourceFileUtils.getResourceAsString(blueprintFilePath)); + Mockito.when(blueprintArtifact.getBlueprintArtifactName()).thenReturn(artifactName); + Mockito.when(blueprintArtifact.getBlueprintInvariantServiceUuid()).thenReturn(invariantServiceUuid); + Mockito.when(blueprintArtifact.getResourceAttached()).thenReturn(resource); + return blueprintArtifact; + } + + private CsarHandler buildBadFakeCsarHandler(String generatedName, String csarFileName) throws IOException, + SdcToscaParserException { + + // Build a Bad csar because the blueprint contains a link to a microservice that does not exist in the emulator + // Create fake notification + INotificationData notificationData = Mockito.mock(INotificationData.class); + Mockito.when(notificationData.getServiceVersion()).thenReturn("1.0"); + // Create fake resource in notification + CsarHandler csarHandler = Mockito.mock(CsarHandler.class); + List listResources = new ArrayList<>(); + Mockito.when(notificationData.getResources()).thenReturn(listResources); + Map blueprintMap = new HashMap<>(); + Mockito.when(csarHandler.getMapOfBlueprints()).thenReturn(blueprintMap); + // Create fake blueprint artifact 1 on resource1 + BlueprintArtifact blueprintArtifact = buildFakeBlueprintArtifact(RESOURCE_INSTANCE_NAME_RESOURCE1, + INVARIANT_RESOURCE1_UUID, "example/sdc/blueprint-dcae/tca-bad-policy.yaml", "tca-bad-policy.yaml", + INVARIANT_SERVICE_UUID); + listResources.add(blueprintArtifact.getResourceAttached()); + blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); + + // Build fake csarhandler + Mockito.when(csarHandler.getSdcNotification()).thenReturn(notificationData); + // Build fake csar Helper + ISdcCsarHelper csarHelper = Mockito.mock(ISdcCsarHelper.class); + Metadata data = Mockito.mock(Metadata.class); + Mockito.when(data.getValue("name")).thenReturn(generatedName); + Mockito.when(notificationData.getServiceName()).thenReturn(generatedName); + Mockito.when(csarHelper.getServiceMetadata()).thenReturn(data); + + // Create helper based on real csar to test policy yaml and global properties + // set + SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); + String path = Thread.currentThread().getContextClassLoader().getResource(csarFileName).getFile(); + ISdcCsarHelper sdcHelper = factory.getSdcCsarHelper(path); + Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(sdcHelper); + + // Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(csarHelper); + Mockito.when(csarHandler.getPolicyModelYaml()) + .thenReturn(Optional.ofNullable(ResourceFileUtils.getResourceAsString("tosca/tosca_example.yaml"))); + return csarHandler; + } + + private CsarHandler buildFakeCsarHandler(String generatedName, String csarFileName) throws IOException, + SdcToscaParserException { + // Create fake notification + INotificationData notificationData = Mockito.mock(INotificationData.class); + Mockito.when(notificationData.getServiceVersion()).thenReturn("1.0"); + // Create fake resource in notification + CsarHandler csarHandler = Mockito.mock(CsarHandler.class); + List listResources = new ArrayList<>(); + Mockito.when(notificationData.getResources()).thenReturn(listResources); + Map blueprintMap = new HashMap<>(); + Mockito.when(csarHandler.getMapOfBlueprints()).thenReturn(blueprintMap); + // Create fake blueprint artifact 1 on resource1 + BlueprintArtifact blueprintArtifact = buildFakeBlueprintArtifact(RESOURCE_INSTANCE_NAME_RESOURCE1, + INVARIANT_RESOURCE1_UUID, "example/sdc/blueprint-dcae/tca.yaml", "tca.yaml", INVARIANT_SERVICE_UUID); + listResources.add(blueprintArtifact.getResourceAttached()); + blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); + // Create fake blueprint artifact 2 on resource2 + blueprintArtifact = buildFakeBlueprintArtifact(RESOURCE_INSTANCE_NAME_RESOURCE2, INVARIANT_RESOURCE2_UUID, + "example/sdc/blueprint-dcae/tca_2.yaml", "tca_2.yaml", INVARIANT_SERVICE_UUID); + listResources.add(blueprintArtifact.getResourceAttached()); + blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); + + // Create fake blueprint artifact 3 on resource 1 so that it's possible to + // test multiple CL deployment per Service/vnf + blueprintArtifact = buildFakeBlueprintArtifact(RESOURCE_INSTANCE_NAME_RESOURCE1, INVARIANT_RESOURCE1_UUID, + "example/sdc/blueprint-dcae/tca_3.yaml", "tca_3.yaml", INVARIANT_SERVICE_UUID); + blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); + + // Create fake blueprint artifact 3 on resource 1 so that it's possible to + // test multiple CL deployment per Service/vnf + blueprintArtifact = buildFakeBlueprintArtifact(RESOURCE_INSTANCE_NAME_RESOURCE1, INVARIANT_RESOURCE1_UUID, + "example/sdc/blueprint-dcae/tca-guilin.yaml", "tca-guilin.yaml", INVARIANT_SERVICE_UUID); + blueprintMap.put(blueprintArtifact.getBlueprintArtifactName(), blueprintArtifact); + + + // Build fake csarhandler + Mockito.when(csarHandler.getSdcNotification()).thenReturn(notificationData); + // Build fake csar Helper + ISdcCsarHelper csarHelper = Mockito.mock(ISdcCsarHelper.class); + Metadata data = Mockito.mock(Metadata.class); + Mockito.when(data.getValue("name")).thenReturn(generatedName); + Mockito.when(notificationData.getServiceName()).thenReturn(generatedName); + Mockito.when(csarHelper.getServiceMetadata()).thenReturn(data); + + // Create helper based on real csar to test policy yaml and global properties + // set + SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); + String path = Thread.currentThread().getContextClassLoader().getResource(csarFileName).getFile(); + ISdcCsarHelper sdcHelper = factory.getSdcCsarHelper(path); + Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(sdcHelper); + + // Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(csarHelper); + Mockito.when(csarHandler.getPolicyModelYaml()) + .thenReturn(Optional.ofNullable(ResourceFileUtils.getResourceAsString("tosca/tosca_example.yaml"))); + return csarHandler; + } + + @Test + @Transactional + public void testGetPolicyModelYaml() throws IOException, SdcToscaParserException, CsarHandlerException { + INotificationData notificationData = Mockito.mock(INotificationData.class); + IArtifactInfo serviceArtifacts = Mockito.mock(IArtifactInfo.class); + Mockito.when(serviceArtifacts.getArtifactType()).thenReturn("TOSCA_CSAR"); + List serviceArtifactsList = new ArrayList<>(); + serviceArtifactsList.add(serviceArtifacts); + Mockito.when(notificationData.getServiceArtifacts()).thenReturn(serviceArtifactsList); + + CsarHandler csarHandler = new CsarHandler(notificationData, "", ""); + csarHandler.setFilePath(Thread.currentThread().getContextClassLoader().getResource(CSAR_ARTIFACT_NAME_CDS) + .getFile()); + Assert.assertEquals(csarHandler.getPolicyModelYaml(), Optional + .ofNullable(ResourceFileUtils.getResourceAsString("example/sdc/expected-result/policy-data.yaml"))); + } + + @Test + @Transactional + public void testIsCsarAlreadyDeployedTca() throws SdcArtifactInstallerException, SdcToscaParserException, + CsarHandlerException, IOException, InterruptedException, BlueprintParserException { + String generatedName = RandomStringUtils.randomAlphanumeric(5); + CsarHandler csarHandler = buildFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_CDS); + assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isFalse(); + csarInstaller.installTheCsar(csarHandler); + assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isTrue(); + } + + @Test + @Transactional + public void testWithoutCdsTca() throws SdcArtifactInstallerException, SdcToscaParserException, + CsarHandlerException, IOException, InterruptedException, BlueprintParserException { + String generatedName = RandomStringUtils.randomAlphanumeric(5); + CsarHandler csarHandler = buildFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_NO_CDS); + + assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isFalse(); + csarInstaller.installTheCsar(csarHandler); + assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isTrue(); + } + + @Test(expected = SdcArtifactInstallerException.class) + @Transactional + public void testInstallTheBadCsarTca() + throws IOException, SdcToscaParserException, InterruptedException, BlueprintParserException, + SdcArtifactInstallerException { + // This test validates that the blueprint is well rejected because the blueprint contains a link + // to a policy that does not exist on the policy engine emulator. + String generatedName = RandomStringUtils.randomAlphanumeric(5); + csarInstaller.installTheCsar(buildBadFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_NO_CDS)); + } + + @Test + @Transactional + @Commit + public void testInstallTheCsarTca() throws SdcArtifactInstallerException, SdcToscaParserException, + CsarHandlerException, IOException, JSONException, InterruptedException, BlueprintParserException { + String generatedName = RandomStringUtils.randomAlphanumeric(5); + csarInstaller.installTheCsar(buildFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_CDS)); + + assertThat(serviceRepository.existsById("63cac700-ab9a-4115-a74f-7eac85e3fce0")).isTrue(); + // We should have CDS info + assertThat(serviceRepository.findById("63cac700-ab9a-4115-a74f-7eac85e3fce0").get().getResourceByType("VF") + .getAsJsonObject("vLoadBalancerMS 0").getAsJsonObject( + CdsDataInstaller.CONTROLLER_PROPERTIES)).isNotNull(); + assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", + RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml"))).isTrue(); + assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", + RESOURCE_INSTANCE_NAME_RESOURCE1, "tca_3.yaml"))).isTrue(); + assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", + RESOURCE_INSTANCE_NAME_RESOURCE2, "tca_2.yaml"))).isTrue(); + assertThat(loopTemplatesRepo.existsById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", + RESOURCE_INSTANCE_NAME_RESOURCE1, "tca-guilin.yaml"))).isTrue(); + // Verify now that policy and json representation, global properties are well + // set + LoopTemplate loopTemplate = loopTemplatesRepo.findById(LoopTemplate.generateLoopTemplateName(generatedName, + "1.0", RESOURCE_INSTANCE_NAME_RESOURCE1, "tca.yaml")).get(); + assertThat(loopTemplate.getLoopElementModelsUsed()).hasSize(1); + Assertions.assertThat(loopTemplate.getModelService().getServiceUuid()) + .isEqualTo("63cac700-ab9a-4115-a74f-7eac85e3fce0"); + JSONAssert.assertEquals(ResourceFileUtils.getResourceAsString("tosca/model-properties.json"), + JsonUtils.GSON_JPA_MODEL.toJson(loopTemplate.getModelService()), true); + JSONAssert.assertEquals(ResourceFileUtils.getResourceAsString("tosca/service-details.json"), + JsonUtils.GSON_JPA_MODEL.toJson(loopTemplate.getModelService().getServiceDetails()), true); + JSONAssert.assertEquals(ResourceFileUtils.getResourceAsString("tosca/resource-details.json"), + JsonUtils.GSON_JPA_MODEL.toJson(loopTemplate.getModelService().getResourceDetails()), true); + Assertions.assertThat(((LoopTemplateLoopElementModel) (loopTemplate.getLoopElementModelsUsed().toArray()[0])) + .getLoopElementModel().getName()).isNotEmpty(); + + loopTemplate = loopTemplatesRepo.findById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", + RESOURCE_INSTANCE_NAME_RESOURCE1, "tca_3.yaml")).get(); + assertThat(((LoopTemplateLoopElementModel) (loopTemplate.getLoopElementModelsUsed().toArray()[0])) + .getLoopElementModel().getName()).isNotEmpty(); + assertThat(((LoopTemplateLoopElementModel) (loopTemplate.getLoopElementModelsUsed().toArray()[0])) + .getLoopElementModel().getName()).isNotEmpty(); + assertThat(loopTemplate.getMaximumInstancesAllowed()).isEqualByComparingTo(Integer.valueOf(0)); + loopTemplate = loopTemplatesRepo.findById(LoopTemplate.generateLoopTemplateName(generatedName, "1.0", + RESOURCE_INSTANCE_NAME_RESOURCE2, "tca_2.yaml")).get(); + assertThat(((LoopTemplateLoopElementModel) (loopTemplate.getLoopElementModelsUsed().toArray()[0])) + .getLoopElementModel().getName()).isNotEmpty(); + + assertThat(policyModelsRepository.findAll().size()).isPositive(); + assertThat(policyModelsRepository + .existsById(new PolicyModelId("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0"))).isTrue(); + assertThat(policyModelsRepository + .getOne((new PolicyModelId("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0"))) + .getPolicyModelTosca()).isNotBlank(); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/DeployFlowItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/DeployFlowItTestCase.java new file mode 100644 index 000000000..bfd5b0377 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/loop/DeployFlowItTestCase.java @@ -0,0 +1,320 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.io.IOException; +import java.util.Set; +import javax.transaction.Transactional; +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.builder.ExchangeBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.loop.template.LoopTemplate; +import org.onap.policy.clamp.loop.template.PolicyModel; +import org.onap.policy.clamp.loop.template.PolicyModelsService; +import org.onap.policy.clamp.policy.microservice.MicroServicePolicy; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class DeployFlowItTestCase { + private Gson gson = new Gson(); + + @Autowired + CamelContext camelContext; + + @Autowired + PolicyModelsService policyModelsService; + + @Autowired + LoopService loopService; + + @Autowired + LoopsRepository loopsRepository; + + /** + * This method tests a deployment a single blueprint. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ + @Test + @Transactional + public void deployWithSingleBlueprintTest() throws JsonSyntaxException, IOException { + Loop loopTest = createLoop("ControlLoopTest", "yamlcontent", + "{\"dcaeDeployParameters\":{\"uniqueBlueprintParameters\": {\"policy_id\": \"name\"}}}", + "UUID-blueprint"); + LoopTemplate template = new LoopTemplate(); + template.setName("templateName"); + template.setBlueprint("yamlcontent"); + loopTest.setLoopTemplate(template); + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + loopTest.addMicroServicePolicy(microServicePolicy); + loopService.saveOrUpdateLoop(loopTest); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) + .build(); + + camelContext.createProducerTemplate().send("direct:deploy-loop", myCamelExchange); + + Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); + assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNotNull(); + assertThat(loopAfterTest.getDcaeDeploymentId()).isNotNull(); + } + + /** + * This method tests the deployment of multiple separated blueprints. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ + @Test + @Transactional + public void deployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { + Loop loopTest2 = createLoop("ControlLoopTest2", "yamlcontent", "{\"dcaeDeployParameters\": {" + + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName1_tca\"}," + + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName2_tca\"}" + + "}}", "UUID-blueprint"); + LoopTemplate template = new LoopTemplate(); + template.setName("templateName"); + loopTest2.setLoopTemplate(template); + MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", "{\"configtype\":\"json\"}", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true); + MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", "{\"configtype\":\"json\"}", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true); + loopTest2.addMicroServicePolicy(microServicePolicy1); + loopTest2.addMicroServicePolicy(microServicePolicy2); + loopsRepository.saveAndFlush(loopTest2); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest2) + .build(); + + camelContext.createProducerTemplate().send("direct:deploy-loop", myCamelExchange); + + Loop loopAfterTest = loopService.getLoop("ControlLoopTest2"); + Set policyList = loopAfterTest.getMicroServicePolicies(); + for (MicroServicePolicy policy : policyList) { + assertThat(policy.getDcaeDeploymentStatusUrl()).isNotNull(); + assertThat(policy.getDcaeDeploymentId()).isNotNull(); + } + assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNull(); + assertThat(loopAfterTest.getDcaeDeploymentId()).isNull(); + } + + /** + * This method tests the undeployment of a single blueprint. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ + @Test + @Transactional + public void undeployWithSingleBlueprintTest() throws JsonSyntaxException, IOException { + Loop loopTest = createLoop("ControlLoopTest", "yamlcontent", "{\"testname\":\"testvalue\"}", + "UUID-blueprint"); + LoopTemplate template = new LoopTemplate(); + template.setName("templateName"); + template.setBlueprint("yamlcontent"); + loopTest.setLoopTemplate(template); + loopTest.setDcaeDeploymentId("testDeploymentId"); + loopTest.setDcaeDeploymentStatusUrl("testUrl"); + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + loopTest.addMicroServicePolicy(microServicePolicy); + loopService.saveOrUpdateLoop(loopTest); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) + .build(); + + camelContext.createProducerTemplate().send("direct:undeploy-loop", myCamelExchange); + + Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); + assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).contains("/uninstall"); + assertThat(loopAfterTest.getDcaeDeploymentId()).isNull(); + } + + /** + * This method tests the undeployment of multiple separated blueprints. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ + @Test + @Transactional + public void undeployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { + Loop loopTest2 = createLoop("ControlLoopTest2", "yamlcontent", "{\"dcaeDeployParameters\": {" + + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName1_tca\"}," + + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName2_tca\"}" + + "}}", "UUID-blueprint"); + LoopTemplate template = new LoopTemplate(); + template.setName("templateName"); + loopTest2.setLoopTemplate(template); + MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", "{\"configtype\":\"json\"}", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true, + "testDeploymentId1", "testDeploymentStatusUrl1"); + MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", "{\"configtype\":\"json\"}", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true, + "testDeploymentId2", "testDeploymentStatusUrl2"); + loopTest2.addMicroServicePolicy(microServicePolicy1); + loopTest2.addMicroServicePolicy(microServicePolicy2); + loopsRepository.saveAndFlush(loopTest2); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest2) + .build(); + + camelContext.createProducerTemplate().send("direct:undeploy-loop", myCamelExchange); + + Loop loopAfterTest = loopService.getLoop("ControlLoopTest2"); + Set policyList = loopAfterTest.getMicroServicePolicies(); + for (MicroServicePolicy policy : policyList) { + assertThat(policy.getDcaeDeploymentStatusUrl()).contains("/uninstall"); + assertThat(policy.getDcaeDeploymentId()).isNull(); + } + assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNull(); + assertThat(loopAfterTest.getDcaeDeploymentId()).isNull(); + } + + /** + * This method tests the DCAE get status for a single blueprint. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ + @Test + @Transactional + public void getStatusWithSingleBlueprintTest() throws JsonSyntaxException, IOException { + Loop loopTest = createLoop("ControlLoopTest", "yamlcontent", "{\"testname\":\"testvalue\"}", + "UUID-blueprint"); + LoopTemplate template = new LoopTemplate(); + template.setName("templateName"); + template.setBlueprint("yamlcontent"); + loopTest.setLoopTemplate(template); + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + loopTest.addMicroServicePolicy(microServicePolicy); + loopService.saveOrUpdateLoop(loopTest); + assertThat(loopTest.getComponents()).hasSize(2); + assertThat(loopTest.getComponent("DCAE")).isNotNull(); + assertThat(loopTest.getComponent("POLICY")).isNotNull(); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) + .build(); + + camelContext.createProducerTemplate().send("direct:update-dcae-status-for-loop", myCamelExchange); + + assertThat(loopTest.getComponent("DCAE").getState().getStateName()).isEqualTo("BLUEPRINT_DEPLOYED"); + + Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); + assertThat(loopAfterTest.getComponents()).hasSize(2); + assertThat(loopAfterTest.getComponent("DCAE")).isNotNull(); + assertThat(loopAfterTest.getComponent("POLICY")).isNotNull(); + } + + /** + * This method tests the dcae get status for multiple blueprints. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + */ + @Test + @Transactional + public void getStatusWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { + Loop loopTest = createLoop("ControlLoopTest", "yamlcontent", "{\"testname\":\"testvalue\"}", + "UUID-blueprint"); + LoopTemplate template = new LoopTemplate(); + template.setName("templateName"); + loopTest.setLoopTemplate(template); + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("configPolicyTest2", "", + "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", + "{\"param1\":\"value1\"}", true); + loopTest.addMicroServicePolicy(microServicePolicy); + loopTest.addMicroServicePolicy(microServicePolicy2); + loopService.saveOrUpdateLoop(loopTest); + assertThat(loopTest.getComponents()).hasSize(3); + assertThat(loopTest.getComponent("DCAE")).isNull(); + assertThat(loopTest.getComponent("DCAE_configPolicyTest")).isNotNull(); + assertThat(loopTest.getComponent("DCAE_configPolicyTest2")).isNotNull(); + assertThat(loopTest.getComponent("POLICY")).isNotNull(); + Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) + .build(); + + camelContext.createProducerTemplate().send("direct:update-dcae-status-for-loop", myCamelExchange); + + assertThat(loopTest.getComponent("DCAE_configPolicyTest").getState().getStateName()) + .isEqualTo("BLUEPRINT_DEPLOYED"); + assertThat(loopTest.getComponent("DCAE_configPolicyTest2").getState().getStateName()) + .isEqualTo("BLUEPRINT_DEPLOYED"); + + Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); + assertThat(loopAfterTest.getComponents()).hasSize(3); + assertThat(loopAfterTest.getComponent("DCAE")).isNull(); + assertThat(loopAfterTest.getComponent("POLICY")).isNotNull(); + assertThat(loopTest.getComponent("DCAE_configPolicyTest")).isNotNull(); + assertThat(loopTest.getComponent("DCAE_configPolicyTest2")).isNotNull(); + } + + private Loop createLoop(String name, String blueprint, String globalPropertiesJson, + String dcaeBlueprintId) throws JsonSyntaxException, IOException { + Loop loop = new Loop(name); + loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); + loop.setLastComputedState(LoopState.DESIGN); + return loop; + } + + private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, + String policyTosca, String jsonProperties, boolean shared) { + + PolicyModel policyModel = new PolicyModel(modelType, policyTosca, "1.0.0"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + MicroServicePolicy microService = new MicroServicePolicy(name, policyModel, + shared, + gson.fromJson(jsonRepresentation, JsonObject.class), null, null, null); + + microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class)); + return microService; + } + + private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, + String policyTosca, String jsonProperties, boolean shared, + String deploymengId, + String deploymentStatusUrl) { + MicroServicePolicy microService = getMicroServicePolicy(name, modelType, jsonRepresentation, policyTosca, + jsonProperties, shared); + + microService.setDcaeDeploymentId(deploymengId); + microService.setDcaeDeploymentStatusUrl(deploymentStatusUrl); + return microService; + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/DeployFlowTestItCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/DeployFlowTestItCase.java deleted file mode 100644 index 4d02b10dc..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/loop/DeployFlowTestItCase.java +++ /dev/null @@ -1,321 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.loop; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonSyntaxException; -import java.io.IOException; -import java.util.Set; -import javax.transaction.Transactional; -import org.apache.camel.CamelContext; -import org.apache.camel.Exchange; -import org.apache.camel.builder.ExchangeBuilder; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.loop.template.LoopTemplate; -import org.onap.policy.clamp.loop.template.PolicyModel; -import org.onap.policy.clamp.loop.template.PolicyModelsService; -import org.onap.policy.clamp.policy.microservice.MicroServicePolicy; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class DeployFlowTestItCase { - private Gson gson = new Gson(); - - @Autowired - CamelContext camelContext; - - @Autowired - PolicyModelsService policyModelsService; - - @Autowired - LoopService loopService; - - @Autowired - LoopsRepository loopsRepository; - - /** - * This method tests a deployment a single blueprint. - * - * @throws JsonSyntaxException In case of issues - * @throws IOException In case of issues - */ - @Test - @Transactional - public void deployWithSingleBlueprintTest() throws JsonSyntaxException, IOException { - Loop loopTest = createLoop("ControlLoopTest", "yamlcontent", - "{\"dcaeDeployParameters\":{\"uniqueBlueprintParameters\": {\"policy_id\": \"name\"}}}", - "UUID-blueprint"); - LoopTemplate template = new LoopTemplate(); - template.setName("templateName"); - template.setBlueprint("yamlcontent"); - loopTest.setLoopTemplate(template); - MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true); - loopTest.addMicroServicePolicy(microServicePolicy); - loopService.saveOrUpdateLoop(loopTest); - Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) - .build(); - - camelContext.createProducerTemplate().send("direct:deploy-loop", myCamelExchange); - - Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); - assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNotNull(); - assertThat(loopAfterTest.getDcaeDeploymentId()).isNotNull(); - } - - /** - * This method tests the deployment of multiple separated blueprints. - * - * @throws JsonSyntaxException In case of issues - * @throws IOException In case of issues - */ - @Test - @Transactional - public void deployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { - Loop loopTest2 = createLoop("ControlLoopTest2", "yamlcontent", "{\"dcaeDeployParameters\": {" - + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName1_tca\"}," - + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName2_tca\"}" - + "}}", "UUID-blueprint"); - LoopTemplate template = new LoopTemplate(); - template.setName("templateName"); - loopTest2.setLoopTemplate(template); - MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", "{\"configtype\":\"json\"}", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true); - MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", "{\"configtype\":\"json\"}", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true); - loopTest2.addMicroServicePolicy(microServicePolicy1); - loopTest2.addMicroServicePolicy(microServicePolicy2); - loopsRepository.saveAndFlush(loopTest2); - Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest2) - .build(); - - camelContext.createProducerTemplate().send("direct:deploy-loop", myCamelExchange); - - Loop loopAfterTest = loopService.getLoop("ControlLoopTest2"); - Set policyList = loopAfterTest.getMicroServicePolicies(); - for (MicroServicePolicy policy : policyList) { - assertThat(policy.getDcaeDeploymentStatusUrl()).isNotNull(); - assertThat(policy.getDcaeDeploymentId()).isNotNull(); - } - assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNull(); - assertThat(loopAfterTest.getDcaeDeploymentId()).isNull(); - } - - /** - * This method tests the undeployment of a single blueprint. - * - * @throws JsonSyntaxException In case of issues - * @throws IOException In case of issues - */ - @Test - @Transactional - public void undeployWithSingleBlueprintTest() throws JsonSyntaxException, IOException { - Loop loopTest = createLoop("ControlLoopTest", "yamlcontent", "{\"testname\":\"testvalue\"}", - "UUID-blueprint"); - LoopTemplate template = new LoopTemplate(); - template.setName("templateName"); - template.setBlueprint("yamlcontent"); - loopTest.setLoopTemplate(template); - loopTest.setDcaeDeploymentId("testDeploymentId"); - loopTest.setDcaeDeploymentStatusUrl("testUrl"); - MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true); - loopTest.addMicroServicePolicy(microServicePolicy); - loopService.saveOrUpdateLoop(loopTest); - Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) - .build(); - - camelContext.createProducerTemplate().send("direct:undeploy-loop", myCamelExchange); - - Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); - assertThat(loopAfterTest.getDcaeDeploymentStatusUrl().contains("/uninstall")).isTrue(); - assertThat(loopAfterTest.getDcaeDeploymentId()).isNull(); - } - - /** - * This method tests the undeployment of multiple separated blueprints. - * - * @throws JsonSyntaxException In case of issues - * @throws IOException In case of issues - */ - @Test - @Transactional - public void undeployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { - Loop loopTest2 = createLoop("ControlLoopTest2", "yamlcontent", "{\"dcaeDeployParameters\": {" - + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName1_tca\"}," - + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName2_tca\"}" - + "}}", "UUID-blueprint"); - LoopTemplate template = new LoopTemplate(); - template.setName("templateName"); - loopTest2.setLoopTemplate(template); - MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", "{\"configtype\":\"json\"}", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true, - "testDeploymentId1", "testDeploymentStatusUrl1"); - MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", "{\"configtype\":\"json\"}", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true, - "testDeploymentId2", "testDeploymentStatusUrl2"); - loopTest2.addMicroServicePolicy(microServicePolicy1); - loopTest2.addMicroServicePolicy(microServicePolicy2); - loopsRepository.saveAndFlush(loopTest2); - Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest2) - .build(); - - camelContext.createProducerTemplate().send("direct:undeploy-loop", myCamelExchange); - - Loop loopAfterTest = loopService.getLoop("ControlLoopTest2"); - Set policyList = loopAfterTest.getMicroServicePolicies(); - for (MicroServicePolicy policy : policyList) { - assertThat(policy.getDcaeDeploymentStatusUrl().contains("/uninstall")).isTrue(); - assertThat(policy.getDcaeDeploymentId()).isNull(); - - } - assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNull(); - assertThat(loopAfterTest.getDcaeDeploymentId()).isNull(); - } - - /** - * This method tests the DCAE get status for a single blueprint. - * - * @throws JsonSyntaxException In case of issues - * @throws IOException In case of issues - */ - @Test - @Transactional - public void getStatusWithSingleBlueprintTest() throws JsonSyntaxException, IOException { - Loop loopTest = createLoop("ControlLoopTest", "yamlcontent", "{\"testname\":\"testvalue\"}", - "UUID-blueprint"); - LoopTemplate template = new LoopTemplate(); - template.setName("templateName"); - template.setBlueprint("yamlcontent"); - loopTest.setLoopTemplate(template); - MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true); - loopTest.addMicroServicePolicy(microServicePolicy); - loopService.saveOrUpdateLoop(loopTest); - assertThat(loopTest.getComponents().size()).isEqualTo(2); - assertThat(loopTest.getComponent("DCAE")).isNotNull(); - assertThat(loopTest.getComponent("POLICY")).isNotNull(); - Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) - .build(); - - camelContext.createProducerTemplate().send("direct:update-dcae-status-for-loop", myCamelExchange); - - assertThat(loopTest.getComponent("DCAE").getState().getStateName()).isEqualTo("BLUEPRINT_DEPLOYED"); - - Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); - assertThat(loopAfterTest.getComponents().size()).isEqualTo(2); - assertThat(loopAfterTest.getComponent("DCAE")).isNotNull(); - assertThat(loopAfterTest.getComponent("POLICY")).isNotNull(); - } - - /** - * This method tests the dcae get status for multiple blueprints. - * - * @throws JsonSyntaxException In case of issues - * @throws IOException In case of issues - */ - @Test - @Transactional - public void getStatusWithMultipleBlueprintTest() throws JsonSyntaxException, IOException { - Loop loopTest = createLoop("ControlLoopTest", "yamlcontent", "{\"testname\":\"testvalue\"}", - "UUID-blueprint"); - LoopTemplate template = new LoopTemplate(); - template.setName("templateName"); - loopTest.setLoopTemplate(template); - MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true); - MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("configPolicyTest2", "", - "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0", - "{\"param1\":\"value1\"}", true); - loopTest.addMicroServicePolicy(microServicePolicy); - loopTest.addMicroServicePolicy(microServicePolicy2); - loopService.saveOrUpdateLoop(loopTest); - assertThat(loopTest.getComponents().size()).isEqualTo(3); - assertThat(loopTest.getComponent("DCAE")).isNull(); - assertThat(loopTest.getComponent("DCAE_configPolicyTest")).isNotNull(); - assertThat(loopTest.getComponent("DCAE_configPolicyTest2")).isNotNull(); - assertThat(loopTest.getComponent("POLICY")).isNotNull(); - Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest) - .build(); - - camelContext.createProducerTemplate().send("direct:update-dcae-status-for-loop", myCamelExchange); - - assertThat(loopTest.getComponent("DCAE_configPolicyTest").getState().getStateName()) - .isEqualTo("BLUEPRINT_DEPLOYED"); - assertThat(loopTest.getComponent("DCAE_configPolicyTest2").getState().getStateName()) - .isEqualTo("BLUEPRINT_DEPLOYED"); - - Loop loopAfterTest = loopService.getLoop("ControlLoopTest"); - assertThat(loopAfterTest.getComponents().size()).isEqualTo(3); - assertThat(loopAfterTest.getComponent("DCAE")).isNull(); - assertThat(loopAfterTest.getComponent("POLICY")).isNotNull(); - assertThat(loopTest.getComponent("DCAE_configPolicyTest")).isNotNull(); - assertThat(loopTest.getComponent("DCAE_configPolicyTest2")).isNotNull(); - } - - private Loop createLoop(String name, String blueprint, String globalPropertiesJson, - String dcaeBlueprintId) throws JsonSyntaxException, IOException { - Loop loop = new Loop(name); - loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); - loop.setLastComputedState(LoopState.DESIGN); - return loop; - } - - private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, - String policyTosca, String jsonProperties, boolean shared) { - - PolicyModel policyModel = new PolicyModel(modelType, policyTosca, "1.0.0"); - policyModelsService.saveOrUpdatePolicyModel(policyModel); - MicroServicePolicy microService = new MicroServicePolicy(name, policyModel, - shared, - gson.fromJson(jsonRepresentation, JsonObject.class), null, null, null); - - microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class)); - return microService; - } - - private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation, - String policyTosca, String jsonProperties, boolean shared, - String deploymengId, - String deploymentStatusUrl) { - MicroServicePolicy microService = getMicroServicePolicy(name, modelType, jsonRepresentation, policyTosca, - jsonProperties, shared); - - microService.setDcaeDeploymentId(deploymengId); - microService.setDcaeDeploymentStatusUrl(deploymentStatusUrl); - return microService; - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/ExternalComponentStateTest.java b/runtime/src/test/java/org/onap/policy/clamp/loop/ExternalComponentStateTest.java index a73b2784b..567cad69d 100644 --- a/runtime/src/test/java/org/onap/policy/clamp/loop/ExternalComponentStateTest.java +++ b/runtime/src/test/java/org/onap/policy/clamp/loop/ExternalComponentStateTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -34,34 +34,34 @@ public class ExternalComponentStateTest { @Test public void generalTest() { - assertThat(state.toString()).isEqualTo("NOT_SENT"); + assertThat(state).hasToString("NOT_SENT"); state.setLevel(70); assertThat(state.getLevel()).isEqualTo(70); } @Test public void equalsTest() { - assertThat(state.equals(null)).isEqualTo(false); + assertThat(state.equals(null)).isFalse(); ExternalComponentState state2 = new ExternalComponentState("NOT_SENT", "The policies defined have NOT yet been created on the policy engine", 90); - assertThat(state.equals(state2)).isEqualTo(true); + assertThat(state.equals(state2)).isTrue(); - assertThat(state.equals(12)).isEqualTo(false); + assertThat(state.equals(12)).isFalse(); state2.setLevel(70); - assertThat(state.equals(state2)).isEqualTo(true); + assertThat(state.equals(state2)).isTrue(); ExternalComponentState state3 = new ExternalComponentState("SENT", "The policies defined have NOT yet been created on the policy engine", 90); - assertThat(state.equals(state3)).isEqualTo(false); + assertThat(state.equals(state3)).isFalse(); ExternalComponentState state4 = new ExternalComponentState(null, "The policies defined have NOT yet been created on the policy engine", 90); ExternalComponentState state5 = new ExternalComponentState(null, "The policies defined have NOT yet been", 50); - assertThat(state4.equals(state3)).isEqualTo(false); - assertThat(state4.equals(state5)).isEqualTo(true); + assertThat(state4.equals(state3)).isFalse(); + assertThat(state4.equals(state5)).isTrue(); } @Test @@ -79,4 +79,4 @@ public class ExternalComponentStateTest { assertThat(state.compareTo(state4)).isEqualTo(-1); } -} \ No newline at end of file +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopControllerItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopControllerItTestCase.java new file mode 100644 index 000000000..865c83a8b --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopControllerItTestCase.java @@ -0,0 +1,175 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 Nokia Intellectual Property. All rights + * reserved. + * ================================================================================ + * Modifications Copyright (C) 2019 Huawei Technologies Co., Ltd. + * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.io.IOException; +import java.util.Set; +import javax.transaction.Transactional; +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.clds.util.JsonUtils; +import org.onap.policy.clamp.loop.service.Service; +import org.onap.policy.clamp.loop.template.LoopTemplate; +import org.onap.policy.clamp.loop.template.PolicyModel; +import org.onap.policy.clamp.loop.template.PolicyModelsService; +import org.onap.policy.clamp.policy.microservice.MicroServicePolicy; +import org.onap.policy.clamp.policy.microservice.MicroServicePolicyService; +import org.onap.policy.clamp.policy.operational.OperationalPolicy; +import org.onap.policy.clamp.policy.operational.OperationalPolicyService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class LoopControllerItTestCase { + + private static final String EXAMPLE_LOOP_NAME = "ClosedLoopTest"; + private static final String EXAMPLE_JSON = "{\"testName\":\"testValue\"}"; + + @Autowired + LoopService loopService; + + @Autowired + LoopsRepository loopsRepository; + + @Autowired + MicroServicePolicyService microServicePolicyService; + + @Autowired + OperationalPolicyService operationalPolicyService; + + @Autowired + PolicyModelsService policyModelsService; + + @Autowired + LoopController loopController; + + private void saveTestLoopToDb() { + Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, "blueprint", "representation"); + testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + LoopTemplate template = new LoopTemplate(); + template.setName("testTemplate"); + testLoop.setLoopTemplate(template); + Service modelService = new Service("{\"name\":\"serviceName\",\"UUID\":\"uuid\"}", "{}"); + testLoop.setModelService(modelService); + loopService.saveOrUpdateLoop(testLoop); + } + + private Loop createTestLoop(String loopName, String loopBlueprint, String loopSvg) { + return new Loop(loopName); + } + + @Test + @Transactional + public void testUpdateOperationalPolicies() { + saveTestLoopToDb(); + String policy = "[{\"name\":\"OPERATIONAL_CLholmes31_v1_0_vFW_PG_T10_k8s-holmes-rules\"," + + "\"configurationsJson\":{" + + "\"operational_policy\":{\"controlLoop\":{\"trigger_policy\":\"unique-policy-id-1-modifyConfig\"," + + "\"timeout\":\"3600\",\"abatement\":\"false\"," + + "\"controlLoopName\":\"LOOP_CLholmes31_v1_0_vFW_PG_T10_k8s-holmes-rules\"}," + + "\"policies\":[{\"id\":\"unique-policy-id-1-modifyConfig\",\"recipe\":\"ModifyConfig\"," + + "\"retry\":\"2\",\"timeout\":\"1200\",\"actor\":\"APPC\",\"payload\":\"{\\\"active-streams\\\":5}\"," + + "\"success\":\"\",\"failure\":\"\",\"failure_timeout\":\"\",\"failure_retries\":\"\"," + + "\"failure_exception\":\"\",\"failure_guard\":\"\",\"target\":{\"type\":\"VNF\"," + + "\"resourceID\":\"vFW_PG_T1\"}}]}}}]"; + JsonElement ele = JsonParser.parseString(policy); + JsonArray arr = ele.getAsJsonArray(); + Loop loop = loopController.updateOperationalPolicies(EXAMPLE_LOOP_NAME, arr); + assertThat(loop.getOperationalPolicies()).hasSize(1); + Set opSet = loop.getOperationalPolicies(); + OperationalPolicy op = opSet.iterator().next(); + assertThat(op.getName()).isEqualTo("OPERATIONAL_CLholmes31_v1_0_vFW_PG_T10_k8s-holmes-rules"); + } + + @Test + @Transactional + public void testUpdateGlobalProperties() { + saveTestLoopToDb(); + String policy = "{\"dcaeDeployParameters\":{\"aaiEnrichmentHost\":\"aai.onap.svc.cluster.local\"," + + "\"aaiEnrichmentPort\":\"8443\",\"enableAAIEnrichment\":\"false\",\"dmaap_host\":\"message-router" + + ".onap\",\"dmaap_port\":\"3904\",\"enableRedisCaching\":\"false\",\"redisHosts\":\"dcae-redis.onap" + + ".svc.cluster.local:6379\",\"tag_version\":\"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments" + + ".tca-cdap-container:1.1.1\",\"consul_host\":\"consul-server.onap\",\"consul_port\":\"8500\"," + + "\"cbs_host\":\"config-binding-service\",\"cbs_port\":\"10000\",\"external_port\":\"32012\"," + + "\"policy_model_id\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\"," + + "\"policy_id\":\"tca_k8s_CLTCA_v1_0_vFW_PG_T10_k8s-tca-clamp-policy-05162019\"}}"; + JsonElement ele = JsonParser.parseString(policy); + JsonObject obj = ele.getAsJsonObject(); + loopController.updateGlobalPropertiesJson(EXAMPLE_LOOP_NAME, obj); + Loop loop = loopController.getLoop(EXAMPLE_LOOP_NAME); + JsonObject globalPropertiesJson = loop.getGlobalPropertiesJson(); + JsonObject prop = globalPropertiesJson.getAsJsonObject("dcaeDeployParameters"); + assertThat(prop.get("aaiEnrichmentHost").getAsString()).isEqualTo("aai.onap.svc.cluster.local"); + } + + @Test + @Transactional + public void testUpdateMicroservicePolicy() { + saveTestLoopToDb(); + PolicyModel policyModel = new PolicyModel("testPolicyModel", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + MicroServicePolicy policy = new MicroServicePolicy("policyName", policyModel, false, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); + loopController.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, policy); + assertThat(microServicePolicyService.isExisting("policyName")).isTrue(); + } + + @Test + @Transactional + public void testAddAndRemoveOperationalPolicies() throws IOException { + saveTestLoopToDb(); + PolicyModel policyModel = new PolicyModel("testPolicyModel", + null, "1.0.0"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + + loopController.addOperationalPolicy(EXAMPLE_LOOP_NAME, "testPolicyModel", "1.0.0"); + + Loop newLoop = loopController.getLoop(EXAMPLE_LOOP_NAME); + Set opPolicyList = newLoop.getOperationalPolicies(); + assertThat(opPolicyList.size()).isEqualTo(1); + for (OperationalPolicy policy : opPolicyList) { + assertThat(policy.getName()).contains("OPERATIONAL_serviceName"); + Assertions.assertThat(policy.getPolicyModel().getPolicyModelType()).isEqualTo("testPolicyModel"); + Assertions.assertThat(policy.getPolicyModel().getVersion()).isEqualTo("1.0.0"); + } + + loopController.removeOperationalPolicy(EXAMPLE_LOOP_NAME, "testPolicyModel", "1.0.0"); + Loop newLoop2 = loopController.getLoop(EXAMPLE_LOOP_NAME); + assertThat(newLoop2.getOperationalPolicies().size()).isZero(); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopControllerTestItCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopControllerTestItCase.java deleted file mode 100644 index 54ecaa639..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopControllerTestItCase.java +++ /dev/null @@ -1,173 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 Nokia Intellectual Property. All rights - * reserved. - * Modifications Copyright (C) 2019 Huawei Technologies Co., Ltd. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.loop; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import java.io.IOException; -import java.util.Set; -import javax.transaction.Transactional; -import org.assertj.core.api.Assertions; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.clds.util.JsonUtils; -import org.onap.policy.clamp.loop.service.Service; -import org.onap.policy.clamp.loop.template.LoopTemplate; -import org.onap.policy.clamp.loop.template.PolicyModel; -import org.onap.policy.clamp.loop.template.PolicyModelsService; -import org.onap.policy.clamp.policy.microservice.MicroServicePolicy; -import org.onap.policy.clamp.policy.microservice.MicroServicePolicyService; -import org.onap.policy.clamp.policy.operational.OperationalPolicy; -import org.onap.policy.clamp.policy.operational.OperationalPolicyService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class LoopControllerTestItCase { - - private static final String EXAMPLE_LOOP_NAME = "ClosedLoopTest"; - private static final String EXAMPLE_JSON = "{\"testName\":\"testValue\"}"; - - @Autowired - LoopService loopService; - - @Autowired - LoopsRepository loopsRepository; - - @Autowired - MicroServicePolicyService microServicePolicyService; - - @Autowired - OperationalPolicyService operationalPolicyService; - - @Autowired - PolicyModelsService policyModelsService; - - @Autowired - LoopController loopController; - - private void saveTestLoopToDb() { - Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, "blueprint", "representation"); - testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); - LoopTemplate template = new LoopTemplate(); - template.setName("testTemplate"); - testLoop.setLoopTemplate(template); - Service modelService = new Service("{\"name\":\"serviceName\",\"UUID\":\"uuid\"}", "{}"); - testLoop.setModelService(modelService); - loopService.saveOrUpdateLoop(testLoop); - } - - private Loop createTestLoop(String loopName, String loopBlueprint, String loopSvg) { - return new Loop(loopName); - } - - @Test - @Transactional - public void testUpdateOperationalPolicies() { - saveTestLoopToDb(); - String policy = "[{\"name\":\"OPERATIONAL_CLholmes31_v1_0_vFW_PG_T10_k8s-holmes-rules\"," - + "\"configurationsJson\":{" - + "\"operational_policy\":{\"controlLoop\":{\"trigger_policy\":\"unique-policy-id-1-modifyConfig\"," - + "\"timeout\":\"3600\",\"abatement\":\"false\"," - + "\"controlLoopName\":\"LOOP_CLholmes31_v1_0_vFW_PG_T10_k8s-holmes-rules\"}," - + "\"policies\":[{\"id\":\"unique-policy-id-1-modifyConfig\",\"recipe\":\"ModifyConfig\"," - + "\"retry\":\"2\",\"timeout\":\"1200\",\"actor\":\"APPC\",\"payload\":\"{\\\"active-streams\\\":5}\"," - + "\"success\":\"\",\"failure\":\"\",\"failure_timeout\":\"\",\"failure_retries\":\"\"," - + "\"failure_exception\":\"\",\"failure_guard\":\"\",\"target\":{\"type\":\"VNF\"," - + "\"resourceID\":\"vFW_PG_T1\"}}]}}}]"; - JsonElement ele = JsonParser.parseString(policy); - JsonArray arr = ele.getAsJsonArray(); - Loop loop = loopController.updateOperationalPolicies(EXAMPLE_LOOP_NAME, arr); - assertThat(loop.getOperationalPolicies()).hasSize(1); - Set opSet = loop.getOperationalPolicies(); - OperationalPolicy op = opSet.iterator().next(); - assertThat(op.getName()).isEqualTo("OPERATIONAL_CLholmes31_v1_0_vFW_PG_T10_k8s-holmes-rules"); - } - - @Test - @Transactional - public void testUpdateGlobalProperties() { - saveTestLoopToDb(); - String policy = "{\"dcaeDeployParameters\":{\"aaiEnrichmentHost\":\"aai.onap.svc.cluster.local\"," - + "\"aaiEnrichmentPort\":\"8443\",\"enableAAIEnrichment\":\"false\",\"dmaap_host\":\"message-router" - + ".onap\",\"dmaap_port\":\"3904\",\"enableRedisCaching\":\"false\",\"redisHosts\":\"dcae-redis.onap" - + ".svc.cluster.local:6379\",\"tag_version\":\"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments" - + ".tca-cdap-container:1.1.1\",\"consul_host\":\"consul-server.onap\",\"consul_port\":\"8500\"," - + "\"cbs_host\":\"config-binding-service\",\"cbs_port\":\"10000\",\"external_port\":\"32012\"," - + "\"policy_model_id\":\"onap.policies.monitoring.cdap.tca.hi.lo.app\"," - + "\"policy_id\":\"tca_k8s_CLTCA_v1_0_vFW_PG_T10_k8s-tca-clamp-policy-05162019\"}}"; - JsonElement ele = JsonParser.parseString(policy); - JsonObject obj = ele.getAsJsonObject(); - loopController.updateGlobalPropertiesJson(EXAMPLE_LOOP_NAME, obj); - Loop loop = loopController.getLoop(EXAMPLE_LOOP_NAME); - JsonObject globalPropertiesJson = loop.getGlobalPropertiesJson(); - JsonObject prop = globalPropertiesJson.getAsJsonObject("dcaeDeployParameters"); - assertThat(prop.get("aaiEnrichmentHost").getAsString()).isEqualTo("aai.onap.svc.cluster.local"); - } - - @Test - @Transactional - public void testUpdateMicroservicePolicy() { - saveTestLoopToDb(); - PolicyModel policyModel = new PolicyModel("testPolicyModel", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0"); - policyModelsService.saveOrUpdatePolicyModel(policyModel); - MicroServicePolicy policy = new MicroServicePolicy("policyName", policyModel, false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); - loopController.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, policy); - assertThat(microServicePolicyService.isExisting("policyName")).isTrue(); - } - - @Test - @Transactional - public void testAddAndRemoveOperationalPolicies() throws IOException { - saveTestLoopToDb(); - PolicyModel policyModel = new PolicyModel("testPolicyModel", - null, "1.0.0"); - policyModelsService.saveOrUpdatePolicyModel(policyModel); - - loopController.addOperationalPolicy(EXAMPLE_LOOP_NAME, "testPolicyModel", "1.0.0"); - - Loop newLoop = loopController.getLoop(EXAMPLE_LOOP_NAME); - Set opPolicyList = newLoop.getOperationalPolicies(); - assertThat(opPolicyList.size()).isEqualTo(1); - for (OperationalPolicy policy : opPolicyList) { - assertThat(policy.getName().contains("OPERATIONAL_serviceName")).isTrue(); - Assertions.assertThat(policy.getPolicyModel().getPolicyModelType()).isEqualTo("testPolicyModel"); - Assertions.assertThat(policy.getPolicyModel().getVersion()).isEqualTo("1.0.0"); - } - - loopController.removeOperationalPolicy(EXAMPLE_LOOP_NAME, "testPolicyModel", "1.0.0"); - Loop newLoop2 = loopController.getLoop(EXAMPLE_LOOP_NAME); - assertThat(newLoop2.getOperationalPolicies().size()).isZero(); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopLogServiceItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopLogServiceItTestCase.java new file mode 100644 index 000000000..1dac230fe --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopLogServiceItTestCase.java @@ -0,0 +1,97 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 Huawei Technologies Co., Ltd. + * ================================================================================ + * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.JsonObject; +import java.util.Set; +import javax.transaction.Transactional; +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.clds.util.JsonUtils; +import org.onap.policy.clamp.loop.log.LogType; +import org.onap.policy.clamp.loop.log.LoopLog; +import org.onap.policy.clamp.loop.log.LoopLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class LoopLogServiceItTestCase { + + private static final String EXAMPLE_LOOP_NAME = "ClosedLoopTest"; + private static final String EXAMPLE_JSON = "{\"testName\":\"testValue\"}"; + private static final String CLAMP_COMPONENT = "CLAMP"; + private static final String SAMPLE_LOG_MESSAGE = "Sample log"; + + @Autowired + LoopService loopService; + + @Autowired + LoopsRepository loopsRepository; + + @Autowired + LoopLogService loopLogService; + + private void saveTestLoopToDb() { + Loop testLoop = new Loop(EXAMPLE_LOOP_NAME); + testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + loopService.saveOrUpdateLoop(testLoop); + } + + @Test + @Transactional + public void testAddLog() { + saveTestLoopToDb(); + Loop loop = loopService.getLoop(EXAMPLE_LOOP_NAME); + loopLogService.addLog(SAMPLE_LOG_MESSAGE, "INFO", loop); + Set loopLogs = loop.getLoopLogs(); + assertThat(loopLogs).hasSize(1); + LoopLog loopLog = loopLogs.iterator().next(); + assertThat(loopLog.getMessage()).isEqualTo(SAMPLE_LOG_MESSAGE); + } + + @Test + @Transactional + public void testLoopLog() { + LoopLog log = new LoopLog(); + Long id = Long.valueOf(100); + log.setId(id); + log.setLogComponent(CLAMP_COMPONENT); + log.setLogType(LogType.INFO); + log.setMessage(SAMPLE_LOG_MESSAGE); + Loop testLoop = new Loop(EXAMPLE_LOOP_NAME); + log.setLoop(testLoop); + assertThat(log.getMessage()).isEqualTo(SAMPLE_LOG_MESSAGE); + assertThat(log.getLogType()).isEqualTo(LogType.INFO); + assertThat(log.getLogComponent()).isEqualTo(CLAMP_COMPONENT); + assertThat(log.getId()).isEqualTo(id); + Assertions.assertThat(log.getLoop()).isEqualTo(testLoop); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopLogServiceTestItCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopLogServiceTestItCase.java deleted file mode 100644 index ab256eafb..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopLogServiceTestItCase.java +++ /dev/null @@ -1,95 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 Huawei Technologies Co., Ltd. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.loop; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.google.gson.JsonObject; -import java.util.Set; -import javax.transaction.Transactional; -import org.assertj.core.api.Assertions; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.clds.util.JsonUtils; -import org.onap.policy.clamp.loop.log.LogType; -import org.onap.policy.clamp.loop.log.LoopLog; -import org.onap.policy.clamp.loop.log.LoopLogService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class LoopLogServiceTestItCase { - - private static final String EXAMPLE_LOOP_NAME = "ClosedLoopTest"; - private static final String EXAMPLE_JSON = "{\"testName\":\"testValue\"}"; - private static final String CLAMP_COMPONENT = "CLAMP"; - private static final String SAMPLE_LOG_MESSAGE = "Sample log"; - - @Autowired - LoopService loopService; - - @Autowired - LoopsRepository loopsRepository; - - @Autowired - LoopLogService loopLogService; - - private void saveTestLoopToDb() { - Loop testLoop = new Loop(EXAMPLE_LOOP_NAME); - testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); - loopService.saveOrUpdateLoop(testLoop); - } - - @Test - @Transactional - public void testAddLog() { - saveTestLoopToDb(); - Loop loop = loopService.getLoop(EXAMPLE_LOOP_NAME); - loopLogService.addLog(SAMPLE_LOG_MESSAGE, "INFO", loop); - Set loopLogs = loop.getLoopLogs(); - assertThat(loopLogs).hasSize(1); - LoopLog loopLog = loopLogs.iterator().next(); - assertThat(loopLog.getMessage()).isEqualTo(SAMPLE_LOG_MESSAGE); - } - - @Test - @Transactional - public void testLoopLog() { - LoopLog log = new LoopLog(); - Long id = Long.valueOf(100); - log.setId(id); - log.setLogComponent(CLAMP_COMPONENT); - log.setLogType(LogType.INFO); - log.setMessage(SAMPLE_LOG_MESSAGE); - Loop testLoop = new Loop(EXAMPLE_LOOP_NAME); - log.setLoop(testLoop); - assertThat(log.getMessage()).isEqualTo(SAMPLE_LOG_MESSAGE); - assertThat(log.getLogType()).isEqualTo(LogType.INFO); - assertThat(log.getLogComponent()).isEqualTo(CLAMP_COMPONENT); - assertThat(log.getId()).isEqualTo(id); - Assertions.assertThat(log.getLoop()).isEqualTo(testLoop); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopRepositoriesItCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopRepositoriesItCase.java deleted file mode 100644 index e18dd2475..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopRepositoriesItCase.java +++ /dev/null @@ -1,258 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Modifications Copyright (c) 2019 Samsung - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.loop; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; -import java.time.Instant; -import org.assertj.core.api.Assertions; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.loop.log.LogType; -import org.onap.policy.clamp.loop.log.LoopLog; -import org.onap.policy.clamp.loop.log.LoopLogRepository; -import org.onap.policy.clamp.loop.service.Service; -import org.onap.policy.clamp.loop.service.ServicesRepository; -import org.onap.policy.clamp.loop.template.LoopElementModel; -import org.onap.policy.clamp.loop.template.LoopElementModelsRepository; -import org.onap.policy.clamp.loop.template.LoopTemplate; -import org.onap.policy.clamp.loop.template.LoopTemplatesRepository; -import org.onap.policy.clamp.loop.template.PolicyModel; -import org.onap.policy.clamp.loop.template.PolicyModelId; -import org.onap.policy.clamp.loop.template.PolicyModelsRepository; -import org.onap.policy.clamp.policy.microservice.MicroServicePolicy; -import org.onap.policy.clamp.policy.microservice.MicroServicePolicyService; -import org.onap.policy.clamp.policy.operational.OperationalPolicy; -import org.onap.policy.clamp.policy.operational.OperationalPolicyService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.transaction.annotation.Transactional; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(classes = Application.class) -public class LoopRepositoriesItCase { - - private Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create(); - - @Autowired - private LoopsRepository loopRepository; - - @Autowired - private MicroServicePolicyService microServicePolicyService; - - @Autowired - private OperationalPolicyService operationalPolicyService; - - @Autowired - private LoopLogRepository loopLogRepository; - - @Autowired - private LoopTemplatesRepository loopTemplateRepository; - - @Autowired - private LoopElementModelsRepository microServiceModelsRepository; - - @Autowired - private PolicyModelsRepository policyModelsRepository; - - @Autowired - private ServicesRepository servicesRepository; - - private Service getService(String serviceDetails, String resourceDetails) { - return new Service(serviceDetails, resourceDetails); - } - - private OperationalPolicy getOperationalPolicy(String configJson, String name, PolicyModel policyModel) { - return new OperationalPolicy(name, null, new Gson().fromJson(configJson, JsonObject.class), policyModel, - null, null, null); - } - - private LoopElementModel getLoopElementModel(String yaml, String name, String policyType, String createdBy, - PolicyModel policyModel) { - LoopElementModel model = new LoopElementModel(name, policyType, yaml); - model.addPolicyModel(policyModel); - return model; - } - - private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, - String policyAcronym) { - return new PolicyModel(policyType, policyModelTosca, version, policyAcronym); - } - - private LoopTemplate getLoopTemplates(String name, String blueprint, String createdBy, - Integer maxInstancesAllowed) { - LoopTemplate template = new LoopTemplate(name, blueprint, maxInstancesAllowed, null); - template.addLoopElementModel(getLoopElementModel("yaml", "microService1", "org.onap.policy.drools", createdBy, - getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools"))); - template.addLoopElementModel(getLoopElementModel("yaml", "oppolicy1", "org.onap.policy.drools.legacy", - createdBy, getPolicyModel("org.onap.policy.drools.legacy", "yaml", "1.0.0", "DroolsLegacy"))); - loopTemplateRepository.save(template); - return template; - } - - private Loop getLoop(String name, String blueprint, String globalPropertiesJson, - String dcaeId, String dcaeUrl, String dcaeBlueprintId) { - Loop loop = new Loop(); - loop.setName(name); - loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); - loop.setLastComputedState(LoopState.DESIGN); - loop.setDcaeDeploymentId(dcaeId); - loop.setDcaeDeploymentStatusUrl(dcaeUrl); - loop.setLoopTemplate(getLoopTemplates("templateName", "yaml", "toto", 1)); - return loop; - } - - private MicroServicePolicy getMicroServicePolicy(String name, String jsonRepresentation, String jsonProperties, - boolean shared, PolicyModel policyModel) { - MicroServicePolicy microService = new MicroServicePolicy(name, policyModel, shared, - gson.fromJson(jsonRepresentation, JsonObject.class), null, null, null); - microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class)); - return microService; - } - - private LoopLog getLoopLog(LogType type, String message, Loop loop) { - return new LoopLog(message, type, "CLAMP", loop); - } - - /** - * This method does a crud test and save a loop template and a loop object in db. - */ - @Test - @Transactional - public void crudTest() { - // Setup - Loop loopTest = getLoop("ControlLoopTest", "yamlcontent", "{\"testname\":\"testvalue\"}", - "123456789", "https://dcaetest.org", "UUID-blueprint"); - OperationalPolicy opPolicy = this.getOperationalPolicy("{\"type\":\"GUARD\"}", "GuardOpPolicyTest", - getPolicyModel("org.onap.policy.drools.legacy", "yaml", "1.0.0", "DroolsLegacy")); - loopTest.addOperationalPolicy(opPolicy); - MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "{\"configtype\":\"json\"}", - "{\"param1\":\"value1\"}", true, getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools")); - loopTest.addMicroServicePolicy(microServicePolicy); - LoopLog loopLog = getLoopLog(LogType.INFO, "test message", loopTest); - loopTest.addLog(loopLog); - Service service = getService( - "{\"name\": \"vLoadBalancerMS\", \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\"}", "{\"CP\": {}}"); - loopTest.setModelService(service); - - // Attempt to save into the database the entire loop - Loop loopInDb = loopRepository.save(loopTest); - assertThat(loopInDb).isNotNull(); - assertThat(loopRepository.findById(loopInDb.getName()).get()).isNotNull(); - assertThat(loopInDb.getCreatedDate()).isNotNull(); - assertThat(loopInDb.getUpdatedDate()).isNotNull(); - assertThat(loopInDb.getUpdatedDate()).isEqualTo(loopInDb.getCreatedDate()); - assertThat(loopInDb.getName()).isEqualTo("ControlLoopTest"); - // Autogen id so now set the ID in the previous model so that we can compare the - // objects - loopLog.setId(((LoopLog) loopInDb.getLoopLogs().toArray()[0]).getId()); - - assertThat(loopInDb).isEqualToIgnoringGivenFields(loopTest, "components", "createdDate", "updatedDate", - "createdBy", "updatedBy"); - assertThat(loopRepository.existsById(loopTest.getName())).isEqualTo(true); - assertThat(operationalPolicyService.isExisting(opPolicy.getName())).isEqualTo(true); - assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isEqualTo(true); - assertThat(loopLogRepository.existsById(loopLog.getId())).isEqualTo(true); - assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isEqualTo(true); - assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isEqualTo(true); - assertThat(servicesRepository.existsById(loopInDb.getModelService().getServiceUuid())).isEqualTo(true); - assertThat(microServiceModelsRepository.existsById( - loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getName())) - .isEqualTo(true); - assertThat(policyModelsRepository.existsById(new PolicyModelId( - loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() - .first().getPolicyModelType(), - loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() - .first().getVersion()))).isEqualTo(true); - - // Now attempt to read from database - Loop loopInDbRetrieved = loopRepository.findById(loopTest.getName()).get(); - assertThat(loopInDbRetrieved).isEqualToIgnoringGivenFields(loopTest, "components", "createdDate", "updatedDate", - "createdBy", "updatedBy"); - assertThat(loopInDbRetrieved).isEqualToComparingOnlyGivenFields(loopInDb, "createdDate", "updatedDate", - "createdBy", "updatedBy"); - assertThat((LoopLog) loopInDbRetrieved.getLoopLogs().toArray()[0]).isEqualToComparingFieldByField(loopLog); - assertThat((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]) - .isEqualToIgnoringGivenFields(opPolicy, "createdDate", "updatedDate", "createdBy", "updatedBy"); - Assertions.assertThat( - ((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getCreatedDate()) - .isNotNull(); - Assertions.assertThat( - ((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getUpdatedDate()) - .isNotNull(); - Assertions.assertThat( - ((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getCreatedBy()) - .isNotNull(); - Assertions.assertThat( - ((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getUpdatedBy()) - .isNotNull(); - - assertThat((MicroServicePolicy) loopInDbRetrieved.getMicroServicePolicies().toArray()[0]) - .isEqualToIgnoringGivenFields(microServicePolicy, "createdDate", "updatedDate", "createdBy", - "updatedBy"); - - // Attempt an update - ((LoopLog) loopInDbRetrieved.getLoopLogs().toArray()[0]).setLogInstant(Instant.now()); - loopInDbRetrieved.setLastComputedState(LoopState.RUNNING); - Loop loopInDbRetrievedUpdated = loopRepository.saveAndFlush(loopInDbRetrieved); - // Loop loopInDbRetrievedUpdated = - // loopRepository.findById(loopTest.getName()).get(); - assertThat((LoopLog) loopInDbRetrievedUpdated.getLoopLogs().toArray()[0]) - .isEqualToComparingFieldByField(loopInDbRetrieved.getLoopLogs().toArray()[0]); - // UpdatedDate should have been changed - assertThat(loopInDbRetrievedUpdated.getUpdatedDate()).isNotEqualTo(loopInDbRetrievedUpdated.getCreatedDate()); - // createdDate should have NOT been changed - assertThat(loopInDbRetrievedUpdated.getCreatedDate()).isEqualTo(loopInDb.getCreatedDate()); - // other audit are the same - assertThat(loopInDbRetrievedUpdated.getCreatedBy()).isEqualTo("Not found"); - assertThat(loopInDbRetrievedUpdated.getUpdatedBy()).isEqualTo("Not found"); - - // Attempt to delete the object and check it has well been cascaded - - loopRepository.delete(loopInDbRetrieved); - assertThat(loopRepository.existsById(loopTest.getName())).isEqualTo(false); - assertThat(operationalPolicyService.isExisting(opPolicy.getName())).isEqualTo(false); - assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isEqualTo(true); - assertThat(loopLogRepository.existsById(loopLog.getId())).isEqualTo(false); - assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isEqualTo(true); - assertThat(servicesRepository.existsById(loopInDb.getModelService().getServiceUuid())).isEqualTo(true); - assertThat(microServiceModelsRepository.existsById( - loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getName())) - .isEqualTo(true); - - assertThat(policyModelsRepository.existsById(new PolicyModelId( - loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() - .first().getPolicyModelType(), - loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() - .first().getVersion()))).isEqualTo(true); - - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopRepositoriesItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopRepositoriesItTestCase.java new file mode 100644 index 000000000..24dd92909 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopRepositoriesItTestCase.java @@ -0,0 +1,258 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Modifications Copyright (c) 2019 Samsung + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import java.time.Instant; +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.loop.log.LogType; +import org.onap.policy.clamp.loop.log.LoopLog; +import org.onap.policy.clamp.loop.log.LoopLogRepository; +import org.onap.policy.clamp.loop.service.Service; +import org.onap.policy.clamp.loop.service.ServicesRepository; +import org.onap.policy.clamp.loop.template.LoopElementModel; +import org.onap.policy.clamp.loop.template.LoopElementModelsRepository; +import org.onap.policy.clamp.loop.template.LoopTemplate; +import org.onap.policy.clamp.loop.template.LoopTemplatesRepository; +import org.onap.policy.clamp.loop.template.PolicyModel; +import org.onap.policy.clamp.loop.template.PolicyModelId; +import org.onap.policy.clamp.loop.template.PolicyModelsRepository; +import org.onap.policy.clamp.policy.microservice.MicroServicePolicy; +import org.onap.policy.clamp.policy.microservice.MicroServicePolicyService; +import org.onap.policy.clamp.policy.operational.OperationalPolicy; +import org.onap.policy.clamp.policy.operational.OperationalPolicyService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = Application.class) +public class LoopRepositoriesItTestCase { + + private Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create(); + + @Autowired + private LoopsRepository loopRepository; + + @Autowired + private MicroServicePolicyService microServicePolicyService; + + @Autowired + private OperationalPolicyService operationalPolicyService; + + @Autowired + private LoopLogRepository loopLogRepository; + + @Autowired + private LoopTemplatesRepository loopTemplateRepository; + + @Autowired + private LoopElementModelsRepository microServiceModelsRepository; + + @Autowired + private PolicyModelsRepository policyModelsRepository; + + @Autowired + private ServicesRepository servicesRepository; + + private Service getService(String serviceDetails, String resourceDetails) { + return new Service(serviceDetails, resourceDetails); + } + + private OperationalPolicy getOperationalPolicy(String configJson, String name, PolicyModel policyModel) { + return new OperationalPolicy(name, null, new Gson().fromJson(configJson, JsonObject.class), policyModel, + null, null, null); + } + + private LoopElementModel getLoopElementModel(String yaml, String name, String policyType, String createdBy, + PolicyModel policyModel) { + LoopElementModel model = new LoopElementModel(name, policyType, yaml); + model.addPolicyModel(policyModel); + return model; + } + + private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, + String policyAcronym) { + return new PolicyModel(policyType, policyModelTosca, version, policyAcronym); + } + + private LoopTemplate getLoopTemplates(String name, String blueprint, String createdBy, + Integer maxInstancesAllowed) { + LoopTemplate template = new LoopTemplate(name, blueprint, maxInstancesAllowed, null); + template.addLoopElementModel(getLoopElementModel("yaml", "microService1", "org.onap.policy.drools", createdBy, + getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools"))); + template.addLoopElementModel(getLoopElementModel("yaml", "oppolicy1", "org.onap.policy.drools.legacy", + createdBy, getPolicyModel("org.onap.policy.drools.legacy", "yaml", "1.0.0", "DroolsLegacy"))); + loopTemplateRepository.save(template); + return template; + } + + private Loop getLoop(String name, String blueprint, String globalPropertiesJson, + String dcaeId, String dcaeUrl, String dcaeBlueprintId) { + Loop loop = new Loop(); + loop.setName(name); + loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class)); + loop.setLastComputedState(LoopState.DESIGN); + loop.setDcaeDeploymentId(dcaeId); + loop.setDcaeDeploymentStatusUrl(dcaeUrl); + loop.setLoopTemplate(getLoopTemplates("templateName", "yaml", "toto", 1)); + return loop; + } + + private MicroServicePolicy getMicroServicePolicy(String name, String jsonRepresentation, String jsonProperties, + boolean shared, PolicyModel policyModel) { + MicroServicePolicy microService = new MicroServicePolicy(name, policyModel, shared, + gson.fromJson(jsonRepresentation, JsonObject.class), null, null, null); + microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class)); + return microService; + } + + private LoopLog getLoopLog(LogType type, String message, Loop loop) { + return new LoopLog(message, type, "CLAMP", loop); + } + + /** + * This method does a crud test and save a loop template and a loop object in db. + */ + @Test + @Transactional + public void crudTest() { + // Setup + Loop loopTest = getLoop("ControlLoopTest", "yamlcontent", "{\"testname\":\"testvalue\"}", + "123456789", "https://dcaetest.org", "UUID-blueprint"); + OperationalPolicy opPolicy = this.getOperationalPolicy("{\"type\":\"GUARD\"}", "GuardOpPolicyTest", + getPolicyModel("org.onap.policy.drools.legacy", "yaml", "1.0.0", "DroolsLegacy")); + loopTest.addOperationalPolicy(opPolicy); + MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "{\"configtype\":\"json\"}", + "{\"param1\":\"value1\"}", true, getPolicyModel("org.onap.policy.drools", "yaml", "1.0.0", "Drools")); + loopTest.addMicroServicePolicy(microServicePolicy); + LoopLog loopLog = getLoopLog(LogType.INFO, "test message", loopTest); + loopTest.addLog(loopLog); + Service service = getService( + "{\"name\": \"vLoadBalancerMS\", \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\"}", "{\"CP\": {}}"); + loopTest.setModelService(service); + + // Attempt to save into the database the entire loop + Loop loopInDb = loopRepository.save(loopTest); + assertThat(loopInDb).isNotNull(); + assertThat(loopRepository.findById(loopInDb.getName()).get()).isNotNull(); + assertThat(loopInDb.getCreatedDate()).isNotNull(); + assertThat(loopInDb.getUpdatedDate()).isNotNull(); + assertThat(loopInDb.getUpdatedDate()).isEqualTo(loopInDb.getCreatedDate()); + assertThat(loopInDb.getName()).isEqualTo("ControlLoopTest"); + // Autogen id so now set the ID in the previous model so that we can compare the + // objects + loopLog.setId(((LoopLog) loopInDb.getLoopLogs().toArray()[0]).getId()); + + assertThat(loopInDb).isEqualToIgnoringGivenFields(loopTest, "components", "createdDate", "updatedDate", + "createdBy", "updatedBy"); + assertThat(loopRepository.existsById(loopTest.getName())).isTrue(); + assertThat(operationalPolicyService.isExisting(opPolicy.getName())).isTrue(); + assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isTrue(); + assertThat(loopLogRepository.existsById(loopLog.getId())).isEqualTo(true); + assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isTrue(); + assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isTrue(); + assertThat(servicesRepository.existsById(loopInDb.getModelService().getServiceUuid())).isTrue(); + assertThat(microServiceModelsRepository.existsById( + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getName())) + .isTrue(); + assertThat(policyModelsRepository.existsById(new PolicyModelId( + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() + .first().getPolicyModelType(), + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() + .first().getVersion()))).isTrue(); + + // Now attempt to read from database + Loop loopInDbRetrieved = loopRepository.findById(loopTest.getName()).get(); + assertThat(loopInDbRetrieved).isEqualToIgnoringGivenFields(loopTest, "components", "createdDate", "updatedDate", + "createdBy", "updatedBy"); + assertThat(loopInDbRetrieved).isEqualToComparingOnlyGivenFields(loopInDb, "createdDate", "updatedDate", + "createdBy", "updatedBy"); + assertThat((LoopLog) loopInDbRetrieved.getLoopLogs().toArray()[0]).isEqualToComparingFieldByField(loopLog); + assertThat((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]) + .isEqualToIgnoringGivenFields(opPolicy, "createdDate", "updatedDate", "createdBy", "updatedBy"); + Assertions.assertThat( + ((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getCreatedDate()) + .isNotNull(); + Assertions.assertThat( + ((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getUpdatedDate()) + .isNotNull(); + Assertions.assertThat( + ((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getCreatedBy()) + .isNotNull(); + Assertions.assertThat( + ((OperationalPolicy) loopInDbRetrieved.getOperationalPolicies().toArray()[0]).getUpdatedBy()) + .isNotNull(); + + assertThat((MicroServicePolicy) loopInDbRetrieved.getMicroServicePolicies().toArray()[0]) + .isEqualToIgnoringGivenFields(microServicePolicy, "createdDate", "updatedDate", "createdBy", + "updatedBy"); + + // Attempt an update + ((LoopLog) loopInDbRetrieved.getLoopLogs().toArray()[0]).setLogInstant(Instant.now()); + loopInDbRetrieved.setLastComputedState(LoopState.RUNNING); + Loop loopInDbRetrievedUpdated = loopRepository.saveAndFlush(loopInDbRetrieved); + // Loop loopInDbRetrievedUpdated = + // loopRepository.findById(loopTest.getName()).get(); + assertThat((LoopLog) loopInDbRetrievedUpdated.getLoopLogs().toArray()[0]) + .isEqualToComparingFieldByField(loopInDbRetrieved.getLoopLogs().toArray()[0]); + // UpdatedDate should have been changed + assertThat(loopInDbRetrievedUpdated.getUpdatedDate()).isNotEqualTo(loopInDbRetrievedUpdated.getCreatedDate()); + // createdDate should have NOT been changed + assertThat(loopInDbRetrievedUpdated.getCreatedDate()).isEqualTo(loopInDb.getCreatedDate()); + // other audit are the same + assertThat(loopInDbRetrievedUpdated.getCreatedBy()).isEqualTo("Not found"); + assertThat(loopInDbRetrievedUpdated.getUpdatedBy()).isEqualTo("Not found"); + + // Attempt to delete the object and check it has well been cascaded + + loopRepository.delete(loopInDbRetrieved); + assertThat(loopRepository.existsById(loopTest.getName())).isFalse(); + assertThat(operationalPolicyService.isExisting(opPolicy.getName())).isFalse(); + assertThat(microServicePolicyService.isExisting(microServicePolicy.getName())).isTrue(); + assertThat(loopLogRepository.existsById(loopLog.getId())).isFalse(); + assertThat(loopTemplateRepository.existsById(loopInDb.getLoopTemplate().getName())).isTrue(); + assertThat(servicesRepository.existsById(loopInDb.getModelService().getServiceUuid())).isTrue(); + assertThat(microServiceModelsRepository.existsById( + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getName())) + .isTrue(); + + assertThat(policyModelsRepository.existsById(new PolicyModelId( + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() + .first().getPolicyModelType(), + loopInDb.getLoopTemplate().getLoopElementModelsUsed().first().getLoopElementModel().getPolicyModels() + .first().getVersion()))).isTrue(); + + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopServiceItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopServiceItTestCase.java new file mode 100644 index 000000000..e38dee552 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopServiceItTestCase.java @@ -0,0 +1,381 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 Nokia Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.JsonObject; +import java.util.Set; +import java.util.stream.Collectors; +import javax.transaction.Transactional; +import org.assertj.core.api.Assertions; +import org.assertj.core.util.Lists; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.clds.util.JsonUtils; +import org.onap.policy.clamp.loop.log.LogType; +import org.onap.policy.clamp.loop.log.LoopLog; +import org.onap.policy.clamp.loop.log.LoopLogService; +import org.onap.policy.clamp.loop.template.LoopTemplate; +import org.onap.policy.clamp.loop.template.PolicyModel; +import org.onap.policy.clamp.loop.template.PolicyModelsService; +import org.onap.policy.clamp.policy.microservice.MicroServicePolicy; +import org.onap.policy.clamp.policy.microservice.MicroServicePolicyService; +import org.onap.policy.clamp.policy.operational.OperationalPolicy; +import org.onap.policy.clamp.policy.operational.OperationalPolicyService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class LoopServiceItTestCase { + + private static final String EXAMPLE_LOOP_NAME = "ClosedLoopTest"; + private static final String EXAMPLE_JSON = "{\"testName\":\"testValue\"}"; + + @Autowired + LoopService loopService; + + @Autowired + LoopsRepository loopsRepository; + + @Autowired + MicroServicePolicyService microServicePolicyService; + + @Autowired + OperationalPolicyService operationalPolicyService; + + @Autowired + LoopLogService loopLogService; + + @Autowired + PolicyModelsService policyModelsService; + + @Test + @Transactional + public void shouldCreateEmptyLoop() { + // given + String loopBlueprint = "blueprint"; + Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, loopBlueprint); + testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + testLoop.setLastComputedState(LoopState.DESIGN); + + // when + Loop actualLoop = loopService.saveOrUpdateLoop(testLoop); + + // then + assertThat(actualLoop).isNotNull(); + assertThat(actualLoop).isEqualTo(loopsRepository.findById(actualLoop.getName()).get()); + assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); + assertThat(actualLoop.getGlobalPropertiesJson().getAsJsonPrimitive("testName").getAsString()) + .isEqualTo("testValue"); + } + + @Test + @Transactional + public void shouldAddOperationalPolicyToLoop() { + // given + saveTestLoopToDb(); + OperationalPolicy operationalPolicy = new OperationalPolicy("policyName", null, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null, null); + + // when + Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, + Lists.newArrayList(operationalPolicy)); + + // then + assertThat(actualLoop).isNotNull(); + assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); + Set savedPolicies = actualLoop.getOperationalPolicies(); + assertThat(savedPolicies).hasSize(1); + assertThat(savedPolicies) + .usingElementComparatorIgnoringFields("loop", "createdBy", "createdDate", "updatedBy", "updatedDate") + .contains(operationalPolicy); + OperationalPolicy savedPolicy = savedPolicies.iterator().next(); + Assertions.assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME); + + } + + @Test + @Transactional + public void shouldAddMicroservicePolicyToLoop() { + // given + saveTestLoopToDb(); + PolicyModel policyModel = new PolicyModel("org.policies.policyModel1", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "policyModel1"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", policyModel, + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); + + // when + Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, + Lists.newArrayList(microServicePolicy)); + + // then + assertThat(actualLoop).isNotNull(); + assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); + Set savedPolicies = actualLoop.getMicroServicePolicies(); + assertThat(savedPolicies).hasSize(1); + assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops", "createdDate", "updatedDate", + "createdBy", "updatedBy").containsExactly(microServicePolicy); + assertThat(savedPolicies).extracting("usedByLoops").hasSize(1); + + } + + @Test + @Transactional + //@Commit + public void shouldCreateNewMicroservicePolicyAndUpdateJsonRepresentationOfOldOne() { + // given + saveTestLoopToDb(); + PolicyModel policyModel1 = new PolicyModel("org.policies.firstPolicyName", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "firstPolicyName"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = new PolicyModel("org.policies.secondPolicyName", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "secondPolicyName"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", policyModel1, false, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); + + loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy)); + MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("secondPolicyName", policyModel2, false, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); + + // when + firstMicroServicePolicy + .setConfigurationsJson(JsonUtils.GSON.fromJson("{\"name1\":\"value1\"}", JsonObject.class)); + Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, + Lists.newArrayList(firstMicroServicePolicy, secondMicroServicePolicy)); + + // then + assertThat(actualLoop).isNotNull(); + assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); + Set savedPolicies = actualLoop.getMicroServicePolicies(); + assertThat(savedPolicies).hasSize(2); + assertThat(savedPolicies).contains(firstMicroServicePolicy); + assertThat(savedPolicies).contains(secondMicroServicePolicy); + assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops", "createdDate", "updatedDate", + "createdBy", "updatedBy").containsExactlyInAnyOrder(firstMicroServicePolicy, secondMicroServicePolicy); + } + + private void saveTestLoopToDb() { + Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, "blueprint"); + testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); + LoopTemplate template = new LoopTemplate(); + template.setName("testTemplate"); + testLoop.setLoopTemplate(template); + loopService.saveOrUpdateLoop(testLoop); + } + + @Test + @Transactional + public void shouldRemoveOldMicroservicePolicyIfNotInUpdatedList() { + // given + saveTestLoopToDb(); + PolicyModel policyModel1 = new PolicyModel("org.policies.firstPolicyName", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "firstPolicyName"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = new PolicyModel("org.policies.secondPolicyName", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "secondPolicyName"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", policyModel1, + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); + loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy)); + + MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("secondPolicyName", policyModel2, + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); + + // when + Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, + Lists.newArrayList(secondMicroServicePolicy)); + + // then + assertThat(actualLoop).isNotNull(); + assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); + Set savedPolicies = actualLoop.getMicroServicePolicies(); + assertThat(savedPolicies).hasSize(1); + assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops", "createdDate", "updatedDate", + "createdBy", "updatedBy").containsExactly(secondMicroServicePolicy); + + } + + @Test + @Transactional + public void shouldCreateNewOperationalPolicyAndUpdateJsonRepresentationOfOldOne() { + // given + saveTestLoopToDb(); + + JsonObject newJsonConfiguration = JsonUtils.GSON.fromJson("{}", JsonObject.class); + + OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null, null); + loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy)); + + OperationalPolicy secondOperationalPolicy = new OperationalPolicy("secondPolicyName", null, + newJsonConfiguration, null, null, null, null); + + // when + firstOperationalPolicy.setConfigurationsJson(newJsonConfiguration); + Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, + Lists.newArrayList(firstOperationalPolicy, secondOperationalPolicy)); + + // then + assertThat(actualLoop).isNotNull(); + assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); + Set savedPolicies = actualLoop.getOperationalPolicies(); + assertThat(savedPolicies).hasSize(2); + assertThat(savedPolicies) + .usingElementComparatorIgnoringFields("loop", "createdDate", "updatedDate", "createdBy", "updatedBy") + .containsExactlyInAnyOrder(firstOperationalPolicy, secondOperationalPolicy); + Set policiesLoops = Lists.newArrayList(savedPolicies).stream().map(OperationalPolicy::getLoop) + .map(Loop::getName).collect(Collectors.toSet()); + assertThat(policiesLoops).containsExactly(EXAMPLE_LOOP_NAME); + } + + @Test + @Transactional + public void shouldRemoveOldOperationalPolicyIfNotInUpdatedList() { + // given + saveTestLoopToDb(); + + OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null, null); + loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy)); + + OperationalPolicy secondOperationalPolicy = new OperationalPolicy("policyName", null, + JsonUtils.GSON.fromJson("{}", JsonObject.class), null, null, "pdpGroup1", "pdpSubgroup1"); + + // when + Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, + Lists.newArrayList(secondOperationalPolicy)); + + // then + assertThat(actualLoop).isNotNull(); + assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); + Set savedPolicies = actualLoop.getOperationalPolicies(); + assertThat(savedPolicies).hasSize(1); + assertThat(savedPolicies) + .usingElementComparatorIgnoringFields("loop", "createdDate", "updatedDate", "createdBy", "updatedBy") + .containsExactly(secondOperationalPolicy); + OperationalPolicy savedPolicy = savedPolicies.iterator().next(); + Assertions.assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME); + + } + + @Test + @Transactional + public void shouldCreateModelPropertiesAndUpdateJsonRepresentationOfOldOne() { + // given + saveTestLoopToDb(); + String expectedJson = "{\"test\":\"test\"}"; + JsonObject baseGlobalProperites = JsonUtils.GSON.fromJson("{}", JsonObject.class); + JsonObject updatedGlobalProperites = JsonUtils.GSON.fromJson(expectedJson, JsonObject.class); + loopService.updateAndSaveGlobalPropertiesJson(EXAMPLE_LOOP_NAME, baseGlobalProperites); + + // when + Loop actualLoop = loopService.updateAndSaveGlobalPropertiesJson(EXAMPLE_LOOP_NAME, updatedGlobalProperites); + + // then + assertThat(actualLoop).isNotNull(); + assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); + JsonObject returnedGlobalProperties = actualLoop.getGlobalPropertiesJson(); + assertThat(returnedGlobalProperties.getAsJsonObject()).isEqualTo(updatedGlobalProperites); + } + + @Test + @Transactional + public void deleteAttempt() { + saveTestLoopToDb(); + // Add log + Loop loop = loopsRepository.findById(EXAMPLE_LOOP_NAME).orElse(null); + loop.addLog(new LoopLog("test", LogType.INFO, "CLAMP", loop)); + LoopTemplate template = new LoopTemplate(); + template.setName("testTemplate"); + loop.setLoopTemplate(template); + loop = loopService.saveOrUpdateLoop(loop); + // Add op policy + OperationalPolicy operationalPolicy = new OperationalPolicy("opPolicy", null, + JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null, null); + loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(operationalPolicy)); + + PolicyModel policyModel = new PolicyModel("org.policies.microPolicy", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "microPolicy"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + // Add Micro service policy + MicroServicePolicy microServicePolicy = new MicroServicePolicy("microPolicy", policyModel, + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); + loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(microServicePolicy)); + + // Verify it's there + assertThat(loopsRepository.findById(EXAMPLE_LOOP_NAME)).isPresent(); + loopService.deleteLoop(EXAMPLE_LOOP_NAME); + // Verify it's well deleted and has been cascaded, except for Microservice + assertThat(loopsRepository.findById(EXAMPLE_LOOP_NAME)).isNotPresent(); + assertThat(microServicePolicyService.isExisting("microPolicy")).isTrue(); + assertThat(operationalPolicyService.isExisting("opPolicy")).isFalse(); + assertThat(loopLogService.isExisting(((LoopLog) loop.getLoopLogs().toArray()[0]).getId())).isFalse(); + } + + @Test + @Transactional + public void testUpdateLoopState() { + saveTestLoopToDb(); + Loop loop = loopService.getLoop(EXAMPLE_LOOP_NAME); + loopService.updateLoopState(loop, "SUBMITTED"); + Loop updatedLoop = loopService.getLoop(EXAMPLE_LOOP_NAME); + assertThat(updatedLoop.getLastComputedState()).isEqualTo(LoopState.SUBMITTED); + } + + @Test + @Transactional + public void testUpdateDcaeDeploymentFields() { + saveTestLoopToDb(); + Loop loop = loopService.getLoop(EXAMPLE_LOOP_NAME); + loopService.updateDcaeDeploymentFields(loop, "CLAMP_c5ce429a-f570-48c5-a7ea-53bed8f86f85", + "https://deployment-handler.onap:8443"); + loop = loopService.getLoop(EXAMPLE_LOOP_NAME); + assertThat(loop.getDcaeDeploymentId()).isEqualTo("CLAMP_c5ce429a-f570-48c5-a7ea-53bed8f86f85"); + assertThat(loop.getDcaeDeploymentStatusUrl()).isEqualTo("https://deployment-handler.onap:8443"); + } + + @Test + @Transactional + public void testUpdateMicroservicePolicy() { + saveTestLoopToDb(); + assertThat(microServicePolicyService.isExisting("policyName")).isFalse(); + PolicyModel policyModel = new PolicyModel("org.policies.policyName", + "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "policyName"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", policyModel, + false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); + loopService.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, microServicePolicy); + assertThat(microServicePolicyService.isExisting("policyName")).isTrue(); + } + + private Loop createTestLoop(String loopName, String loopBlueprint) { + return new Loop(loopName); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopServiceTestItCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopServiceTestItCase.java deleted file mode 100644 index 74092727c..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopServiceTestItCase.java +++ /dev/null @@ -1,381 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 Nokia Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.loop; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.google.gson.JsonObject; -import java.util.Set; -import java.util.stream.Collectors; -import javax.transaction.Transactional; -import org.assertj.core.api.Assertions; -import org.assertj.core.util.Lists; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.clds.util.JsonUtils; -import org.onap.policy.clamp.loop.log.LogType; -import org.onap.policy.clamp.loop.log.LoopLog; -import org.onap.policy.clamp.loop.log.LoopLogService; -import org.onap.policy.clamp.loop.template.LoopTemplate; -import org.onap.policy.clamp.loop.template.PolicyModel; -import org.onap.policy.clamp.loop.template.PolicyModelsService; -import org.onap.policy.clamp.policy.microservice.MicroServicePolicy; -import org.onap.policy.clamp.policy.microservice.MicroServicePolicyService; -import org.onap.policy.clamp.policy.operational.OperationalPolicy; -import org.onap.policy.clamp.policy.operational.OperationalPolicyService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class LoopServiceTestItCase { - - private static final String EXAMPLE_LOOP_NAME = "ClosedLoopTest"; - private static final String EXAMPLE_JSON = "{\"testName\":\"testValue\"}"; - - @Autowired - LoopService loopService; - - @Autowired - LoopsRepository loopsRepository; - - @Autowired - MicroServicePolicyService microServicePolicyService; - - @Autowired - OperationalPolicyService operationalPolicyService; - - @Autowired - LoopLogService loopLogService; - - @Autowired - PolicyModelsService policyModelsService; - - @Test - @Transactional - public void shouldCreateEmptyLoop() { - // given - String loopBlueprint = "blueprint"; - Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, loopBlueprint); - testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); - testLoop.setLastComputedState(LoopState.DESIGN); - - // when - Loop actualLoop = loopService.saveOrUpdateLoop(testLoop); - - // then - assertThat(actualLoop).isNotNull(); - assertThat(actualLoop).isEqualTo(loopsRepository.findById(actualLoop.getName()).get()); - assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); - assertThat(actualLoop.getGlobalPropertiesJson().getAsJsonPrimitive("testName").getAsString()) - .isEqualTo("testValue"); - } - - @Test - @Transactional - public void shouldAddOperationalPolicyToLoop() { - // given - saveTestLoopToDb(); - OperationalPolicy operationalPolicy = new OperationalPolicy("policyName", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null, null); - - // when - Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(operationalPolicy)); - - // then - assertThat(actualLoop).isNotNull(); - assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); - Set savedPolicies = actualLoop.getOperationalPolicies(); - assertThat(savedPolicies).hasSize(1); - assertThat(savedPolicies) - .usingElementComparatorIgnoringFields("loop", "createdBy", "createdDate", "updatedBy", "updatedDate") - .contains(operationalPolicy); - OperationalPolicy savedPolicy = savedPolicies.iterator().next(); - Assertions.assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME); - - } - - @Test - @Transactional - public void shouldAddMicroservicePolicyToLoop() { - // given - saveTestLoopToDb(); - PolicyModel policyModel = new PolicyModel("org.policies.policyModel1", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "policyModel1"); - policyModelsService.saveOrUpdatePolicyModel(policyModel); - MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", policyModel, - false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); - - // when - Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(microServicePolicy)); - - // then - assertThat(actualLoop).isNotNull(); - assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); - Set savedPolicies = actualLoop.getMicroServicePolicies(); - assertThat(savedPolicies).hasSize(1); - assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops", "createdDate", "updatedDate", - "createdBy", "updatedBy").containsExactly(microServicePolicy); - assertThat(savedPolicies).extracting("usedByLoops").hasSize(1); - - } - - @Test - @Transactional - //@Commit - public void shouldCreateNewMicroservicePolicyAndUpdateJsonRepresentationOfOldOne() { - // given - saveTestLoopToDb(); - PolicyModel policyModel1 = new PolicyModel("org.policies.firstPolicyName", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "firstPolicyName"); - policyModelsService.saveOrUpdatePolicyModel(policyModel1); - PolicyModel policyModel2 = new PolicyModel("org.policies.secondPolicyName", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "secondPolicyName"); - policyModelsService.saveOrUpdatePolicyModel(policyModel2); - MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", policyModel1, false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); - - loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy)); - MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("secondPolicyName", policyModel2, false, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); - - // when - firstMicroServicePolicy - .setConfigurationsJson(JsonUtils.GSON.fromJson("{\"name1\":\"value1\"}", JsonObject.class)); - Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(firstMicroServicePolicy, secondMicroServicePolicy)); - - // then - assertThat(actualLoop).isNotNull(); - assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); - Set savedPolicies = actualLoop.getMicroServicePolicies(); - assertThat(savedPolicies).hasSize(2); - assertThat(savedPolicies).contains(firstMicroServicePolicy); - assertThat(savedPolicies).contains(secondMicroServicePolicy); - assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops", "createdDate", "updatedDate", - "createdBy", "updatedBy").containsExactlyInAnyOrder(firstMicroServicePolicy, secondMicroServicePolicy); - } - - private void saveTestLoopToDb() { - Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, "blueprint"); - testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class)); - LoopTemplate template = new LoopTemplate(); - template.setName("testTemplate"); - testLoop.setLoopTemplate(template); - loopService.saveOrUpdateLoop(testLoop); - } - - @Test - @Transactional - public void shouldRemoveOldMicroservicePolicyIfNotInUpdatedList() { - // given - saveTestLoopToDb(); - PolicyModel policyModel1 = new PolicyModel("org.policies.firstPolicyName", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "firstPolicyName"); - policyModelsService.saveOrUpdatePolicyModel(policyModel1); - PolicyModel policyModel2 = new PolicyModel("org.policies.secondPolicyName", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "secondPolicyName"); - policyModelsService.saveOrUpdatePolicyModel(policyModel2); - MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", policyModel1, - false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); - loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy)); - - MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("secondPolicyName", policyModel2, - false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); - - // when - Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(secondMicroServicePolicy)); - - // then - assertThat(actualLoop).isNotNull(); - assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); - Set savedPolicies = actualLoop.getMicroServicePolicies(); - assertThat(savedPolicies).hasSize(1); - assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops", "createdDate", "updatedDate", - "createdBy", "updatedBy").containsExactly(secondMicroServicePolicy); - - } - - @Test - @Transactional - public void shouldCreateNewOperationalPolicyAndUpdateJsonRepresentationOfOldOne() { - // given - saveTestLoopToDb(); - - JsonObject newJsonConfiguration = JsonUtils.GSON.fromJson("{}", JsonObject.class); - - OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null, null); - loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy)); - - OperationalPolicy secondOperationalPolicy = new OperationalPolicy("secondPolicyName", null, - newJsonConfiguration, null, null, null, null); - - // when - firstOperationalPolicy.setConfigurationsJson(newJsonConfiguration); - Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(firstOperationalPolicy, secondOperationalPolicy)); - - // then - assertThat(actualLoop).isNotNull(); - assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); - Set savedPolicies = actualLoop.getOperationalPolicies(); - assertThat(savedPolicies).hasSize(2); - assertThat(savedPolicies) - .usingElementComparatorIgnoringFields("loop", "createdDate", "updatedDate", "createdBy", "updatedBy") - .containsExactlyInAnyOrder(firstOperationalPolicy, secondOperationalPolicy); - Set policiesLoops = Lists.newArrayList(savedPolicies).stream().map(OperationalPolicy::getLoop) - .map(Loop::getName).collect(Collectors.toSet()); - assertThat(policiesLoops).containsExactly(EXAMPLE_LOOP_NAME); - } - - @Test - @Transactional - public void shouldRemoveOldOperationalPolicyIfNotInUpdatedList() { - // given - saveTestLoopToDb(); - - OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null, null); - loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy)); - - OperationalPolicy secondOperationalPolicy = new OperationalPolicy("policyName", null, - JsonUtils.GSON.fromJson("{}", JsonObject.class), null, null, "pdpGroup1", "pdpSubgroup1"); - - // when - Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, - Lists.newArrayList(secondOperationalPolicy)); - - // then - assertThat(actualLoop).isNotNull(); - assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); - Set savedPolicies = actualLoop.getOperationalPolicies(); - assertThat(savedPolicies).hasSize(1); - assertThat(savedPolicies) - .usingElementComparatorIgnoringFields("loop", "createdDate", "updatedDate", "createdBy", "updatedBy") - .containsExactly(secondOperationalPolicy); - OperationalPolicy savedPolicy = savedPolicies.iterator().next(); - Assertions.assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME); - - } - - @Test - @Transactional - public void shouldCreateModelPropertiesAndUpdateJsonRepresentationOfOldOne() { - // given - saveTestLoopToDb(); - String expectedJson = "{\"test\":\"test\"}"; - JsonObject baseGlobalProperites = JsonUtils.GSON.fromJson("{}", JsonObject.class); - JsonObject updatedGlobalProperites = JsonUtils.GSON.fromJson(expectedJson, JsonObject.class); - loopService.updateAndSaveGlobalPropertiesJson(EXAMPLE_LOOP_NAME, baseGlobalProperites); - - // when - Loop actualLoop = loopService.updateAndSaveGlobalPropertiesJson(EXAMPLE_LOOP_NAME, updatedGlobalProperites); - - // then - assertThat(actualLoop).isNotNull(); - assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME); - JsonObject returnedGlobalProperties = actualLoop.getGlobalPropertiesJson(); - assertThat(returnedGlobalProperties.getAsJsonObject()).isEqualTo(updatedGlobalProperites); - } - - @Test - @Transactional - public void deleteAttempt() { - saveTestLoopToDb(); - // Add log - Loop loop = loopsRepository.findById(EXAMPLE_LOOP_NAME).orElse(null); - loop.addLog(new LoopLog("test", LogType.INFO, "CLAMP", loop)); - LoopTemplate template = new LoopTemplate(); - template.setName("testTemplate"); - loop.setLoopTemplate(template); - loop = loopService.saveOrUpdateLoop(loop); - // Add op policy - OperationalPolicy operationalPolicy = new OperationalPolicy("opPolicy", null, - JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null, null); - loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(operationalPolicy)); - - PolicyModel policyModel = new PolicyModel("org.policies.microPolicy", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "microPolicy"); - policyModelsService.saveOrUpdatePolicyModel(policyModel); - // Add Micro service policy - MicroServicePolicy microServicePolicy = new MicroServicePolicy("microPolicy", policyModel, - false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); - loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(microServicePolicy)); - - // Verify it's there - assertThat(loopsRepository.findById(EXAMPLE_LOOP_NAME).orElse(null)).isNotNull(); - loopService.deleteLoop(EXAMPLE_LOOP_NAME); - // Verify it's well deleted and has been cascaded, except for Microservice - assertThat(loopsRepository.findById(EXAMPLE_LOOP_NAME).orElse(null)).isNull(); - assertThat(microServicePolicyService.isExisting("microPolicy")).isTrue(); - assertThat(operationalPolicyService.isExisting("opPolicy")).isFalse(); - assertThat(loopLogService.isExisting(((LoopLog) loop.getLoopLogs().toArray()[0]).getId())).isFalse(); - } - - @Test - @Transactional - public void testUpdateLoopState() { - saveTestLoopToDb(); - Loop loop = loopService.getLoop(EXAMPLE_LOOP_NAME); - loopService.updateLoopState(loop, "SUBMITTED"); - Loop updatedLoop = loopService.getLoop(EXAMPLE_LOOP_NAME); - assertThat(updatedLoop.getLastComputedState()).isEqualTo(LoopState.SUBMITTED); - } - - @Test - @Transactional - public void testUpdateDcaeDeploymentFields() { - saveTestLoopToDb(); - Loop loop = loopService.getLoop(EXAMPLE_LOOP_NAME); - loopService.updateDcaeDeploymentFields(loop, "CLAMP_c5ce429a-f570-48c5-a7ea-53bed8f86f85", - "https://deployment-handler.onap:8443"); - loop = loopService.getLoop(EXAMPLE_LOOP_NAME); - assertThat(loop.getDcaeDeploymentId()).isEqualTo("CLAMP_c5ce429a-f570-48c5-a7ea-53bed8f86f85"); - assertThat(loop.getDcaeDeploymentStatusUrl()).isEqualTo("https://deployment-handler.onap:8443"); - } - - @Test - @Transactional - public void testUpdateMicroservicePolicy() { - saveTestLoopToDb(); - assertThat(microServicePolicyService.isExisting("policyName")).isFalse(); - PolicyModel policyModel = new PolicyModel("org.policies.policyName", - "tosca_definitions_version: tosca_simple_yaml_1_0_0", "1.0.0", "policyName"); - policyModelsService.saveOrUpdatePolicyModel(policyModel); - MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", policyModel, - false, JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null, null, null); - loopService.updateMicroservicePolicy(EXAMPLE_LOOP_NAME, microServicePolicy); - assertThat(microServicePolicyService.isExisting("policyName")).isTrue(); - } - - private Loop createTestLoop(String loopName, String loopBlueprint) { - return new Loop(loopName); - } -} \ No newline at end of file diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopTemplatesServiceItCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopTemplatesServiceItCase.java deleted file mode 100644 index dba7c39a9..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopTemplatesServiceItCase.java +++ /dev/null @@ -1,146 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.loop; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.List; -import java.util.SortedSet; -import javax.transaction.Transactional; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.loop.template.LoopElementModel; -import org.onap.policy.clamp.loop.template.LoopTemplate; -import org.onap.policy.clamp.loop.template.LoopTemplateLoopElementModel; -import org.onap.policy.clamp.loop.template.LoopTemplatesService; -import org.onap.policy.clamp.loop.template.LoopType; -import org.onap.policy.clamp.loop.template.PolicyModel; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class LoopTemplatesServiceItCase { - - @Autowired - LoopTemplatesService loopTemplatesService; - - private static final String POLICY_MODEL_TYPE_1 = "org.onap.test"; - private static final String VERSION = "1.0.0"; - - private LoopElementModel getLoopElementModel(String yaml, String name, String loopElementType, - String createdBy, PolicyModel policyModel) { - LoopElementModel model = new LoopElementModel(name, loopElementType, yaml); - model.setBlueprint(""); - model.setDcaeBlueprintId(""); - model.addPolicyModel(policyModel); - return model; - } - - private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, - String policyAcronym, String createdBy) { - return new PolicyModel(policyType, policyModelTosca, version, policyAcronym); - } - - private LoopTemplate getLoopTemplate(String name, String blueprint, String createdBy, Integer maxInstancesAllowed) { - LoopTemplate template = - new LoopTemplate(name, blueprint, maxInstancesAllowed, null); - template.addLoopElementModel(getLoopElementModel("yaml", "microService1", "MicroService", - createdBy, getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", VERSION, "MS1", createdBy))); - template.setAllowedLoopType(LoopType.OPEN); - return template; - } - - @Test - @Transactional - public void shouldSaveOrUpdateLoopTemplate() { - LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "xyz", -1); - LoopTemplate actualLoopTemplate = - loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); - - assertNotNull(actualLoopTemplate); - assertThat(loopTemplate.getName()).isEqualTo("TemplateName"); - assertThat(loopTemplate.getAllowedLoopType()).isEqualTo(LoopType.OPEN); - } - - @Test - @Transactional - public void shouldReturnAllLoopTemplates() { - LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "xyz", -1); - loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); - List loopTemplateList = loopTemplatesService.getAllLoopTemplates(); - - assertNotNull(loopTemplateList); - } - - @Test - @Transactional - public void shouldReturnLoopTemplateNames() { - LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "xyz", -1); - loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); - List loopTemplateNames = loopTemplatesService.getLoopTemplateNames(); - - assertNotNull(loopTemplateNames); - assertEquals("TemplateName", loopTemplateNames.get(0)); - } - - @Test - @Transactional - public void shouldReturnLoopTemplate() { - LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "xyz", -1); - loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); - LoopTemplate actualLoopTemplate = loopTemplatesService.getLoopTemplate("TemplateName"); - - assertNotNull(actualLoopTemplate); - assertThat(loopTemplate).isEqualTo(actualLoopTemplate); - assertThat(loopTemplate.getName()).isEqualTo(actualLoopTemplate.getName()); - assertThat(loopTemplate.getMaximumInstancesAllowed()) - .isEqualTo(actualLoopTemplate.getMaximumInstancesAllowed()); - SortedSet loopElementModelsUsed = - loopTemplate.getLoopElementModelsUsed(); - LoopTemplateLoopElementModel loopTemplateLoopElementModel = loopElementModelsUsed.first(); - assertThat(loopTemplateLoopElementModel.getLoopElementModel().getName()) - .isEqualTo("microService1"); - assertThat(loopTemplateLoopElementModel.getLoopTemplate().getName()) - .isEqualTo("TemplateName"); - assertNull(actualLoopTemplate.getBlueprint()); - assertNull(actualLoopTemplate.getModelService()); - } - - @Test - @Transactional - public void shouldDeleteLoopTemplate() { - LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "xyz", -1); - loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); - loopTemplatesService.deleteLoopTemplate("TemplateName"); - LoopTemplate actualLoopTemplate = loopTemplatesService.getLoopTemplate("TemplateName"); - assertNull(actualLoopTemplate); - } - -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/LoopTemplatesServiceItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopTemplatesServiceItTestCase.java new file mode 100644 index 000000000..26ab9b37c --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/loop/LoopTemplatesServiceItTestCase.java @@ -0,0 +1,146 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.SortedSet; +import javax.transaction.Transactional; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.loop.template.LoopElementModel; +import org.onap.policy.clamp.loop.template.LoopTemplate; +import org.onap.policy.clamp.loop.template.LoopTemplateLoopElementModel; +import org.onap.policy.clamp.loop.template.LoopTemplatesService; +import org.onap.policy.clamp.loop.template.LoopType; +import org.onap.policy.clamp.loop.template.PolicyModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class LoopTemplatesServiceItTestCase { + + @Autowired + LoopTemplatesService loopTemplatesService; + + private static final String POLICY_MODEL_TYPE_1 = "org.onap.test"; + private static final String VERSION = "1.0.0"; + + private LoopElementModel getLoopElementModel(String yaml, String name, String loopElementType, + String createdBy, PolicyModel policyModel) { + LoopElementModel model = new LoopElementModel(name, loopElementType, yaml); + model.setBlueprint(""); + model.setDcaeBlueprintId(""); + model.addPolicyModel(policyModel); + return model; + } + + private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, + String policyAcronym, String createdBy) { + return new PolicyModel(policyType, policyModelTosca, version, policyAcronym); + } + + private LoopTemplate getLoopTemplate(String name, String blueprint, String createdBy, Integer maxInstancesAllowed) { + LoopTemplate template = + new LoopTemplate(name, blueprint, maxInstancesAllowed, null); + template.addLoopElementModel(getLoopElementModel("yaml", "microService1", "MicroService", + createdBy, getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", VERSION, "MS1", createdBy))); + template.setAllowedLoopType(LoopType.OPEN); + return template; + } + + @Test + @Transactional + public void shouldSaveOrUpdateLoopTemplate() { + LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "xyz", -1); + LoopTemplate actualLoopTemplate = + loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); + + assertNotNull(actualLoopTemplate); + assertThat(loopTemplate.getName()).isEqualTo("TemplateName"); + assertThat(loopTemplate.getAllowedLoopType()).isEqualTo(LoopType.OPEN); + } + + @Test + @Transactional + public void shouldReturnAllLoopTemplates() { + LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "xyz", -1); + loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); + List loopTemplateList = loopTemplatesService.getAllLoopTemplates(); + + assertNotNull(loopTemplateList); + } + + @Test + @Transactional + public void shouldReturnLoopTemplateNames() { + LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "xyz", -1); + loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); + List loopTemplateNames = loopTemplatesService.getLoopTemplateNames(); + + assertNotNull(loopTemplateNames); + assertEquals("TemplateName", loopTemplateNames.get(0)); + } + + @Test + @Transactional + public void shouldReturnLoopTemplate() { + LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "xyz", -1); + loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); + LoopTemplate actualLoopTemplate = loopTemplatesService.getLoopTemplate("TemplateName"); + + assertNotNull(actualLoopTemplate); + assertThat(loopTemplate).isEqualTo(actualLoopTemplate); + assertThat(loopTemplate.getName()).isEqualTo(actualLoopTemplate.getName()); + assertThat(loopTemplate.getMaximumInstancesAllowed()) + .isEqualTo(actualLoopTemplate.getMaximumInstancesAllowed()); + SortedSet loopElementModelsUsed = + loopTemplate.getLoopElementModelsUsed(); + LoopTemplateLoopElementModel loopTemplateLoopElementModel = loopElementModelsUsed.first(); + assertThat(loopTemplateLoopElementModel.getLoopElementModel().getName()) + .isEqualTo("microService1"); + assertThat(loopTemplateLoopElementModel.getLoopTemplate().getName()) + .isEqualTo("TemplateName"); + assertNull(actualLoopTemplate.getBlueprint()); + assertNull(actualLoopTemplate.getModelService()); + } + + @Test + @Transactional + public void shouldDeleteLoopTemplate() { + LoopTemplate loopTemplate = getLoopTemplate("TemplateName", null, "xyz", -1); + loopTemplatesService.saveOrUpdateLoopTemplate(loopTemplate); + loopTemplatesService.deleteLoopTemplate("TemplateName"); + LoopTemplate actualLoopTemplate = loopTemplatesService.getLoopTemplate("TemplateName"); + assertNull(actualLoopTemplate); + } + +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItCase.java deleted file mode 100644 index a2563b8d3..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItCase.java +++ /dev/null @@ -1,300 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.loop; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.google.gson.JsonObject; -import java.io.IOException; -import java.util.LinkedList; -import java.util.List; -import java.util.SortedSet; -import java.util.TreeSet; -import java.util.stream.Collectors; -import javax.transaction.Transactional; -import org.assertj.core.api.Assertions; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.clds.util.JsonUtils; -import org.onap.policy.clamp.clds.util.ResourceFileUtils; -import org.onap.policy.clamp.loop.template.PolicyModel; -import org.onap.policy.clamp.loop.template.PolicyModelId; -import org.onap.policy.clamp.loop.template.PolicyModelsRepository; -import org.onap.policy.clamp.loop.template.PolicyModelsService; -import org.onap.policy.models.pdp.concepts.PdpGroup; -import org.onap.policy.models.pdp.concepts.PdpGroups; -import org.onap.policy.models.pdp.concepts.PdpSubGroup; -import org.onap.policy.models.pdp.enums.PdpState; -import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; -import org.skyscreamer.jsonassert.JSONAssert; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class PolicyModelServiceItCase { - - @Autowired - PolicyModelsService policyModelsService; - - @Autowired - PolicyModelsRepository policyModelsRepository; - - private static final String POLICY_MODEL_TYPE_1 = "org.onap.testos"; - private static final String POLICY_MODEL_TYPE_1_VERSION_1 = "1.0.0"; - - private static final String POLICY_MODEL_TYPE_2 = "org.onap.testos2"; - private static final String POLICY_MODEL_TYPE_3 = "org.onap.testos3"; - private static final String POLICY_MODEL_TYPE_2_VERSION_1 = "1.0.0"; - private static final String POLICY_MODEL_TYPE_3_VERSION_1 = "1.0.0"; - private static final String POLICY_MODEL_TYPE_2_VERSION_2 = "2.0.0"; - - private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, - String policyAcronym, String policyVariant, String createdBy) { - PolicyModel policyModel = new PolicyModel(); - policyModel.setCreatedBy(createdBy); - policyModel.setPolicyAcronym(policyAcronym); - policyModel.setPolicyModelTosca(policyModelTosca); - policyModel.setPolicyModelType(policyType); - policyModel.setUpdatedBy(createdBy); - policyModel.setVersion(version); - return policyModel; - } - - /** - * This test the create policy Model. - */ - @Test - @Transactional - public void shouldCreatePolicyModel() { - // given - PolicyModel policyModel = getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", - POLICY_MODEL_TYPE_1_VERSION_1, "TEST", "VARIANT", "user"); - - // when - PolicyModel actualPolicyModel = policyModelsService.saveOrUpdatePolicyModel(policyModel); - - // then - assertThat(actualPolicyModel).isNotNull(); - assertThat(actualPolicyModel).isEqualTo(policyModelsRepository - .findById(new PolicyModelId(actualPolicyModel.getPolicyModelType(), - actualPolicyModel.getVersion())) - .get()); - assertThat(actualPolicyModel.getPolicyModelType()) - .isEqualTo(policyModel.getPolicyModelType()); - Assertions.assertThat(actualPolicyModel.getCreatedBy()).isEqualTo("Not found"); - Assertions.assertThat(actualPolicyModel.getCreatedDate()).isNotNull(); - assertThat(actualPolicyModel.getPolicyAcronym()).isEqualTo(policyModel.getPolicyAcronym()); - assertThat(actualPolicyModel.getPolicyModelTosca()) - .isEqualTo(policyModel.getPolicyModelTosca()); - Assertions.assertThat(actualPolicyModel.getUpdatedBy()).isEqualTo("Not found"); - Assertions.assertThat(actualPolicyModel.getUpdatedDate()).isNotNull(); - assertThat(actualPolicyModel.getVersion()).isEqualTo(policyModel.getVersion()); - - assertThat( - policyModelsService.getPolicyModel(POLICY_MODEL_TYPE_1, POLICY_MODEL_TYPE_1_VERSION_1)) - .isEqualToIgnoringGivenFields(policyModel, "createdDate", "updatedDate", - "createdBy", "updatedBy"); - } - - /** - * This tests the getPolicyModelJson. A json is expected. - * - * @throws IOException In case of failure - */ - @Test - @Transactional - public void shouldGetPolicyModelInJson() throws IOException { - PolicyModel policyModel = getPolicyModel("onap.policies.monitoring.cdap.tca.hi.lo.app", - ResourceFileUtils.getResourceAsString( - "http-cache/example/policy/api/v1/policytypes/" - + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/.file"), - "1.0.0", "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel); - - JsonObject policyTypeJson = - policyModelsService.getPolicyModelJson("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0"); - assertThat(policyTypeJson).isNotNull(); - JSONAssert.assertEquals(ResourceFileUtils.getResourceAsString("tosca/tca_hi_lo.json"), - policyTypeJson.toString(), - true); - } - - /** - * This tests a getAllPolicyModelTypes get. - */ - @Test - @Transactional - public void shouldReturnAllPolicyModelTypes() { - // given - PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", - POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel1); - PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", - POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel2); - List policyModelTypesList = policyModelsService.getAllPolicyModelTypes(); - - assertThat(policyModelTypesList).contains(policyModel1.getPolicyModelType(), - policyModel2.getPolicyModelType()); - } - - /** - * This tests a getAllPolicyModels get. - */ - @Test - @Transactional - public void shouldReturnAllPolicyModels() { - PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", - POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel1); - PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", - POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel2); - - assertThat(policyModelsService.getAllPolicyModels()).contains(policyModel1, policyModel2); - } - - /** - * This tests a getAllPolicyModelsByType get. - */ - @Test - @Transactional - public void shouldReturnAllModelsByType() { - PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", - POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel1); - PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", - POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel2); - - assertThat(policyModelsService.getAllPolicyModelsByType(POLICY_MODEL_TYPE_2)) - .contains(policyModel1, policyModel2); - } - - /** - * This tests the sorting of policyModel. - */ - @Test - @Transactional - public void shouldReturnSortedSet() { - PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", - POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel1); - PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", - POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel2); - PolicyModel policyModel3 = getPolicyModel(POLICY_MODEL_TYPE_3, "yaml", - POLICY_MODEL_TYPE_3_VERSION_1, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel3); - - SortedSet sortedSet = new TreeSet<>(); - policyModelsService.getAllPolicyModels().forEach(sortedSet::add); - List listToCheck = - sortedSet - .stream().filter(policy -> policy.equals(policyModel3) - || policy.equals(policyModel2) || policy.equals(policyModel1)) - .collect(Collectors.toList()); - assertThat(listToCheck.get(0)).isEqualByComparingTo(policyModel2); - assertThat(listToCheck.get(1)).isEqualByComparingTo(policyModel1); - assertThat(listToCheck.get(2)).isEqualByComparingTo(policyModel3); - } - - /** - * This tests the pdpgroup GSON encode/decode and saving. - */ - @Test - @Transactional - public void shouldAddPdpGroupInfo() { - policyModelsService.saveOrUpdatePolicyModel(getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", - POLICY_MODEL_TYPE_1_VERSION_1, "TEST", "VARIANT", "user")); - policyModelsService.saveOrUpdatePolicyModel(getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", - POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user")); - policyModelsService.saveOrUpdatePolicyModel(getPolicyModel(POLICY_MODEL_TYPE_3, "yaml", - POLICY_MODEL_TYPE_3_VERSION_1, "TEST", "VARIANT", "user")); - - ToscaConceptIdentifier type1 = new ToscaConceptIdentifier("org.onap.testos", "1.0.0"); - ToscaConceptIdentifier type2 = new ToscaConceptIdentifier("org.onap.testos2", "2.0.0"); - - PdpSubGroup pdpSubgroup1 = new PdpSubGroup(); - pdpSubgroup1.setPdpType("subGroup1"); - List pdpTypeList = new LinkedList<>(); - pdpTypeList.add(type1); - pdpTypeList.add(type2); - pdpSubgroup1.setSupportedPolicyTypes(pdpTypeList); - - ToscaConceptIdentifier type3 = new ToscaConceptIdentifier("org.onap.testos3", "2.0.0"); - PdpSubGroup pdpSubgroup2 = new PdpSubGroup(); - pdpSubgroup2.setPdpType("subGroup2"); - List pdpTypeList2 = new LinkedList<>(); - pdpTypeList2.add(type2); - pdpTypeList2.add(type3); - pdpSubgroup2.setSupportedPolicyTypes(pdpTypeList2); - - List pdpSubgroupList = new LinkedList<>(); - pdpSubgroupList.add(pdpSubgroup1); - - PdpGroup pdpGroup1 = new PdpGroup(); - pdpGroup1.setName("pdpGroup1"); - pdpGroup1.setPdpGroupState(PdpState.ACTIVE); - pdpGroup1.setPdpSubgroups(pdpSubgroupList); - - List pdpSubgroupList2 = new LinkedList<>(); - pdpSubgroupList2.add(pdpSubgroup1); - pdpSubgroupList2.add(pdpSubgroup2); - PdpGroup pdpGroup2 = new PdpGroup(); - pdpGroup2.setName("pdpGroup2"); - pdpGroup2.setPdpGroupState(PdpState.ACTIVE); - pdpGroup2.setPdpSubgroups(pdpSubgroupList2); - - List pdpGroupsList = new LinkedList<>(); - pdpGroupsList.add(pdpGroup1); - pdpGroupsList.add(pdpGroup2); - - PdpGroups pdpGroups = new PdpGroups(); - pdpGroups.setGroups(pdpGroupsList); - policyModelsService.updatePdpGroupInfo(pdpGroups); - - JsonObject res1 = - policyModelsService.getPolicyModel("org.onap.testos", "1.0.0").getPolicyPdpGroup(); - String expectedRes1 = - "{\"supportedPdpGroups\":[{\"pdpGroup1\":[\"subGroup1\"]},{\"pdpGroup2\":[\"subGroup1\"]}]}"; - JsonObject expectedJson1 = JsonUtils.GSON.fromJson(expectedRes1, JsonObject.class); - assertThat(res1).isEqualTo(expectedJson1); - - JsonObject res2 = - policyModelsService.getPolicyModel("org.onap.testos2", "2.0.0").getPolicyPdpGroup(); - String expectedRes2 = - "{\"supportedPdpGroups\":[{\"pdpGroup1\":[\"subGroup1\"]}," - + "{\"pdpGroup2\":[\"subGroup1\",\"subGroup2\"]}]}"; - JsonObject expectedJson2 = JsonUtils.GSON.fromJson(expectedRes2, JsonObject.class); - assertThat(res2).isEqualTo(expectedJson2); - - JsonObject res3 = - policyModelsService.getPolicyModel("org.onap.testos3", "1.0.0").getPolicyPdpGroup(); - assertThat(res3).isNull(); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItTestCase.java new file mode 100644 index 000000000..c47c55495 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItTestCase.java @@ -0,0 +1,299 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.loop; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.JsonObject; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; +import java.util.stream.Collectors; +import javax.transaction.Transactional; +import org.assertj.core.api.Assertions; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.clds.util.JsonUtils; +import org.onap.policy.clamp.clds.util.ResourceFileUtils; +import org.onap.policy.clamp.loop.template.PolicyModel; +import org.onap.policy.clamp.loop.template.PolicyModelId; +import org.onap.policy.clamp.loop.template.PolicyModelsRepository; +import org.onap.policy.clamp.loop.template.PolicyModelsService; +import org.onap.policy.models.pdp.concepts.PdpGroup; +import org.onap.policy.models.pdp.concepts.PdpGroups; +import org.onap.policy.models.pdp.concepts.PdpSubGroup; +import org.onap.policy.models.pdp.enums.PdpState; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; +import org.skyscreamer.jsonassert.JSONAssert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class PolicyModelServiceItTestCase { + + @Autowired + PolicyModelsService policyModelsService; + + @Autowired + PolicyModelsRepository policyModelsRepository; + + private static final String POLICY_MODEL_TYPE_1 = "org.onap.testos"; + private static final String POLICY_MODEL_TYPE_1_VERSION_1 = "1.0.0"; + + private static final String POLICY_MODEL_TYPE_2 = "org.onap.testos2"; + private static final String POLICY_MODEL_TYPE_3 = "org.onap.testos3"; + private static final String POLICY_MODEL_TYPE_2_VERSION_1 = "1.0.0"; + private static final String POLICY_MODEL_TYPE_3_VERSION_1 = "1.0.0"; + private static final String POLICY_MODEL_TYPE_2_VERSION_2 = "2.0.0"; + + private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version, + String policyAcronym, String policyVariant, String createdBy) { + PolicyModel policyModel = new PolicyModel(); + policyModel.setCreatedBy(createdBy); + policyModel.setPolicyAcronym(policyAcronym); + policyModel.setPolicyModelTosca(policyModelTosca); + policyModel.setPolicyModelType(policyType); + policyModel.setUpdatedBy(createdBy); + policyModel.setVersion(version); + return policyModel; + } + + /** + * This test the create policy Model. + */ + @Test + @Transactional + public void shouldCreatePolicyModel() { + // given + PolicyModel policyModel = getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", + POLICY_MODEL_TYPE_1_VERSION_1, "TEST", "VARIANT", "user"); + + // when + PolicyModel actualPolicyModel = policyModelsService.saveOrUpdatePolicyModel(policyModel); + + // then + assertThat(actualPolicyModel).isNotNull().isEqualTo(policyModelsRepository + .findById(new PolicyModelId(actualPolicyModel.getPolicyModelType(), + actualPolicyModel.getVersion())) + .get()); + assertThat(actualPolicyModel.getPolicyModelType()) + .isEqualTo(policyModel.getPolicyModelType()); + Assertions.assertThat(actualPolicyModel.getCreatedBy()).isEqualTo("Not found"); + Assertions.assertThat(actualPolicyModel.getCreatedDate()).isNotNull(); + assertThat(actualPolicyModel.getPolicyAcronym()).isEqualTo(policyModel.getPolicyAcronym()); + assertThat(actualPolicyModel.getPolicyModelTosca()) + .isEqualTo(policyModel.getPolicyModelTosca()); + Assertions.assertThat(actualPolicyModel.getUpdatedBy()).isEqualTo("Not found"); + Assertions.assertThat(actualPolicyModel.getUpdatedDate()).isNotNull(); + assertThat(actualPolicyModel.getVersion()).isEqualTo(policyModel.getVersion()); + + assertThat( + policyModelsService.getPolicyModel(POLICY_MODEL_TYPE_1, POLICY_MODEL_TYPE_1_VERSION_1)) + .isEqualToIgnoringGivenFields(policyModel, "createdDate", "updatedDate", + "createdBy", "updatedBy"); + } + + /** + * This tests the getPolicyModelJson. A json is expected. + * + * @throws IOException In case of failure + */ + @Test + @Transactional + public void shouldGetPolicyModelInJson() throws IOException { + PolicyModel policyModel = getPolicyModel("onap.policies.monitoring.cdap.tca.hi.lo.app", + ResourceFileUtils.getResourceAsString( + "http-cache/example/policy/api/v1/policytypes/" + + "onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/.file"), + "1.0.0", "TEST", "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel); + + JsonObject policyTypeJson = + policyModelsService.getPolicyModelJson("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0"); + assertThat(policyTypeJson).isNotNull(); + JSONAssert.assertEquals(ResourceFileUtils.getResourceAsString("tosca/tca_hi_lo.json"), + policyTypeJson.toString(), + true); + } + + /** + * This tests a getAllPolicyModelTypes get. + */ + @Test + @Transactional + public void shouldReturnAllPolicyModelTypes() { + // given + PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", + POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", + POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + List policyModelTypesList = policyModelsService.getAllPolicyModelTypes(); + + assertThat(policyModelTypesList).contains(policyModel1.getPolicyModelType(), + policyModel2.getPolicyModelType()); + } + + /** + * This tests a getAllPolicyModels get. + */ + @Test + @Transactional + public void shouldReturnAllPolicyModels() { + PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", + POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", + POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + + assertThat(policyModelsService.getAllPolicyModels()).contains(policyModel1, policyModel2); + } + + /** + * This tests a getAllPolicyModelsByType get. + */ + @Test + @Transactional + public void shouldReturnAllModelsByType() { + PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", + POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", + POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + + assertThat(policyModelsService.getAllPolicyModelsByType(POLICY_MODEL_TYPE_2)) + .contains(policyModel1, policyModel2); + } + + /** + * This tests the sorting of policyModel. + */ + @Test + @Transactional + public void shouldReturnSortedSet() { + PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", + POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel1); + PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", + POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel2); + PolicyModel policyModel3 = getPolicyModel(POLICY_MODEL_TYPE_3, "yaml", + POLICY_MODEL_TYPE_3_VERSION_1, "TEST", "VARIANT", "user"); + policyModelsService.saveOrUpdatePolicyModel(policyModel3); + + SortedSet sortedSet = new TreeSet<>(); + policyModelsService.getAllPolicyModels().forEach(sortedSet::add); + List listToCheck = + sortedSet + .stream().filter(policy -> policy.equals(policyModel3) + || policy.equals(policyModel2) || policy.equals(policyModel1)) + .collect(Collectors.toList()); + assertThat(listToCheck.get(0)).isEqualByComparingTo(policyModel2); + assertThat(listToCheck.get(1)).isEqualByComparingTo(policyModel1); + assertThat(listToCheck.get(2)).isEqualByComparingTo(policyModel3); + } + + /** + * This tests the pdpgroup GSON encode/decode and saving. + */ + @Test + @Transactional + public void shouldAddPdpGroupInfo() { + policyModelsService.saveOrUpdatePolicyModel(getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", + POLICY_MODEL_TYPE_1_VERSION_1, "TEST", "VARIANT", "user")); + policyModelsService.saveOrUpdatePolicyModel(getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", + POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user")); + policyModelsService.saveOrUpdatePolicyModel(getPolicyModel(POLICY_MODEL_TYPE_3, "yaml", + POLICY_MODEL_TYPE_3_VERSION_1, "TEST", "VARIANT", "user")); + + ToscaConceptIdentifier type1 = new ToscaConceptIdentifier("org.onap.testos", "1.0.0"); + ToscaConceptIdentifier type2 = new ToscaConceptIdentifier("org.onap.testos2", "2.0.0"); + + PdpSubGroup pdpSubgroup1 = new PdpSubGroup(); + pdpSubgroup1.setPdpType("subGroup1"); + List pdpTypeList = new LinkedList<>(); + pdpTypeList.add(type1); + pdpTypeList.add(type2); + pdpSubgroup1.setSupportedPolicyTypes(pdpTypeList); + + ToscaConceptIdentifier type3 = new ToscaConceptIdentifier("org.onap.testos3", "2.0.0"); + PdpSubGroup pdpSubgroup2 = new PdpSubGroup(); + pdpSubgroup2.setPdpType("subGroup2"); + List pdpTypeList2 = new LinkedList<>(); + pdpTypeList2.add(type2); + pdpTypeList2.add(type3); + pdpSubgroup2.setSupportedPolicyTypes(pdpTypeList2); + + List pdpSubgroupList = new LinkedList<>(); + pdpSubgroupList.add(pdpSubgroup1); + + PdpGroup pdpGroup1 = new PdpGroup(); + pdpGroup1.setName("pdpGroup1"); + pdpGroup1.setPdpGroupState(PdpState.ACTIVE); + pdpGroup1.setPdpSubgroups(pdpSubgroupList); + + List pdpSubgroupList2 = new LinkedList<>(); + pdpSubgroupList2.add(pdpSubgroup1); + pdpSubgroupList2.add(pdpSubgroup2); + PdpGroup pdpGroup2 = new PdpGroup(); + pdpGroup2.setName("pdpGroup2"); + pdpGroup2.setPdpGroupState(PdpState.ACTIVE); + pdpGroup2.setPdpSubgroups(pdpSubgroupList2); + + List pdpGroupsList = new LinkedList<>(); + pdpGroupsList.add(pdpGroup1); + pdpGroupsList.add(pdpGroup2); + + PdpGroups pdpGroups = new PdpGroups(); + pdpGroups.setGroups(pdpGroupsList); + policyModelsService.updatePdpGroupInfo(pdpGroups); + + JsonObject res1 = + policyModelsService.getPolicyModel("org.onap.testos", "1.0.0").getPolicyPdpGroup(); + String expectedRes1 = + "{\"supportedPdpGroups\":[{\"pdpGroup1\":[\"subGroup1\"]},{\"pdpGroup2\":[\"subGroup1\"]}]}"; + JsonObject expectedJson1 = JsonUtils.GSON.fromJson(expectedRes1, JsonObject.class); + assertThat(res1).isEqualTo(expectedJson1); + + JsonObject res2 = + policyModelsService.getPolicyModel("org.onap.testos2", "2.0.0").getPolicyPdpGroup(); + String expectedRes2 = + "{\"supportedPdpGroups\":[{\"pdpGroup1\":[\"subGroup1\"]}," + + "{\"pdpGroup2\":[\"subGroup1\",\"subGroup2\"]}]}"; + JsonObject expectedJson2 = JsonUtils.GSON.fromJson(expectedRes2, JsonObject.class); + assertThat(res2).isEqualTo(expectedJson2); + + JsonObject res3 = + policyModelsService.getPolicyModel("org.onap.testos3", "1.0.0").getPolicyPdpGroup(); + assertThat(res3).isNull(); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/loop/ServiceTest.java b/runtime/src/test/java/org/onap/policy/clamp/loop/ServiceTest.java index 8f28299fd..41fa61152 100644 --- a/runtime/src/test/java/org/onap/policy/clamp/loop/ServiceTest.java +++ b/runtime/src/test/java/org/onap/policy/clamp/loop/ServiceTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -44,11 +44,11 @@ public class ServiceTest { Service service2 = new Service(JsonUtils.GSON.fromJson(serviceStr2, JsonObject.class), null, "1.0"); - Service service3 = new Service(JsonUtils.GSON.fromJson(serviceStr3, JsonObject.class), + Service service3 = new Service(JsonUtils.GSON.fromJson(serviceStr3, JsonObject.class), JsonUtils.GSON.fromJson(resourceStr, JsonObject.class), "1.0"); - assertThat(service1.equals(service2)).isEqualTo(true); - assertThat(service1.equals(service3)).isEqualTo(false); + assertThat(service2).isEqualTo(service1); + assertThat(service3).isNotEqualTo(service1); } } diff --git a/runtime/src/test/java/org/onap/policy/clamp/policy/downloader/PolicyEngineControllerItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/policy/downloader/PolicyEngineControllerItTestCase.java new file mode 100644 index 000000000..81eba487c --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/policy/downloader/PolicyEngineControllerItTestCase.java @@ -0,0 +1,118 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights + * reserved. + * Modifications Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.policy.downloader; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import java.io.IOException; +import java.time.Instant; +import java.util.List; +import javax.transaction.Transactional; +import org.json.simple.parser.ParseException; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.onap.policy.clamp.clds.util.JsonUtils; +import org.onap.policy.clamp.loop.template.PolicyModel; +import org.onap.policy.clamp.loop.template.PolicyModelId; +import org.onap.policy.clamp.loop.template.PolicyModelsRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +@ActiveProfiles({"clamp-default", "clamp-policy-controller"}) +public class PolicyEngineControllerItTestCase { + + @Autowired + PolicyEngineController policyController; + + @Autowired + PolicyModelsRepository policyModelsRepository; + + /** + * This method tests a fake synchronization with the emulator. + * + * @throws JsonSyntaxException In case of issues + * @throws IOException In case of issues + * @throws InterruptedException In case of issues + */ + @Test + @Transactional + public void synchronizeAllPoliciesTest() throws JsonSyntaxException, IOException, InterruptedException { + policyController.synchronizeAllPolicies(); + Instant firstExecution = policyController.getLastInstantExecuted(); + assertThat(firstExecution).isNotNull(); + List policyModelsList = policyModelsRepository.findAll(); + assertThat(policyModelsList.size()).isGreaterThanOrEqualTo(5); + assertThat(policyModelsList).contains(new PolicyModel("onap.policies.controlloop.operational.common.Drools", + null, "1.0.0")) + .contains(new PolicyModel("onap.policies.controlloop.operational.common.Apex", null, "1.0.0")); + assertThat(policyModelsList) + .contains(new PolicyModel("onap.policies.controlloop.guard.common.FrequencyLimiter", null, "1.0.0")); + assertThat(policyModelsList) + .contains(new PolicyModel("onap.policies.controlloop.guard.common.Blacklist", null, "1.0.0")); + assertThat(policyModelsList) + .contains(new PolicyModel("onap.policies.controlloop.guard.common.MinMax", null, "2.0.0")); + + // Re-do it to check that there is no issue with duplicate key + policyController.synchronizeAllPolicies(); + Instant secondExecution = policyController.getLastInstantExecuted(); + assertThat(secondExecution).isNotNull(); + + assertThat(firstExecution).isBefore(secondExecution); + } + + @Test + @Transactional + public void downloadPdpGroupsTest() throws JsonSyntaxException, IOException, InterruptedException, ParseException { + PolicyModel policyModel1 = new PolicyModel("onap.policies.monitoring.test", null, "1.0.0"); + policyModelsRepository.saveAndFlush(policyModel1); + PolicyModel policyModel2 = new PolicyModel("onap.policies.controlloop.Operational", null, "1.0.0"); + policyModelsRepository.saveAndFlush(policyModel2); + + policyController.downloadPdpGroups(); + + List policyModelsList = policyModelsRepository.findAll(); + assertThat(policyModelsList.size()).isGreaterThanOrEqualTo(2); + + PolicyModel policy1 = policyModelsRepository + .getOne(new PolicyModelId("onap.policies.monitoring.test", "1.0.0")); + PolicyModel policy2 = policyModelsRepository + .getOne(new PolicyModelId("onap.policies.controlloop.Operational", "1.0.0")); + + String expectedRes1 = "{\"supportedPdpGroups\":[{\"monitoring\":[\"xacml\"]}]}"; + JsonObject expectedJson1 = JsonUtils.GSON.fromJson(expectedRes1, JsonObject.class); + assertThat(policy1.getPolicyPdpGroup()).isEqualTo(expectedJson1); + String expectedRes2 = "{\"supportedPdpGroups\":[{\"controlloop\":[\"apex\",\"drools\"]}]}"; + JsonObject expectedJson2 = JsonUtils.GSON.fromJson(expectedRes2, JsonObject.class); + assertThat(policy2.getPolicyPdpGroup()).isEqualTo(expectedJson2); + + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/policy/downloader/PolicyEngineControllerTestItCase.java b/runtime/src/test/java/org/onap/policy/clamp/policy/downloader/PolicyEngineControllerTestItCase.java deleted file mode 100644 index 8fbd2712b..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/policy/downloader/PolicyEngineControllerTestItCase.java +++ /dev/null @@ -1,119 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * Modifications Copyright (C) 2021 Nordix Foundation. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.policy.downloader; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.google.gson.JsonObject; -import com.google.gson.JsonSyntaxException; -import java.io.IOException; -import java.time.Instant; -import java.util.List; -import javax.transaction.Transactional; -import org.json.simple.parser.ParseException; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.onap.policy.clamp.clds.util.JsonUtils; -import org.onap.policy.clamp.loop.template.PolicyModel; -import org.onap.policy.clamp.loop.template.PolicyModelId; -import org.onap.policy.clamp.loop.template.PolicyModelsRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -@ActiveProfiles({"clamp-default", "clamp-policy-controller"}) -public class PolicyEngineControllerTestItCase { - - @Autowired - PolicyEngineController policyController; - - @Autowired - PolicyModelsRepository policyModelsRepository; - - /** - * This method tests a fake synchronization with the emulator. - * - * @throws JsonSyntaxException In case of issues - * @throws IOException In case of issues - * @throws InterruptedException In case of issues - */ - @Test - @Transactional - public void synchronizeAllPoliciesTest() throws JsonSyntaxException, IOException, InterruptedException { - policyController.synchronizeAllPolicies(); - Instant firstExecution = policyController.getLastInstantExecuted(); - assertThat(firstExecution).isNotNull(); - List policyModelsList = policyModelsRepository.findAll(); - assertThat(policyModelsList.size()).isGreaterThanOrEqualTo(5); - assertThat(policyModelsList).contains(new PolicyModel("onap.policies.controlloop.operational.common.Drools", - null, "1.0.0")); - assertThat(policyModelsList).contains(new PolicyModel("onap.policies.controlloop.operational.common.Apex", - null, "1.0.0")); - assertThat(policyModelsList) - .contains(new PolicyModel("onap.policies.controlloop.guard.common.FrequencyLimiter", null, "1.0.0")); - assertThat(policyModelsList) - .contains(new PolicyModel("onap.policies.controlloop.guard.common.Blacklist", null, "1.0.0")); - assertThat(policyModelsList) - .contains(new PolicyModel("onap.policies.controlloop.guard.common.MinMax", null, "2.0.0")); - - // Re-do it to check that there is no issue with duplicate key - policyController.synchronizeAllPolicies(); - Instant secondExecution = policyController.getLastInstantExecuted(); - assertThat(secondExecution).isNotNull(); - - assertThat(firstExecution).isBefore(secondExecution); - } - - @Test - @Transactional - public void downloadPdpGroupsTest() throws JsonSyntaxException, IOException, InterruptedException, ParseException { - PolicyModel policyModel1 = new PolicyModel("onap.policies.monitoring.test", null, "1.0.0"); - policyModelsRepository.saveAndFlush(policyModel1); - PolicyModel policyModel2 = new PolicyModel("onap.policies.controlloop.Operational", null, "1.0.0"); - policyModelsRepository.saveAndFlush(policyModel2); - - policyController.downloadPdpGroups(); - - List policyModelsList = policyModelsRepository.findAll(); - assertThat(policyModelsList.size()).isGreaterThanOrEqualTo(2); - - PolicyModel policy1 = policyModelsRepository - .getOne(new PolicyModelId("onap.policies.monitoring.test", "1.0.0")); - PolicyModel policy2 = policyModelsRepository - .getOne(new PolicyModelId("onap.policies.controlloop.Operational", "1.0.0")); - - String expectedRes1 = "{\"supportedPdpGroups\":[{\"monitoring\":[\"xacml\"]}]}"; - JsonObject expectedJson1 = JsonUtils.GSON.fromJson(expectedRes1, JsonObject.class); - assertThat(policy1.getPolicyPdpGroup()).isEqualTo(expectedJson1); - String expectedRes2 = "{\"supportedPdpGroups\":[{\"controlloop\":[\"apex\",\"drools\"]}]}"; - JsonObject expectedJson2 = JsonUtils.GSON.fromJson(expectedRes2, JsonObject.class); - assertThat(policy2.getPolicyPdpGroup()).isEqualTo(expectedJson2); - - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/runtime/RuntimeCommissioningResponseItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/runtime/RuntimeCommissioningResponseItTestCase.java new file mode 100644 index 000000000..7824be460 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/runtime/RuntimeCommissioningResponseItTestCase.java @@ -0,0 +1,199 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.clamp.runtime; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.builder.ExchangeBuilder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpStatus; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class RuntimeCommissioningResponseItTestCase { + @Autowired + CamelContext camelContext; + + private static final String SAMPLE_TOSCA_TEMPLATE = + "{\"tosca_definitions_version\": \"tosca_simple_yaml_1_1_0\"," + + "\"data_types\": {},\"node_types\": {}, \"policy_types\": {}," + + " \"topology_template\": {}," + + " \"name\": \"ToscaServiceTemplateSimple\", \"version\": \"1.0.0\", \"metadata\": {}}"; + + @Test + public void testToscaServiceTemplateSchemaStatus() { + ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); + + Exchange exchangeResponse = + prodTemplate.send("direct:get-json-schema", ExchangeBuilder.anExchange(camelContext) + .withProperty("section", "data_types") + .withProperty("raiseHttpExceptionFlag", "true") + .build()); + + assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) + .is2xxSuccessful()).isTrue(); + } + + @Test + public void testToscaServiceTemplateStatus() { + ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); + + Exchange exchangeResponse = + prodTemplate.send("direct:get-service-template", ExchangeBuilder.anExchange(camelContext) + .withProperty("name", "ToscaServiceTemplate") + .withProperty("version", "1.0.0") + .withProperty("raiseHttpExceptionFlag", "true") + .build()); + + assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) + .is2xxSuccessful()).isTrue(); + } + + @Test + public void testToscaServiceTemplateGetResponseBody() { + ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); + + Exchange exchangeResponse = + prodTemplate.send("direct:get-service-template", ExchangeBuilder.anExchange(camelContext) + .withProperty("name", "ToscaServiceTemplate") + .withProperty("version", "1.0.0") + .withProperty("raiseHttpExceptionFlag", "true") + .build()); + + assertThat(exchangeResponse.getIn().getBody()).hasToString(SAMPLE_TOSCA_TEMPLATE); + } + + @Test + public void testCommissioningOfToscaServiceTemplateStatus() { + ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); + + Exchange exchangeResponse = + prodTemplate.send("direct:commission-service-template", ExchangeBuilder.anExchange(camelContext) + .withBody(SAMPLE_TOSCA_TEMPLATE) + .withProperty("raiseHttpExceptionFlag", "true") + .build()); + + assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) + .is2xxSuccessful()).isTrue(); + } + + @Test + public void testDecommissioningOfToscaServiceTemplateStatus() { + ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); + + Exchange exchangeResponse = + prodTemplate.send("direct:decommission-service-template", ExchangeBuilder.anExchange(camelContext) + .withProperty("name", "ToscaServiceTemplate") + .withProperty("version", "1.0.0") + .withProperty("raiseHttpExceptionFlag", "true") + .build()); + + assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) + .is2xxSuccessful()).isTrue(); + } + + @Test + public void testGetControlLoopDefinitions() { + ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); + + Exchange exchangeResponse = + prodTemplate.send("direct:get-control-loop-definitions", ExchangeBuilder.anExchange(camelContext) + .withProperty("name", "ToscaServiceTemplate") + .withProperty("version", "1.0.0") + .withProperty("raiseHttpExceptionFlag", "true") + .build()); + + assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) + .is2xxSuccessful()).isTrue(); + } + + @Test + public void testGetControlLoopElementDefinitions() { + ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); + + Exchange exchangeResponse = + prodTemplate.send("direct:get-element-definitions", ExchangeBuilder.anExchange(camelContext) + .withProperty("name", "ToscaServiceTemplate") + .withProperty("version", "1.0.0") + .withProperty("raiseHttpExceptionFlag", "true") + .build()); + + assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) + .is2xxSuccessful()).isTrue(); + } + + @Test + public void testGetCommonOrInstancePropertiesCommonTrue() { + ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); + + Exchange exchangeResponse = + prodTemplate.send("direct:get-common-or-instance-properties", ExchangeBuilder.anExchange(camelContext) + .withProperty("name", "ToscaServiceTemplate") + .withProperty("version", "1.0.0") + .withProperty("common", true) + .withProperty("raiseHttpExceptionFlag", "true") + .build()); + + assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) + .is2xxSuccessful()).isTrue(); + } + + @Test + public void testGetCommonOrInstancePropertiesCommonFalse() { + ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); + + Exchange exchangeResponse = + prodTemplate.send("direct:get-common-or-instance-properties", ExchangeBuilder.anExchange(camelContext) + .withProperty("name", "ToscaServiceTemplate") + .withProperty("version", "1.0.0") + .withProperty("common", false) + .withProperty("raiseHttpExceptionFlag", "true") + .build()); + + assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) + .is2xxSuccessful()).isTrue(); + } + + @Test + public void testGetCommonOrInstancePropertiesCommonMissing() { + ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); + + Exchange exchangeResponse = + prodTemplate.send("direct:get-common-or-instance-properties", ExchangeBuilder.anExchange(camelContext) + .withProperty("name", "ToscaServiceTemplate") + .withProperty("version", "1.0.0") + .withProperty("raiseHttpExceptionFlag", "true") + .build()); + + assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) + .is2xxSuccessful()).isTrue(); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/runtime/RuntimeCommissioningResponseTestItCase.java b/runtime/src/test/java/org/onap/policy/clamp/runtime/RuntimeCommissioningResponseTestItCase.java deleted file mode 100644 index f4e171174..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/runtime/RuntimeCommissioningResponseTestItCase.java +++ /dev/null @@ -1,197 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2021 Nordix Foundation. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.clamp.runtime; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.apache.camel.CamelContext; -import org.apache.camel.Exchange; -import org.apache.camel.ProducerTemplate; -import org.apache.camel.builder.ExchangeBuilder; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.HttpStatus; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class RuntimeCommissioningResponseTestItCase { - @Autowired - CamelContext camelContext; - - private static final String SAMPLE_TOSCA_TEMPLATE = - "{\"tosca_definitions_version\": \"tosca_simple_yaml_1_1_0\"," - + "\"data_types\": {},\"node_types\": {}, \"policy_types\": {}," - + " \"topology_template\": {}," - + " \"name\": \"ToscaServiceTemplateSimple\", \"version\": \"1.0.0\", \"metadata\": {}}"; - - @Test - public void testToscaServiceTemplateSchemaStatus() { - ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); - - Exchange exchangeResponse = - prodTemplate.send("direct:get-json-schema", ExchangeBuilder.anExchange(camelContext) - .withProperty("section", "data_types") - .withProperty("raiseHttpExceptionFlag", "true") - .build()); - - assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) - .is2xxSuccessful()).isTrue(); - } - - @Test - public void testToscaServiceTemplateStatus() { - ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); - - Exchange exchangeResponse = - prodTemplate.send("direct:get-service-template", ExchangeBuilder.anExchange(camelContext) - .withProperty("name", "ToscaServiceTemplate") - .withProperty("version", "1.0.0") - .withProperty("raiseHttpExceptionFlag", "true") - .build()); - - assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) - .is2xxSuccessful()).isTrue(); - } - - @Test - public void testToscaServiceTemplateGetResponseBody() { - ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); - - Exchange exchangeResponse = - prodTemplate.send("direct:get-service-template", ExchangeBuilder.anExchange(camelContext) - .withProperty("name", "ToscaServiceTemplate") - .withProperty("version", "1.0.0") - .withProperty("raiseHttpExceptionFlag", "true") - .build()); - - assertThat(exchangeResponse.getIn().getBody().toString()).isEqualTo(SAMPLE_TOSCA_TEMPLATE); - } - - @Test - public void testCommissioningOfToscaServiceTemplateStatus() { - ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); - - Exchange exchangeResponse = - prodTemplate.send("direct:commission-service-template", ExchangeBuilder.anExchange(camelContext) - .withBody(SAMPLE_TOSCA_TEMPLATE) - .withProperty("raiseHttpExceptionFlag", "true") - .build()); - - assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) - .is2xxSuccessful()).isTrue(); - } - - @Test - public void testDecommissioningOfToscaServiceTemplateStatus() { - ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); - - Exchange exchangeResponse = - prodTemplate.send("direct:decommission-service-template", ExchangeBuilder.anExchange(camelContext) - .withProperty("name", "ToscaServiceTemplate") - .withProperty("version", "1.0.0") - .withProperty("raiseHttpExceptionFlag", "true") - .build()); - - assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) - .is2xxSuccessful()).isTrue(); - } - - @Test - public void testGetControlLoopDefinitions() { - ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); - - Exchange exchangeResponse = - prodTemplate.send("direct:get-control-loop-definitions", ExchangeBuilder.anExchange(camelContext) - .withProperty("name", "ToscaServiceTemplate") - .withProperty("version", "1.0.0") - .withProperty("raiseHttpExceptionFlag", "true") - .build()); - - assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) - .is2xxSuccessful()).isTrue(); - } - - @Test - public void testGetControlLoopElementDefinitions() { - ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); - - Exchange exchangeResponse = - prodTemplate.send("direct:get-element-definitions", ExchangeBuilder.anExchange(camelContext) - .withProperty("name", "ToscaServiceTemplate") - .withProperty("version", "1.0.0") - .withProperty("raiseHttpExceptionFlag", "true") - .build()); - - assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) - .is2xxSuccessful()).isTrue(); - } - - @Test - public void testGetCommonOrInstancePropertiesCommonTrue() { - ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); - - Exchange exchangeResponse = - prodTemplate.send("direct:get-common-or-instance-properties", ExchangeBuilder.anExchange(camelContext) - .withProperty("name", "ToscaServiceTemplate") - .withProperty("version", "1.0.0") - .withProperty("common", true) - .withProperty("raiseHttpExceptionFlag", "true") - .build()); - - assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) - .is2xxSuccessful()).isTrue(); - } - - @Test - public void testGetCommonOrInstancePropertiesCommonFalse() { - ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); - - Exchange exchangeResponse = - prodTemplate.send("direct:get-common-or-instance-properties", ExchangeBuilder.anExchange(camelContext) - .withProperty("name", "ToscaServiceTemplate") - .withProperty("version", "1.0.0") - .withProperty("common", false) - .withProperty("raiseHttpExceptionFlag", "true") - .build()); - - assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) - .is2xxSuccessful()).isTrue(); - } - - @Test - public void testGetCommonOrInstancePropertiesCommonMissing() { - ProducerTemplate prodTemplate = camelContext.createProducerTemplate(); - - Exchange exchangeResponse = - prodTemplate.send("direct:get-common-or-instance-properties", ExchangeBuilder.anExchange(camelContext) - .withProperty("name", "ToscaServiceTemplate") - .withProperty("version", "1.0.0") - .withProperty("raiseHttpExceptionFlag", "true") - .build()); - - assertThat(HttpStatus.valueOf((Integer) exchangeResponse.getIn().getHeader(Exchange.HTTP_RESPONSE_CODE)) - .is2xxSuccessful()).isTrue(); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/tosca/DictionaryServiceItCase.java b/runtime/src/test/java/org/onap/policy/clamp/tosca/DictionaryServiceItCase.java deleted file mode 100644 index fdde53a21..000000000 --- a/runtime/src/test/java/org/onap/policy/clamp/tosca/DictionaryServiceItCase.java +++ /dev/null @@ -1,247 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.tosca; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.util.List; -import javax.persistence.EntityNotFoundException; -import javax.transaction.Transactional; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.policy.clamp.clds.Application; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class DictionaryServiceItCase { - - @Autowired - private DictionaryService dictionaryService; - - @Autowired - private DictionaryElementsRepository dictionaryElementsRepository; - - private DictionaryElement getDictionaryElement(String shortName, String name, - String description, String type, String subDictionaryName) { - - return new DictionaryElement(name, shortName, description, type, subDictionaryName); - - } - - private Dictionary getSimpleDictionaryExample() { - - Dictionary dictionary = new Dictionary("Dictionary1", 0, null); - - dictionary.addDictionaryElements(getDictionaryElement("DE1", "DictionaryElement1", - "DictionaryElement1", "string", null)); - - dictionary.addDictionaryElements(getDictionaryElement("DE2", "DictionaryElement2", - "DictionaryElement2", "number", null)); - - return dictionary; - } - - private Dictionary getSecondaryDictionaryExample() { - - Dictionary dictionary = new Dictionary("SecondaryDict", 1, "string"); - - dictionary.addDictionaryElements(getDictionaryElement("SDE1", "SecondaryDictElement1", - "SecondaryDictElement1", "string", null)); - - dictionary.addDictionaryElements(getDictionaryElement("SDE2", "SecondaryDictElement2", - "SecondaryDictElement2", "string", null)); - - return dictionary; - } - - /** - * Test to validate that Dictionary is created. - */ - @Test - @Transactional - public void shouldCreateDictionary() { - Dictionary dictionary = getSimpleDictionaryExample(); - Dictionary actualDictionary = dictionaryService.saveOrUpdateDictionary(dictionary); - assertNotNull(actualDictionary); - assertThat(actualDictionary).isEqualTo(dictionary); - assertThat(actualDictionary.getName()).isEqualTo(dictionary.getName()); - - assertThat(actualDictionary.getDictionaryElements()).contains( - dictionaryElementsRepository.findById("DE1").get(), - dictionaryElementsRepository.findById("DE2").get()); - } - - /** - * Test to validate a DictionaryElement is created for a Dictionary. - */ - @Test - @Transactional - public void shouldCreateorUpdateDictionaryElement() { - Dictionary dictionary = getSimpleDictionaryExample(); - Dictionary actualDictionary = dictionaryService.saveOrUpdateDictionary(dictionary); - DictionaryElement dictionaryElement = - getDictionaryElement("DictionaryElement3", "DE3", "DictionaryElement3", "date", null); - actualDictionary.addDictionaryElements(dictionaryElement); - Dictionary updatedDictionary = dictionaryService - .saveOrUpdateDictionaryElement(actualDictionary.getName(), actualDictionary); - assertNotNull(updatedDictionary); - assertTrue(updatedDictionary.getDictionaryElements().contains(dictionaryElement)); - assertThat(updatedDictionary.getName()).isEqualTo(actualDictionary.getName()); - // update the dictionary element. - dictionaryElement.setDescription("DictionaryElement3 New Description"); - Dictionary dictionary3 = new Dictionary("Dictionary1", 0, null); - dictionary3.addDictionaryElements(dictionaryElement); - Dictionary updatedDictionary2 = - dictionaryService.saveOrUpdateDictionaryElement(dictionary3.getName(), dictionary3); - - assertNotNull(updatedDictionary2); - assertTrue(updatedDictionary2.getDictionaryElements().contains(dictionaryElement)); - updatedDictionary2.getDictionaryElements().forEach(element -> { - if (element.equals(dictionaryElement)) { - assertTrue(element.getDescription().equals(dictionaryElement.getDescription())); - } - }); - - } - - /** - * Test to validate that All Dictionaries are retrieved. - */ - @Test - @Transactional - public void shouldReturnAllDictionaries() { - Dictionary dictionary = getSimpleDictionaryExample(); - Dictionary secondaryDictionary = getSecondaryDictionaryExample(); - dictionaryService.saveOrUpdateDictionary(dictionary); - dictionaryService.saveOrUpdateDictionary(secondaryDictionary); - - List list = dictionaryService.getAllDictionaries(); - assertNotNull(list); - assertThat(list).contains(dictionary, secondaryDictionary); - } - - /** - * Test to validate one Dictionary is returned. - */ - @Test - @Transactional - public void shouldReturnOneDictionary() { - Dictionary dictionary = getSimpleDictionaryExample(); - dictionaryService.saveOrUpdateDictionary(dictionary); - - Dictionary returnedDictionary = dictionaryService.getDictionary("Dictionary1"); - assertNotNull(returnedDictionary); - assertThat(returnedDictionary).isEqualTo(dictionary); - assertThat(returnedDictionary.getDictionaryElements()) - .isEqualTo(dictionary.getDictionaryElements()); - } - - /** - * Test to validate one Dictionary is returned. - */ - @Test - @Transactional - public void shouldReturnEntityNotFoundException() { - try { - dictionaryService.getDictionary("Test"); - } catch (Exception e) { - assertThat(e).isInstanceOf(EntityNotFoundException.class); - assertTrue(e.getMessage().equals("Couldn't find Dictionary named: Test")); - } - } - - /** - * Test to validate Dictionary is deleted. - */ - @Test - @Transactional - public void shouldDeleteDictionaryByObject() { - Dictionary dictionary = getSimpleDictionaryExample(); - Dictionary returnedDictionary = dictionaryService.saveOrUpdateDictionary(dictionary); - - dictionaryService.deleteDictionary(returnedDictionary); - try { - dictionaryService.getDictionary("Dictionary1"); - } catch (EntityNotFoundException e) { - assertTrue(e.getMessage().equals("Couldn't find Dictionary named: Dictionary1")); - } - } - - /** - * Test to validate Dictionary is deleted by Name. - */ - @Test - @Transactional - public void shouldDeleteDictionaryByName() { - Dictionary dictionary = getSimpleDictionaryExample(); - dictionaryService.saveOrUpdateDictionary(dictionary); - dictionaryService.deleteDictionary(dictionary.getName()); - try { - dictionaryService.getDictionary("Dictionary1"); - } catch (EntityNotFoundException e) { - assertTrue(e.getMessage().equals("Couldn't find Dictionary named: Dictionary1")); - } - } - - /** - * Test to validate DictionaryElements is deleted by Name. - */ - @Test - @Transactional - public void shouldDeleteDictionaryElementsByName() { - Dictionary dictionary = getSimpleDictionaryExample(); - dictionaryService.saveOrUpdateDictionary(dictionary); - DictionaryElement dictionaryElement = - dictionaryElementsRepository.findById("DE1").orElse(null); - assertNotNull(dictionaryElement); - dictionaryService.deleteDictionaryElement("Dictionary1", "DE1"); - dictionary = dictionaryService.getDictionary("Dictionary1"); - DictionaryElement deletedDictionaryElement = - dictionaryElementsRepository.findById("DE1").orElse(null); - assertThat(deletedDictionaryElement).isNotIn(dictionary.getDictionaryElements()); - } - - /** - * Test to validate all secondary level dictionary names are returned. - */ - @Test - @Transactional - public void shouldReturnAllSecondaryLevelDictionaryNames() { - Dictionary dictionary = getSecondaryDictionaryExample(); - dictionaryService.saveOrUpdateDictionary(dictionary); - - Dictionary dictionary2 = new Dictionary("SecondaryDict2", 1, "string"); - dictionaryService.saveOrUpdateDictionary(dictionary2); - List secondaryDictionaryNames = - dictionaryService.getAllSecondaryLevelDictionaryNames(); - - assertNotNull(secondaryDictionaryNames); - assertThat(secondaryDictionaryNames).contains(dictionary.getName(), dictionary2.getName()); - } -} diff --git a/runtime/src/test/java/org/onap/policy/clamp/tosca/DictionaryServiceItTestCase.java b/runtime/src/test/java/org/onap/policy/clamp/tosca/DictionaryServiceItTestCase.java new file mode 100644 index 000000000..382d5cd44 --- /dev/null +++ b/runtime/src/test/java/org/onap/policy/clamp/tosca/DictionaryServiceItTestCase.java @@ -0,0 +1,248 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.tosca; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; +import javax.persistence.EntityNotFoundException; +import javax.transaction.Transactional; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.policy.clamp.clds.Application; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class DictionaryServiceItTestCase { + + @Autowired + private DictionaryService dictionaryService; + + @Autowired + private DictionaryElementsRepository dictionaryElementsRepository; + + private DictionaryElement getDictionaryElement(String shortName, String name, + String description, String type, String subDictionaryName) { + + return new DictionaryElement(name, shortName, description, type, subDictionaryName); + + } + + private Dictionary getSimpleDictionaryExample() { + + Dictionary dictionary = new Dictionary("Dictionary1", 0, null); + + dictionary.addDictionaryElements(getDictionaryElement("DE1", "DictionaryElement1", + "DictionaryElement1", "string", null)); + + dictionary.addDictionaryElements(getDictionaryElement("DE2", "DictionaryElement2", + "DictionaryElement2", "number", null)); + + return dictionary; + } + + private Dictionary getSecondaryDictionaryExample() { + + Dictionary dictionary = new Dictionary("SecondaryDict", 1, "string"); + + dictionary.addDictionaryElements(getDictionaryElement("SDE1", "SecondaryDictElement1", + "SecondaryDictElement1", "string", null)); + + dictionary.addDictionaryElements(getDictionaryElement("SDE2", "SecondaryDictElement2", + "SecondaryDictElement2", "string", null)); + + return dictionary; + } + + /** + * Test to validate that Dictionary is created. + */ + @Test + @Transactional + public void shouldCreateDictionary() { + Dictionary dictionary = getSimpleDictionaryExample(); + Dictionary actualDictionary = dictionaryService.saveOrUpdateDictionary(dictionary); + assertNotNull(actualDictionary); + assertThat(actualDictionary).isEqualTo(dictionary); + assertThat(actualDictionary.getName()).isEqualTo(dictionary.getName()); + + assertThat(actualDictionary.getDictionaryElements()).contains( + dictionaryElementsRepository.findById("DE1").get(), + dictionaryElementsRepository.findById("DE2").get()); + } + + /** + * Test to validate a DictionaryElement is created for a Dictionary. + */ + @Test + @Transactional + public void shouldCreateorUpdateDictionaryElement() { + Dictionary dictionary = getSimpleDictionaryExample(); + Dictionary actualDictionary = dictionaryService.saveOrUpdateDictionary(dictionary); + DictionaryElement dictionaryElement = + getDictionaryElement("DictionaryElement3", "DE3", "DictionaryElement3", "date", null); + actualDictionary.addDictionaryElements(dictionaryElement); + Dictionary updatedDictionary = dictionaryService + .saveOrUpdateDictionaryElement(actualDictionary.getName(), actualDictionary); + assertNotNull(updatedDictionary); + assertTrue(updatedDictionary.getDictionaryElements().contains(dictionaryElement)); + assertThat(updatedDictionary.getName()).isEqualTo(actualDictionary.getName()); + // update the dictionary element. + dictionaryElement.setDescription("DictionaryElement3 New Description"); + Dictionary dictionary3 = new Dictionary("Dictionary1", 0, null); + dictionary3.addDictionaryElements(dictionaryElement); + Dictionary updatedDictionary2 = + dictionaryService.saveOrUpdateDictionaryElement(dictionary3.getName(), dictionary3); + + assertNotNull(updatedDictionary2); + assertTrue(updatedDictionary2.getDictionaryElements().contains(dictionaryElement)); + updatedDictionary2.getDictionaryElements().forEach(element -> { + if (element.equals(dictionaryElement)) { + assertEquals(dictionaryElement.getDescription(), element.getDescription()); + } + }); + + } + + /** + * Test to validate that All Dictionaries are retrieved. + */ + @Test + @Transactional + public void shouldReturnAllDictionaries() { + Dictionary dictionary = getSimpleDictionaryExample(); + Dictionary secondaryDictionary = getSecondaryDictionaryExample(); + dictionaryService.saveOrUpdateDictionary(dictionary); + dictionaryService.saveOrUpdateDictionary(secondaryDictionary); + + List list = dictionaryService.getAllDictionaries(); + assertNotNull(list); + assertThat(list).contains(dictionary, secondaryDictionary); + } + + /** + * Test to validate one Dictionary is returned. + */ + @Test + @Transactional + public void shouldReturnOneDictionary() { + Dictionary dictionary = getSimpleDictionaryExample(); + dictionaryService.saveOrUpdateDictionary(dictionary); + + Dictionary returnedDictionary = dictionaryService.getDictionary("Dictionary1"); + assertNotNull(returnedDictionary); + assertThat(returnedDictionary).isEqualTo(dictionary); + assertThat(returnedDictionary.getDictionaryElements()) + .isEqualTo(dictionary.getDictionaryElements()); + } + + /** + * Test to validate one Dictionary is returned. + */ + @Test + @Transactional + public void shouldReturnEntityNotFoundException() { + try { + dictionaryService.getDictionary("Test"); + } catch (Exception e) { + assertThat(e).isInstanceOf(EntityNotFoundException.class); + assertEquals("Couldn't find Dictionary named: Test", e.getMessage()); + } + } + + /** + * Test to validate Dictionary is deleted. + */ + @Test + @Transactional + public void shouldDeleteDictionaryByObject() { + Dictionary dictionary = getSimpleDictionaryExample(); + Dictionary returnedDictionary = dictionaryService.saveOrUpdateDictionary(dictionary); + + dictionaryService.deleteDictionary(returnedDictionary); + try { + dictionaryService.getDictionary("Dictionary1"); + } catch (EntityNotFoundException e) { + assertEquals("Couldn't find Dictionary named: Dictionary1", e.getMessage()); + } + } + + /** + * Test to validate Dictionary is deleted by Name. + */ + @Test + @Transactional + public void shouldDeleteDictionaryByName() { + Dictionary dictionary = getSimpleDictionaryExample(); + dictionaryService.saveOrUpdateDictionary(dictionary); + dictionaryService.deleteDictionary(dictionary.getName()); + try { + dictionaryService.getDictionary("Dictionary1"); + } catch (EntityNotFoundException e) { + assertEquals("Couldn't find Dictionary named: Dictionary1", e.getMessage()); + } + } + + /** + * Test to validate DictionaryElements is deleted by Name. + */ + @Test + @Transactional + public void shouldDeleteDictionaryElementsByName() { + Dictionary dictionary = getSimpleDictionaryExample(); + dictionaryService.saveOrUpdateDictionary(dictionary); + DictionaryElement dictionaryElement = + dictionaryElementsRepository.findById("DE1").orElse(null); + assertNotNull(dictionaryElement); + dictionaryService.deleteDictionaryElement("Dictionary1", "DE1"); + dictionary = dictionaryService.getDictionary("Dictionary1"); + DictionaryElement deletedDictionaryElement = + dictionaryElementsRepository.findById("DE1").orElse(null); + assertThat(deletedDictionaryElement).isNotIn(dictionary.getDictionaryElements()); + } + + /** + * Test to validate all secondary level dictionary names are returned. + */ + @Test + @Transactional + public void shouldReturnAllSecondaryLevelDictionaryNames() { + Dictionary dictionary = getSecondaryDictionaryExample(); + dictionaryService.saveOrUpdateDictionary(dictionary); + + Dictionary dictionary2 = new Dictionary("SecondaryDict2", 1, "string"); + dictionaryService.saveOrUpdateDictionary(dictionary2); + List secondaryDictionaryNames = + dictionaryService.getAllSecondaryLevelDictionaryNames(); + + assertNotNull(secondaryDictionaryNames); + assertThat(secondaryDictionaryNames).contains(dictionary.getName(), dictionary2.getName()); + } +} diff --git a/runtime/src/test/java/org/onap/policy/clamp/util/PassDecoderTest.java b/runtime/src/test/java/org/onap/policy/clamp/util/PassDecoderTest.java index 7fd0cb91d..eb5e1d522 100644 --- a/runtime/src/test/java/org/onap/policy/clamp/util/PassDecoderTest.java +++ b/runtime/src/test/java/org/onap/policy/clamp/util/PassDecoderTest.java @@ -47,7 +47,7 @@ public class PassDecoderTest { @Test public final void testDecryption() throws Exception { String decodedPass = PassDecoder.decode(encrypted, "classpath:clds/aaf/org.onap.clamp.keyfile"); - assertEquals(decodedPass, "China in the Spring"); + assertEquals("China in the Spring", decodedPass); assertEquals("Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U", PassDecoder .decode("enc:JPV4p067JlSXt2Fet9bfuI8JpkS4ZGYVcgypcPs98gXjgjCjTze_d3JxqmlKaaakdiOjIcEC_MJh6-5pJTLgdc", "classpath:clds/aaf/org.onap.clamp.keyfile")); diff --git a/runtime/src/test/java/org/onap/policy/clamp/util/SemanticVersioningTest.java b/runtime/src/test/java/org/onap/policy/clamp/util/SemanticVersioningTest.java index 604ce55db..0ef10ae2a 100644 --- a/runtime/src/test/java/org/onap/policy/clamp/util/SemanticVersioningTest.java +++ b/runtime/src/test/java/org/onap/policy/clamp/util/SemanticVersioningTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -61,9 +61,9 @@ public class SemanticVersioningTest { */ @Test public void compareEqualsTest() { - assertThat(SemanticVersioning.compare("1.0.0", "1.0.0")).isEqualTo(0); + assertThat(SemanticVersioning.compare("1.0.0", "1.0.0")).isZero(); assertThat(SemanticVersioning.compare("1.0.0.0", "1.0.0")).isEqualTo(1); - assertThat(SemanticVersioning.compare("1.2.3", "1.2.3")).isEqualTo(0); + assertThat(SemanticVersioning.compare("1.2.3", "1.2.3")).isZero(); assertThat(SemanticVersioning.compare("1.2.3", "1.2.3.0")).isEqualTo(-1); } @@ -73,7 +73,7 @@ public class SemanticVersioningTest { */ @Test public void compareNullTest() { - assertThat(SemanticVersioning.compare(null, null)).isEqualTo(0); + assertThat(SemanticVersioning.compare(null, null)).isZero(); assertThat(SemanticVersioning.compare(null, "1.0")).isEqualTo(-1); assertThat(SemanticVersioning.compare("1.0", null)).isEqualTo(1); } -- cgit 1.2.3-korg