/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2019 Nordix Foundation.
+ * Copyright (C) 2019-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.
package org.onap.policy.models.provider.impl;
+import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.awaitility.Awaitility.await;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import com.google.gson.GsonBuilder;
import java.util.Base64;
-import java.util.List;
-
-import lombok.NonNull;
+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.ToscaPolicyType;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityKey;
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.
* @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.controlloop.Operational.yaml",
- "policytypes/onap.policies.optimization.resource.DistancePolicy.yaml",
- "policytypes/onap.policies.optimization.resource.VnfPolicy.yaml",
- "policytypes/onap.policies.optimization.resource.PciPolicy.yaml",
- "policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml",
- "policytypes/onap.policies.controlloop.guard.Blacklist.yaml",
- "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
- "policytypes/onap.policies.optimization.resource.HpaPolicy.yaml",
- "policytypes/onap.policies.optimization.resource.Vim_fit.yaml",
- "policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml",
- "policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml",
- "policytypes/onap.policies.optimization.service.QueryPolicy.yaml",
- "policytypes/onap.policies.controlloop.guard.MinMax.yaml",
- "policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml",
- "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
- "policytypes/onap.policies.Optimization.yaml",
- "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"
- };
- // @formatter:on
-
/**
* Initialize provider.
*
*/
@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.setDatabaseDriver("org.h2.Driver");
parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
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<String> policyTypeDirectoryContents = ResourceUtils.getDirectoryContents("policytypes");
+
+ ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
+
+ for (String policyTypeFilePath : policyTypeDirectoryContents) {
+ String policyTypeString = ResourceUtils.getResourceAsString(policyTypeFilePath);
+
+ ToscaServiceTemplate foundPolicyTypeSt =
+ yamlTranslator.fromYaml(policyTypeString, ToscaServiceTemplate.class);
- if (policyTypeResourceName.endsWith("yaml")) {
- testYamlStringPolicyTypePersistence(policyTypeString);
+ 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");
- }
- }
-
- private void testYamlStringPolicyTypePersistence(final String policyTypeString) throws Exception {
- Object yamlObject = new Yaml().load(policyTypeString);
- String yamlAsJsonString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject);
- testJsonStringPolicyTypePersistence(yamlAsJsonString);
- }
-
- /**
- * 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);
+ if (serviceTemplate.getPolicyTypes() == null) {
+ serviceTemplate.setPolicyTypes(foundPolicyTypeSt.getPolicyTypes());
+ } else {
+ serviceTemplate.getPolicyTypes().putAll(foundPolicyTypeSt.getPolicyTypes());
+ }
+ }
- assertNotNull(serviceTemplate);
- ToscaPolicyType inPolicyType = serviceTemplate.getPolicyTypes().values().iterator().next();
+ CountDownLatch threadCountDownLatch = new CountDownLatch(10);
- databaseProvider.createPolicyTypes(serviceTemplate);
- databaseProvider.updatePolicyTypes(serviceTemplate);
+ for (int i = 0; i < 10; i++) {
+ new Thread() {
+ public void run() {
+ assertThatCode(() -> databaseProvider.createPolicyTypes(serviceTemplate))
+ .doesNotThrowAnyException();
+ threadCountDownLatch.countDown();
+ }
+ }.start();
+ }
- List<ToscaPolicyType> policyTypeList =
- databaseProvider.getPolicyTypeList(inPolicyType.getName(), inPolicyType.getVersion());
+ threadCountDownLatch.await(9, TimeUnit.SECONDS);
- policyTypeList = databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder()
- .name(inPolicyType.getName()).version(inPolicyType.getVersion()).build());
+ ToscaEntityKey resourceOptimizationPtKey =
+ new ToscaEntityKey("onap.policies.optimization.resource.OptimizationPolicy", "1.0.0");
- assertEquals(1, policyTypeList.size());
- assertEquals(inPolicyType.getName(), policyTypeList.get(0).getName());
+ ToscaServiceTemplate resOptPolicyTypeSt = databaseProvider.getPolicyTypes(resourceOptimizationPtKey.getName(),
+ resourceOptimizationPtKey.getVersion());
- policyTypeList = databaseProvider
- .getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().name(inPolicyType.getName()).build());
+ assertEquals(3, resOptPolicyTypeSt.getPolicyTypesAsMap().size());
+ assertTrue(resOptPolicyTypeSt.getPolicyTypesAsMap().containsKey(resourceOptimizationPtKey));
- assertEquals(1, policyTypeList.size());
- assertEquals(inPolicyType.getName(), policyTypeList.get(0).getName());
+ ToscaEntityKey resourcePtKey = new ToscaEntityKey("onap.policies.optimization.Resource", "1.0.0");
+ assertTrue(resOptPolicyTypeSt.getPolicyTypesAsMap().containsKey(resourcePtKey));
- policyTypeList = databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build());
- assertTrue(policyTypeList.size() <= 3);
- assertEquals(inPolicyType.getName(), policyTypeList.get(0).getName());
+ ToscaEntityKey optimizationPtKey = new ToscaEntityKey("onap.policies.Optimization", "1.0.0");
+ assertTrue(resOptPolicyTypeSt.getPolicyTypesAsMap().containsKey(optimizationPtKey));
- for (ToscaPolicyType policyType: databaseProvider.getPolicyTypeList(null, null)) {
- databaseProvider.deletePolicyType(policyType.getName(), policyType.getVersion());
- }
+ assertEquals(2, resOptPolicyTypeSt.getDataTypesAsMap().size());
}
}