/*-
* ============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.
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.net.URISyntaxException;
import java.util.Base64;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import lombok.NonNull;
import org.onap.policy.models.provider.PolicyModelsProviderFactory;
import org.onap.policy.models.provider.PolicyModelsProviderParameters;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.yaml.snakeyaml.Yaml;
/**
* @author Liam Fallon (liam.fallon@est.tech)
*/
public class PolicyToscaPersistenceTest {
- // Logger for this class
- private static final Logger LOGGER = LoggerFactory.getLogger(PolicyToscaPersistenceTest.class);
-
private StandardCoder standardCoder;
private PolicyModelsProvider databaseProvider;
- // @formatter:off
- private String[] policyResourceNames = {
- "policies/vCPE.policy.monitoring.input.tosca.json",
- "policies/vCPE.policy.monitoring.input.tosca.yaml",
- "policies/vCPE.policy.operational.input.tosca.yaml",
- "policies/vDNS.policy.guard.frequency.input.tosca.json",
- "policies/vDNS.policy.guard.frequency.input.tosca.yaml",
- "policies/vDNS.policy.monitoring.input.tosca.json",
- "policies/vDNS.policy.monitoring.input.tosca.yaml",
- "policies/vDNS.policy.operational.input.tosca.yaml",
- "policies/vFirewall.policy.monitoring.input.tosca.json",
- "policies/vFirewall.policy.monitoring.input.tosca.yaml",
- "policies/vFirewall.policy.operational.input.tosca.json",
- "policies/vFirewall.policy.operational.input.tosca.yaml"
- };
- // @formatter:on
-
/**
* Initialize provider.
*
* @throws CoderException on JSON encoding and decoding errors
*/
@Before
- public void setupParameters() throws PfModelException, CoderException {
+ public void setupParameters() throws Exception {
+ // 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");
}
/**
- * Set up the standard coder.
+ * Set up standard coder.
*/
@Before
public void setupStandardCoder() {
}
@Test
- public void testPolicyPersistence() {
- try {
- for (String policyResourceName : policyResourceNames) {
- String policyString = ResourceUtils.getResourceAsString(policyResourceName);
-
- if (policyResourceName.endsWith("yaml")) {
- testYamlStringPolicyPersistence(policyString);
- } else {
- testJsonStringPolicyPersistence(policyString);
- }
+ public void testToscaPolicyPersistence() throws Exception {
+ Set<String> policyResources = ResourceUtils.getDirectoryContents("policies");
+
+ for (String policyResource : policyResources) {
+ if (!policyResource.contains("\\.tosca\\.")) {
+ continue;
+ }
+
+ String policyString = ResourceUtils.getResourceAsString(policyResource);
+
+ if (policyResource.endsWith("yaml")) {
+ testYamlStringPolicyPersistence(policyString);
+ } else {
+ testJsonStringPolicyPersistence(policyString);
}
- } catch (Exception exc) {
- LOGGER.warn("error processing policy types", exc);
- fail("test should not throw an exception");
}
}
private void testYamlStringPolicyPersistence(final String policyString) throws Exception {
Object yamlObject = new Yaml().load(policyString);
- String yamlAsJsonString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject);
+ String yamlAsJsonString = new StandardCoder().encode(yamlObject);
testJsonStringPolicyPersistence(yamlAsJsonString);
}
assertNotNull(serviceTemplate);
databaseProvider.createPolicies(serviceTemplate);
+ databaseProvider.updatePolicies(serviceTemplate);
- for (String policyKey : serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).keySet()) {
- ToscaPolicy incomingPolicy = serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey);
- ToscaPolicy databasePolicy =
- databaseProvider.getPolicies(incomingPolicy.getName(), incomingPolicy.getVersion())
- .getToscaTopologyTemplate().getPolicies().get(0).get(policyKey);
- assertEquals(incomingPolicy.getType(), databasePolicy.getType());
- }
- }
+ for (Map<String, ToscaPolicy> policyMap : serviceTemplate.getToscaTopologyTemplate().getPolicies()) {
+ for (ToscaPolicy policy : policyMap.values()) {
+ ToscaServiceTemplate gotToscaServiceTemplate =
+ databaseProvider.getPolicies(policy.getName(), policy.getVersion());
- private void createPolicyTypes() throws CoderException, PfModelException {
- Object yamlObject = new Yaml().load(
- ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
- String yamlAsJsonString = new StandardCoder().encode(yamlObject);
+ assertEquals(policy.getType(), gotToscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0)
+ .get(policy.getName()).getType());
+
+ gotToscaServiceTemplate = databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build());
- ToscaServiceTemplate toscaServiceTemplatePolicyType =
- standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
+ assertEquals(policy.getType(),
+ getToscaPolicyFromMapList(gotToscaServiceTemplate.getToscaTopologyTemplate().getPolicies(),
+ policy.getName()).getType());
- assertNotNull(toscaServiceTemplatePolicyType);
- databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType);
+ gotToscaServiceTemplate = databaseProvider.getFilteredPolicies(
+ ToscaPolicyFilter.builder().name(policy.getName()).version(policy.getVersion()).build());
- yamlObject = new Yaml().load(
- ResourceUtils.getResourceAsString("policytypes/onap.policies.controlloop.Operational.yaml"));
- yamlAsJsonString = new StandardCoder().encode(yamlObject);
+ assertEquals(policy.getType(), gotToscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0)
+ .get(policy.getName()).getType());
+ }
+ }
+ }
- toscaServiceTemplatePolicyType = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
+ private ToscaPolicy getToscaPolicyFromMapList(List<Map<String, ToscaPolicy>> toscaPolicyMapList,
+ String policyName) {
+ ToscaPolicy toscaPolicy = new ToscaPolicy();
+ for (Map<String, ToscaPolicy> policyMap : toscaPolicyMapList) {
+ toscaPolicy = policyMap.get(policyName);
+ if (toscaPolicy != null) {
+ break;
+ }
+ }
+ return toscaPolicy;
+ }
- assertNotNull(toscaServiceTemplatePolicyType);
- databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType);
+ private void createPolicyTypes() throws CoderException, PfModelException, URISyntaxException {
+ Set<String> policyTypeResources = ResourceUtils.getDirectoryContents("policytypes");
- yamlObject = new Yaml().load(
- ResourceUtils.getResourceAsString("policytypes/onap.policies.controlloop.guard.FrequencyLimiter.yaml"));
- yamlAsJsonString = new StandardCoder().encode(yamlObject);
+ for (String policyTypeResource : policyTypeResources) {
+ Object yamlObject = new Yaml().load(ResourceUtils.getResourceAsString(policyTypeResource));
+ String yamlAsJsonString = new StandardCoder().encode(yamlObject);
- toscaServiceTemplatePolicyType = standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
+ ToscaServiceTemplate toscaServiceTemplatePolicyType =
+ standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
- assertNotNull(toscaServiceTemplatePolicyType);
- databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType);
+ assertNotNull(toscaServiceTemplatePolicyType);
+ databaseProvider.createPolicyTypes(toscaServiceTemplatePolicyType);
+ }
}
}