From aa484450032b5eaa85bbc33ec0dad3d9995f3d58 Mon Sep 17 00:00:00 2001 From: sebdet Date: Tue, 11 Feb 2020 18:58:35 +0100 Subject: Add tests Add tests for download all and improve efficiency with stream Issue-ID: CLAMP-518 Change-Id: Ia78ed8da7e54eaeaaed4fb87f483e0aff3a4a8c4 Signed-off-by: sebdet --- .../clamp/clds/client/PolicyEngineServices.java | 41 +++++---- .../org/onap/clamp/loop/template/PolicyModel.java | 16 ++++ .../clamp/policy/downloader/PolicyDownloader.java | 96 ---------------------- .../policy/downloader/PolicyEngineController.java | 86 +++++++++++++++++++ 4 files changed, 128 insertions(+), 111 deletions(-) delete mode 100644 src/main/java/org/onap/clamp/policy/downloader/PolicyDownloader.java create mode 100644 src/main/java/org/onap/clamp/policy/downloader/PolicyEngineController.java (limited to 'src/main/java/org/onap') diff --git a/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java b/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java index 96294207..e916afc1 100644 --- a/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java +++ b/src/main/java/org/onap/clamp/clds/client/PolicyEngineServices.java @@ -32,8 +32,12 @@ import org.apache.camel.builder.ExchangeBuilder; import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.sdc.controller.installer.BlueprintMicroService; import org.onap.clamp.loop.template.PolicyModel; +import org.onap.clamp.loop.template.PolicyModelId; +import org.onap.clamp.loop.template.PolicyModelsRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; /** * The class implements the communication with the Policy Engine to retrieve @@ -45,6 +49,8 @@ import org.springframework.stereotype.Component; public class PolicyEngineServices { private final CamelContext camelContext; + private final PolicyModelsRepository policyModelsRepository; + private static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyEngineServices.class); private static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); private static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); @@ -55,9 +61,10 @@ public class PolicyEngineServices { public static final String POLICY_RETRY_LIMIT = "policy.retry.limit"; @Autowired - public PolicyEngineServices(CamelContext camelContext, ClampProperties refProp) { + public PolicyEngineServices(CamelContext camelContext, ClampProperties refProp, + PolicyModelsRepository policyModelsRepository) { this.camelContext = camelContext; - + this.policyModelsRepository = policyModelsRepository; if (refProp.getStringValue(POLICY_RETRY_LIMIT) != null) { retryLimit = Integer.valueOf(refProp.getStringValue(POLICY_RETRY_LIMIT)); } @@ -66,20 +73,20 @@ public class PolicyEngineServices { } } - public PolicyModel createPolicyModelFromPolicyEngine(String policyType, String policyVersion) - throws InterruptedException { - return new PolicyModel(policyType, this.downloadOnePolicy(policyType, policyVersion), policyVersion, - createPolicyAcronym(policyType)); + public PolicyModel createPolicyModelFromPolicyEngine(String policyType, String policyVersion) { + return new PolicyModel(policyType, this.downloadOnePolicy(policyType, policyVersion), policyVersion); } - public PolicyModel createPolicyModelFromPolicyEngine(BlueprintMicroService microService) - throws InterruptedException { + public PolicyModel createPolicyModelFromPolicyEngine(BlueprintMicroService microService) { return createPolicyModelFromPolicyEngine(microService.getModelType(), microService.getModelVersion()); } - private static String createPolicyAcronym(String policyType) { - String[] policyNameArray = policyType.split("\\."); - return policyNameArray[policyNameArray.length - 1]; + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void createPolicyInDbIfNeeded(PolicyModel policyModel) { + if (!policyModelsRepository + .existsById(new PolicyModelId(policyModel.getPolicyModelType(), policyModel.getVersion()))) { + policyModelsRepository.save(policyModel); + } } /** @@ -89,7 +96,7 @@ public class PolicyEngineServices { * @return A yaml containing all policy Types and all data types * @throws InterruptedException In case of issue when sleeping during the retry */ - public String downloadAllPolicies() throws InterruptedException { + public String downloadAllPolicies() { return callCamelRoute(ExchangeBuilder.anExchange(camelContext).build(), "direct:get-all-policy-models"); } @@ -101,12 +108,12 @@ public class PolicyEngineServices { * @return A string with the whole policy tosca model * @throws InterruptedException In case of issue when sleeping during the retry */ - public String downloadOnePolicy(String policyType, String policyVersion) throws InterruptedException { + public String downloadOnePolicy(String policyType, String policyVersion) { return callCamelRoute(ExchangeBuilder.anExchange(camelContext).withProperty("policyModelName", policyType) .withProperty("policyModelVersion", policyVersion).build(), "direct:get-policy-model"); } - private String callCamelRoute(Exchange exchange, String camelFlow) throws InterruptedException { + private String callCamelRoute(Exchange exchange, String camelFlow) { for (int i = 0; i < retryLimit; i++) { Exchange exchangeResponse = camelContext.createProducerTemplate().send(camelFlow, exchange); if (Integer.valueOf(200).equals(exchangeResponse.getIn().getHeader("CamelHttpResponseCode"))) { @@ -114,7 +121,11 @@ public class PolicyEngineServices { } else { logger.info("Policy query " + retryInterval + "ms before retrying ..."); // wait for a while and try to connect to DCAE again - Thread.sleep(retryInterval); + try { + Thread.sleep(retryInterval); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } } } return ""; diff --git a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java index 53539fcc..52f662bb 100644 --- a/src/main/java/org/onap/clamp/loop/template/PolicyModel.java +++ b/src/main/java/org/onap/clamp/loop/template/PolicyModel.java @@ -184,6 +184,22 @@ public class PolicyModel extends AuditEntity implements Serializable, Comparable this.policyAcronym = policyAcronym; } + /** + * Constructor with acronym generated by default from policyType. + * + * @param policyType The policyType (referenced in the blueprint + * @param policyModelTosca The policy tosca model in yaml + * @param version the version like 1.0.0 + */ + public PolicyModel(String policyType, String policyModelTosca, String version) { + this(policyType, policyModelTosca, version, createDefaultPolicyAcronym(policyType)); + } + + public static String createDefaultPolicyAcronym(String policyType) { + String[] policyNameArray = policyType.split("\\."); + return policyNameArray[policyNameArray.length - 1]; + } + @Override public int hashCode() { final int prime = 31; diff --git a/src/main/java/org/onap/clamp/policy/downloader/PolicyDownloader.java b/src/main/java/org/onap/clamp/policy/downloader/PolicyDownloader.java deleted file mode 100644 index 8795a125..00000000 --- a/src/main/java/org/onap/clamp/policy/downloader/PolicyDownloader.java +++ /dev/null @@ -1,96 +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.clamp.policy.downloader; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; - -import java.util.LinkedHashMap; -import java.util.Map.Entry; - -import org.onap.clamp.clds.client.PolicyEngineServices; -import org.onap.clamp.loop.template.PolicyModel; -import org.onap.clamp.loop.template.PolicyModelId; -import org.onap.clamp.loop.template.PolicyModelsRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.scheduling.annotation.Scheduled; -import org.yaml.snakeyaml.Yaml; - -/** - * This class implements a periodic job that is done in the background to - * synchronize policy models available on the policy engine and the clamp - * database table PolicyModel. - */ -@Configuration -@Profile("clamp-policy-controller") -public class PolicyDownloader { - - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyDownloader.class); - protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); - protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); - public static final String POLICY_RETRY_INTERVAL = "policy.retry.interval"; - public static final String POLICY_RETRY_LIMIT = "policy.retry.limit"; - - private final PolicyEngineServices policyEngineServices; - private final PolicyModelsRepository policyModelsRepository; - - @Autowired - public PolicyDownloader(PolicyEngineServices policyEngineService, PolicyModelsRepository policyModelsRepository) { - this.policyEngineServices = policyEngineService; - this.policyModelsRepository = policyModelsRepository; - } - - private void createPolicyInDbIfNeeded(PolicyModel policyModel) { - if (!policyModelsRepository - .existsById(new PolicyModelId(policyModel.getPolicyModelType(), policyModel.getVersion()))) { - policyModelsRepository.save(policyModel); - } - } - - @Scheduled(fixedRate = 120000) - public void synchronizeAllPolicies() throws InterruptedException { - try { - LinkedHashMap loadedYaml = new Yaml().load(policyEngineServices.downloadAllPolicies()); - if (loadedYaml == null || loadedYaml.isEmpty()) { - logger.warn( - "getAllPolicyType yaml returned by policy engine could not be decoded, as it's null or empty"); - return; - } - - LinkedHashMap policyTypesList = (LinkedHashMap) loadedYaml - .get("policy_types"); - for (Entry policyType : policyTypesList.entrySet()) { - createPolicyInDbIfNeeded(policyEngineServices.createPolicyModelFromPolicyEngine(policyType.getKey(), - ((String) ((LinkedHashMap) policyType.getValue()).get("version")))); - } - } catch (InterruptedException e) { - logger.warn("query to policy engine has been interrupted", e); - throw e; - } - - } - -} diff --git a/src/main/java/org/onap/clamp/policy/downloader/PolicyEngineController.java b/src/main/java/org/onap/clamp/policy/downloader/PolicyEngineController.java new file mode 100644 index 00000000..f3eaf0c8 --- /dev/null +++ b/src/main/java/org/onap/clamp/policy/downloader/PolicyEngineController.java @@ -0,0 +1,86 @@ +/*- + * ============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.clamp.policy.downloader; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map.Entry; + +import org.onap.clamp.clds.client.PolicyEngineServices; +import org.onap.clamp.loop.template.PolicyModelsRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.Scheduled; +import org.yaml.snakeyaml.Yaml; + +/** + * This class implements a periodic job that is done in the background to + * synchronize policy models available on the policy engine and the clamp + * database table PolicyModel. + */ +@Configuration +@Profile("clamp-policy-controller") +public class PolicyEngineController { + + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyEngineController.class); + protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger(); + protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); + public static final String POLICY_RETRY_INTERVAL = "policy.retry.interval"; + public static final String POLICY_RETRY_LIMIT = "policy.retry.limit"; + + private final PolicyEngineServices policyEngineServices; + + @Autowired + public PolicyEngineController(PolicyEngineServices policyEngineService, + PolicyModelsRepository policyModelsRepository) { + this.policyEngineServices = policyEngineService; + } + + @Scheduled(fixedRate = 120000) + public void synchronizeAllPolicies() { + LinkedHashMap loadedYaml; + loadedYaml = new Yaml().load(policyEngineServices.downloadAllPolicies()); + if (loadedYaml == null || loadedYaml.isEmpty()) { + logger.warn("getAllPolicyType yaml returned by policy engine could not be decoded, as it's null or empty"); + return; + } + + List> policyTypesList = (List>) loadedYaml + .get("policy_types"); + policyTypesList.parallelStream().forEach(policyType -> { + Entry policyTypeEntry = (Entry) new ArrayList(policyType.entrySet()).get(0); + + policyEngineServices.createPolicyInDbIfNeeded( + policyEngineServices.createPolicyModelFromPolicyEngine(policyTypeEntry.getKey(), + ((String) ((LinkedHashMap) policyTypeEntry.getValue()).get("version")))); + + }); + } + +} -- cgit 1.2.3-korg