X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=models-provider%2Fsrc%2Ftest%2Fjava%2Forg%2Fonap%2Fpolicy%2Fmodels%2Fprovider%2Fimpl%2FPolicyTypePersistenceTest.java;h=11e8381affaaf51d8333b05ec4a6d88f35ced558;hb=389c85c8e7213c10c17896f4c63d94e2b5e9d27a;hp=528395efce225c135b8c660d2deedbb631733cdd;hpb=24400f789d2a20da08793fa8d5ac046caf46c267;p=policy%2Fmodels.git diff --git a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyTypePersistenceTest.java b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyTypePersistenceTest.java index 528395efc..11e8381af 100644 --- a/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyTypePersistenceTest.java +++ b/models-provider/src/test/java/org/onap/policy/models/provider/impl/PolicyTypePersistenceTest.java @@ -1,6 +1,8 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2021, 2023-2024 Nordix Foundation. + * Modifications Copyright (C) 2020 Bell Canada. 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. @@ -20,32 +22,26 @@ package org.onap.policy.models.provider.impl; +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -import com.google.gson.GsonBuilder; - -import java.util.Base64; -import java.util.List; - -import lombok.NonNull; +import static org.junit.Assert.assertTrue; +import java.util.Set; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.onap.policy.common.utils.coder.StandardCoder; +import org.onap.policy.common.utils.coder.YamlJsonTranslator; import org.onap.policy.common.utils.resources.ResourceUtils; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.provider.PolicyModelsProvider; import org.onap.policy.models.provider.PolicyModelsProviderFactory; import org.onap.policy.models.provider.PolicyModelsProviderParameters; +import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityKey; import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType; -import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.yaml.snakeyaml.Yaml; /** * Test persistence of monitoring policies to and from the database. @@ -53,29 +49,9 @@ import org.yaml.snakeyaml.Yaml; * @author Liam Fallon (liam.fallon@est.tech) */ public class PolicyTypePersistenceTest { - // Logger for this class - private static final Logger LOGGER = LoggerFactory.getLogger(PolicyTypePersistenceTest.class); - - private StandardCoder standardCoder; - + private YamlJsonTranslator yamlTranslator = new YamlJsonTranslator(); private PolicyModelsProvider databaseProvider; - // @formatter:off - private String[] policyTypeResourceNames = { - "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml", - "policytypes/onap.policies.optimization.AffinityPolicy.yaml", - "policytypes/onap.policies.optimization.DistancePolicy.yaml", - "policytypes/onap.policies.optimization.HpaPolicy.yaml", - "policytypes/onap.policies.optimization.OptimizationPolicy.yaml", - "policytypes/onap.policies.optimization.PciPolicy.yaml", - "policytypes/onap.policies.optimization.QueryPolicy.yaml", - "policytypes/onap.policies.optimization.SubscriberPolicy.yaml", - "policytypes/onap.policies.optimization.Vim_fit.yaml", - "policytypes/onap.policies.optimization.VnfPolicy.yaml", - "policytypes/onap.policy.monitoring.cdap.tca.hi.lo.app.yaml" - }; - // @formatter:on - /** * Initialize provider. * @@ -83,89 +59,122 @@ public class PolicyTypePersistenceTest { */ @Before public void setupParameters() throws PfModelException { + // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB + PolicyModelsProviderParameters parameters = new PolicyModelsProviderParameters(); - parameters.setDatabaseUrl("jdbc:h2:mem:testdb"); + + if (System.getProperty("USE-MARIADB") != null) { + parameters.setDatabaseDriver("org.mariadb.jdbc.Driver"); + parameters.setDatabaseUrl("jdbc:mariadb://localhost:3306/policy"); + } else { + parameters.setDatabaseDriver("org.h2.Driver"); + parameters.setDatabaseUrl("jdbc:h2:mem:PolicyToscaPersistenceTest"); + } + parameters.setDatabaseUser("policy"); - parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes())); + parameters.setDatabasePassword("P01icY"); parameters.setPersistenceUnit("ToscaConceptTest"); databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters); } - /** - * Set up GSON. - */ - @Before - public void setupGson() { - standardCoder = new StandardCoder(); - } - @After public void teardown() throws Exception { databaseProvider.close(); } @Test - public void testPolicyTypePersistence() { - try { - for (String policyTypeResourceName : policyTypeResourceNames) { - String policyTypeString = ResourceUtils.getResourceAsString(policyTypeResourceName); + public void testPolicyTypePersistence() throws Exception { + Set policyTypeDirectoryContents = ResourceUtils.getDirectoryContents("policytypes"); + + ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate(); + + for (String policyTypeFilePath : policyTypeDirectoryContents) { + String policyTypeString = ResourceUtils.getResourceAsString(policyTypeFilePath); - if (policyTypeResourceName.endsWith("yaml")) { - testYamlStringPolicyTypePersistence(policyTypeString); + ToscaServiceTemplate foundPolicyTypeSt = + yamlTranslator.fromYaml(policyTypeString, ToscaServiceTemplate.class); + + serviceTemplate.setDerivedFrom(foundPolicyTypeSt.getDerivedFrom()); + serviceTemplate.setDescription(foundPolicyTypeSt.getDescription()); + serviceTemplate.setMetadata(foundPolicyTypeSt.getMetadata()); + serviceTemplate.setName(foundPolicyTypeSt.getName()); + serviceTemplate.setToscaDefinitionsVersion(foundPolicyTypeSt.getToscaDefinitionsVersion()); + serviceTemplate.setToscaTopologyTemplate(foundPolicyTypeSt.getToscaTopologyTemplate()); + serviceTemplate.setVersion(foundPolicyTypeSt.getVersion()); + + if (foundPolicyTypeSt.getDataTypes() != null) { + if (serviceTemplate.getDataTypes() == null) { + serviceTemplate.setDataTypes(foundPolicyTypeSt.getDataTypes()); } else { - testJsonStringPolicyTypePersistence(policyTypeString); + serviceTemplate.getDataTypes().putAll(foundPolicyTypeSt.getDataTypes()); } } - } catch (Exception exc) { - LOGGER.warn("error processing policy types", exc); - fail("test should not throw an exception"); + + if (serviceTemplate.getPolicyTypes() == null) { + serviceTemplate.setPolicyTypes(foundPolicyTypeSt.getPolicyTypes()); + } else { + serviceTemplate.getPolicyTypes().putAll(foundPolicyTypeSt.getPolicyTypes()); + } } - } - private void testYamlStringPolicyTypePersistence(final String policyTypeString) throws Exception { - Object yamlObject = new Yaml().load(policyTypeString); - String yamlAsJsonString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject); + CountDownLatch threadCountDownLatch = new CountDownLatch(10); - testJsonStringPolicyTypePersistence(yamlAsJsonString); - } + for (int i = 0; i < 10; i++) { + new Thread() { + @Override + public void run() { + assertThatCode(() -> databaseProvider.createPolicyTypes(serviceTemplate)) + .doesNotThrowAnyException(); + threadCountDownLatch.countDown(); + } + }.start(); + } - /** - * Check persistence of a policy. - * - * @param policyTypeString the policy as a string - * @throws Exception any exception thrown - */ - public void testJsonStringPolicyTypePersistence(@NonNull final String policyTypeString) throws Exception { - ToscaServiceTemplate serviceTemplate = standardCoder.decode(policyTypeString, ToscaServiceTemplate.class); + threadCountDownLatch.await(9, TimeUnit.SECONDS); + + ToscaEntityKey resourceOptimizationPtKey = + new ToscaEntityKey("onap.policies.optimization.resource.OptimizationPolicy", "1.0.0"); + + ToscaServiceTemplate resOptPolicyTypeSt = databaseProvider.getPolicyTypes(resourceOptimizationPtKey.getName(), + resourceOptimizationPtKey.getVersion()); - assertNotNull(serviceTemplate); - ToscaPolicyType inPolicyType = serviceTemplate.getPolicyTypes().get(0).values().iterator().next(); + assertEquals(3, resOptPolicyTypeSt.getPolicyTypesAsMap().size()); + assertTrue(resOptPolicyTypeSt.getPolicyTypesAsMap().containsKey(resourceOptimizationPtKey)); - databaseProvider.createPolicyTypes(serviceTemplate); - databaseProvider.updatePolicyTypes(serviceTemplate); + ToscaEntityKey resourcePtKey = new ToscaEntityKey("onap.policies.optimization.Resource", "1.0.0"); + assertTrue(resOptPolicyTypeSt.getPolicyTypesAsMap().containsKey(resourcePtKey)); - List policyTypeList = - databaseProvider.getPolicyTypeList(inPolicyType.getName(), inPolicyType.getVersion()); + ToscaEntityKey optimizationPtKey = new ToscaEntityKey("onap.policies.Optimization", "1.0.0"); + assertTrue(resOptPolicyTypeSt.getPolicyTypesAsMap().containsKey(optimizationPtKey)); - policyTypeList = databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder() - .name(inPolicyType.getName()).version(inPolicyType.getVersion()).build()); + assertEquals(2, resOptPolicyTypeSt.getDataTypesAsMap().size()); - assertEquals(1, policyTypeList.size()); - assertEquals(inPolicyType.getName(), policyTypeList.get(0).getName()); + deleteUnreferencedPolicyTypes(); - policyTypeList = databaseProvider - .getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().name(inPolicyType.getName()).build()); + assertThatThrownBy(() -> { + databaseProvider.getPolicyTypes(null, null); + }).hasMessageContaining("policy types for null:null do not exist"); + } + + private void deleteUnreferencedPolicyTypes() throws PfModelException { + ToscaServiceTemplate allPolicyTypes = databaseProvider.getPolicyTypes(null, null); - assertEquals(1, policyTypeList.size()); - assertEquals(inPolicyType.getName(), policyTypeList.get(0).getName()); + boolean deleteFailedDueToReference = false; - policyTypeList = databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build()); - assertEquals(2, policyTypeList.size()); - assertEquals(inPolicyType.getName(), policyTypeList.get(0).getName()); + for (ToscaPolicyType policyType : allPolicyTypes.getPolicyTypes().values()) { + try { + ToscaServiceTemplate deletedServiceTemplate = + databaseProvider.deletePolicyType(policyType.getName(), policyType.getVersion()); + assertEquals(1, deletedServiceTemplate.getPolicyTypesAsMap().size()); + } catch (Exception pfModelRuntimeException) { + assertTrue(pfModelRuntimeException.getMessage().contains("is in use, it is referenced in policy type")); + deleteFailedDueToReference = true; + } + } - for (ToscaPolicyType policyType: databaseProvider.getPolicyTypeList(null, null)) { - databaseProvider.deletePolicyType(policyType.getName(), policyType.getVersion()); + if (deleteFailedDueToReference) { + deleteUnreferencedPolicyTypes(); } } }