/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2019-2021 Nordix Foundation.
+ * Copyright (C) 2019-2024 Nordix Foundation.
* Modifications Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2020 Bell Canada. All rights reserved.
+ * Modifications Copyright (C) 2020, 2022 Bell Canada. 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.
package org.onap.policy.models.provider.impl;
-import static org.assertj.core.api.Assertions.assertThat;
-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.assertTrue;
-import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.pdp.concepts.Pdp;
import org.onap.policy.models.pdp.concepts.PdpGroup;
import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
-import org.onap.policy.models.pdp.concepts.PdpStatistics;
import org.onap.policy.models.pdp.concepts.PdpSubGroup;
import org.onap.policy.models.pdp.enums.PdpHealthStatus;
import org.onap.policy.models.pdp.enums.PdpState;
import org.onap.policy.models.provider.PolicyModelsProviderFactory;
import org.onap.policy.models.provider.PolicyModelsProviderParameters;
import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityFilter;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
/**
private static final String VERSION_100 = "1.0.0";
- private static final Instant TIMESTAMP = Instant.EPOCH;
+ private PolicyModelsProviderParameters parameters;
- private static final String ORDER = "DESC";
-
- PolicyModelsProviderParameters parameters;
+ private PolicyModelsProvider databaseProvider;
/**
* Initialize parameters.
public void setupParameters() {
parameters = new PolicyModelsProviderParameters();
parameters.setDatabaseDriver("org.h2.Driver");
- parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
+ parameters.setDatabaseUrl("jdbc:h2:mem:DatabasePolicyModelsProviderTest");
parameters.setDatabaseUser("policy");
parameters.setDatabasePassword("P01icY");
parameters.setPersistenceUnit("ToscaConceptTest");
}
+ /**
+ * Closes the DB.
+ */
+ @After
+ public void tearDown() throws PfModelException {
+ if (databaseProvider != null) {
+ databaseProvider.close();
+ }
+ }
+
@Test
public void testInitAndClose() throws Exception {
assertThatThrownBy(() -> {
new DatabasePolicyModelsProviderImpl(null);
}).hasMessageMatching("^parameters is marked .*on.*ull but is null$");
- PolicyModelsProvider databaseProvider =
- new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
+ databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
+ final String savedDatabaseUrl = parameters.getDatabaseUrl();
parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
databaseProvider.close();
- databaseProvider.init();
+ assertThatThrownBy(() -> {
+ databaseProvider.init();
+ }).hasMessageContaining("could not create Data Access Object (DAO)");
databaseProvider.close();
- parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
+ parameters.setDatabaseUrl(savedDatabaseUrl);
+ final String savedPersistenceUnit = parameters.getPersistenceUnit();
parameters.setPersistenceUnit("WileECoyote");
assertThatThrownBy(databaseProvider::init).hasMessageContaining("could not create Data Access Object (DAO)");
-
- parameters.setPersistenceUnit("ToscaConceptTest");
+ parameters.setPersistenceUnit(savedPersistenceUnit);
databaseProvider.init();
databaseProvider.close();
@Test
public void testProviderMethodsNull() throws Exception {
- PolicyModelsProvider databaseProvider =
- new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
+ databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
assertThatThrownBy(() -> {
databaseProvider.getFilteredPolicyTypes(null);
@Test
public void testProviderMethodsNullGroup() throws Exception {
- PolicyModelsProvider databaseProvider =
- new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
+ databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
assertThatThrownBy(() -> {
databaseProvider.getFilteredPdpGroups(null);
databaseProvider.deletePdpGroup(null);
}).hasMessageMatching(NAME_IS_NULL);
- assertThatThrownBy(() -> {
- databaseProvider.getFilteredPdpStatistics(NAME, null, "sub", TIMESTAMP, TIMESTAMP, ORDER, 0);
- }).hasMessageMatching(GROUP_IS_NULL);
-
- assertThatThrownBy(() -> {
- databaseProvider.createPdpStatistics(null);
- }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
-
- assertThatThrownBy(() -> {
- databaseProvider.updatePdpStatistics(null);
- }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
-
- assertThatThrownBy(() -> {
- databaseProvider.deletePdpStatistics(null, TIMESTAMP);
- }).hasMessageMatching(NAME_IS_NULL);
-
databaseProvider.close();
}
@Test
public void testProviderMethodsNotInit() throws Exception {
- PolicyModelsProvider databaseProvider =
- new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
+ databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
databaseProvider.close();
@Test
public void testProviderMethods() throws PfModelException {
- PolicyModelsProvider databaseProvider =
- new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
+ databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
assertThatThrownBy(() -> databaseProvider.getPolicyTypes(NAME, VERSION_100))
.hasMessage("service template not found in database");
pdpSubGroup.setPdpInstances(new ArrayList<>());
pdpSubGroup.getPdpInstances().add(pdp);
- PdpStatistics pdpStatistics = new PdpStatistics();
- pdpStatistics.setPdpInstanceId(NAME);
- pdpStatistics.setTimeStamp(TIMESTAMP);
- pdpStatistics.setPdpGroupName(GROUP);
- pdpStatistics.setPdpSubGroupName("type");
- ArrayList<PdpStatistics> statisticsArrayList = new ArrayList<>();
- statisticsArrayList.add(pdpStatistics);
-
- PolicyModelsProvider databaseProvider =
- new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
+ databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
assertEquals(123,
databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
}).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup(GROUP).getName());
-
- assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
- assertEquals(1, databaseProvider.createPdpStatistics(statisticsArrayList).size());
- assertEquals(1, databaseProvider.updatePdpStatistics(statisticsArrayList).size());
- }
-
-
- @Test
- public void testProviderMethodsStatistics() throws PfModelException {
- PolicyModelsProvider databaseProvider =
- new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
-
- assertEquals(NAME, databaseProvider.getPdpStatistics(null, null).get(0).getPdpInstanceId());
- assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null,
- null, null, ORDER, 0).get(0).getPdpInstanceId());
- assertEquals(0, databaseProvider.getFilteredPdpStatistics(null, GROUP, null,
- Instant.now(), null, ORDER, 0).size());
- assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null,
- null, TIMESTAMP, ORDER, 0).get(0).getPdpInstanceId());
- assertEquals(0,
- databaseProvider.getFilteredPdpStatistics(null, GROUP, null, Instant.now(),
- Instant.now(), ORDER, 0).size());
-
- assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, null,
- null, ORDER, 0).get(0).getPdpInstanceId());
- assertEquals(0,
- databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, Instant.now(), Instant.now(),
- ORDER, 0).size());
-
- assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
- null, null, ORDER, 0).get(0).getPdpInstanceId());
-
- assertEquals(0, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
- Instant.now(), Instant.now(), ORDER, 0).size());
-
- assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
- null, null, ORDER, 1).get(0).getPdpInstanceId());
- assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
- null, null, ORDER, 5).get(0).getPdpInstanceId());
- assertEquals(0, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
- Instant.now(), Instant.now(), ORDER, 5).size());
-
- assertEquals(NAME, databaseProvider.deletePdpStatistics(NAME, null).get(0).getPdpInstanceId());
- assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
-
- assertThat(databaseProvider.getAllPolicyStatus()).isEmpty();
- assertThat(databaseProvider.getAllPolicyStatus(new ToscaConceptIdentifierOptVersion("MyPolicy", null)))
- .isEmpty();
- assertThat(databaseProvider.getGroupPolicyStatus(GROUP)).isEmpty();
- assertThatCode(() -> databaseProvider.cudPolicyStatus(null, null, null))
- .doesNotThrowAnyException();
-
- databaseProvider.close();
}
@Test
List<PdpGroup> pdpGroups = new ArrayList<>();
pdpGroups.add(pdpGroup);
- PolicyModelsProvider databaseProvider =
- new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
+ databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
databaseProvider.createPdpGroups(pdpGroups);
List<PdpGroup> pdpGroups = new ArrayList<>();
pdpGroups.add(pdpGroup);
- PolicyModelsProvider databaseProvider =
- new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
+ databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
databaseProvider.createPdpGroups(pdpGroups);
databaseProvider.close();
}
+
+ @Test
+ public void testToscaNodeTemplateHandling() throws PfModelException {
+ databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
+
+ ToscaServiceTemplate serviceTemplate = makeNodeTemplate();
+
+ assertEquals("1.0.1",
+ databaseProvider.createToscaNodeTemplates(serviceTemplate).getToscaTopologyTemplate().getNodeTemplates()
+ .get("metadataSet1").getVersion());
+ assertEquals(1, databaseProvider.getNodeTemplateMetadataSets(null, null).size());
+
+ ToscaNodeTemplate nodeTemplate1 = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates()
+ .get("metadataSet1");
+ nodeTemplate1.setMetadata(Map.of("dummyKey", "updatedValue"));
+ serviceTemplate.getToscaTopologyTemplate().setNodeTemplates(Map.of("metadataSet1:1.0.1", nodeTemplate1));
+ assertEquals("updatedValue", databaseProvider.updateToscaNodeTemplates(serviceTemplate)
+ .getToscaTopologyTemplate().getNodeTemplates().get("metadataSet1").getMetadata().get("dummyKey"));
+
+ assertThatThrownBy(() -> {
+ databaseProvider.deleteToscaNodeTemplate("invalidName", "1.0.1");
+ }).hasMessage("node template invalidName:1.0.1 not found");
+
+ databaseProvider.close();
+ }
+
+ private ToscaServiceTemplate makeNodeTemplate() {
+ ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
+ serviceTemplate.setToscaDefinitionsVersion("sample:1.1.0");
+ serviceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
+ serviceTemplate.setNodeTypes(Map.of("org.onap.policy.metadataSet:1.0.0", new ToscaNodeType()));
+ ToscaNodeTemplate nodeTemplate1 = new ToscaNodeTemplate();
+ nodeTemplate1.setName("metadataSet1");
+ nodeTemplate1.setVersion("1.0.1");
+ nodeTemplate1.setType("org.onap.policy.metadataSet");
+ nodeTemplate1.setTypeVersion("1.0.0");
+ nodeTemplate1.setMetadata(Map.of("dummyKey", "dummyValue"));
+
+ serviceTemplate.getToscaTopologyTemplate().setNodeTemplates(Map.of("metadataSet1", nodeTemplate1));
+
+ return serviceTemplate;
+ }
}