X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=models-pdp%2Fsrc%2Ftest%2Fjava%2Forg%2Fonap%2Fpolicy%2Fmodels%2Fpdp%2Fpersistence%2Fprovider%2FPdpProviderTest.java;h=80c906e5fcca481146363c3d4f24aab0465343b7;hb=e53df8d3f8ab0464b0876bdb339fa91dc9085cd2;hp=cad1357b9495f4e3526219482b66682fc94291a1;hpb=12fce55a66848bcc7f71430324b3a9051b8ce0d4;p=policy%2Fmodels.git diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpProviderTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpProviderTest.java index cad1357b9..80c906e5f 100644 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpProviderTest.java +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpProviderTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2019-2021,2023 Nordix Foundation. + * Modifications Copyright (C) 2019-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. @@ -21,21 +21,24 @@ package org.onap.policy.models.pdp.persistence.provider; +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.assertNotEquals; import static org.junit.Assert.assertTrue; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Properties; -import org.eclipse.persistence.config.PersistenceUnitProperties; 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.resources.ResourceUtils; import org.onap.policy.models.base.PfModelException; +import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.base.Validated; import org.onap.policy.models.dao.DaoParameters; import org.onap.policy.models.dao.PfDao; @@ -45,12 +48,15 @@ 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.PdpGroups; +import org.onap.policy.models.pdp.concepts.PdpPolicyStatus; +import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.PdpPolicyStatusBuilder; +import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.State; 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.tosca.authorative.concepts.ToscaPolicyIdentifier; -import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion; import org.onap.policy.models.tosca.simple.provider.SimpleToscaProvider; /** @@ -65,9 +71,14 @@ public class PdpProviderTest { private static final String GROUP_IS_NULL = "pdpGroupName is marked .*ull but is null"; private static final String DAO_IS_NULL = "dao is marked .*ull but is null"; private static final String PDP_GROUP0 = "PdpGroup0"; + private static final String GROUP_A = "groupA"; + private static final String GROUP_B = "groupB"; + private static final ToscaConceptIdentifier MY_POLICY = new ToscaConceptIdentifier("MyPolicy", "1.2.3"); + private static final ToscaConceptIdentifier MY_POLICY2 = new ToscaConceptIdentifier("MyPolicyB", "2.3.4"); + private PfDao pfDao; private StandardCoder standardCoder; - + private PdpPolicyStatusBuilder statusBuilder; /** * Set up the DAO towards the database. @@ -82,12 +93,16 @@ public class PdpProviderTest { daoParameters.setPersistenceUnit("ToscaConceptTest"); Properties jdbcProperties = new Properties(); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy"); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY"); + jdbcProperties.setProperty("javax.persistence.jdbc.user", "policy"); + jdbcProperties.setProperty("javax.persistence.jdbc.password", "P01icY"); - // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver"); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb"); + if (System.getProperty("USE-MARIADB") != null) { + jdbcProperties.setProperty("javax.persistence.jdbc.driver", "org.mariadb.jdbc.Driver"); + jdbcProperties.setProperty("javax.persistence.jdbc.url", "jdbc:mariadb://localhost:3306/policy"); + } else { + jdbcProperties.setProperty("javax.persistence.jdbc.driver", "org.h2.Driver"); + jdbcProperties.setProperty("javax.persistence.jdbc.url", "jdbc:h2:mem:PdpProviderTest"); + } daoParameters.setJdbcProperties(jdbcProperties); @@ -103,6 +118,17 @@ public class PdpProviderTest { standardCoder = new StandardCoder(); } + /** + * Set up Policy Status builder. + */ + @Before + public void setupBuilder() { + ToscaConceptIdentifier policyType = new ToscaConceptIdentifier("MyPolicyType", "1.2.4"); + + statusBuilder = PdpPolicyStatus.builder().deploy(true).pdpType("MyPdpType").policy(MY_POLICY) + .policyType(policyType).state(State.SUCCESS); + } + @After public void teardown() { pfDao.close(); @@ -153,11 +179,11 @@ public class PdpProviderTest { assertEquals(5, new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()).size()); - List policyTypeList = new ArrayList<>(); - policyTypeList.add(new ToscaPolicyTypeIdentifier("policy.type.0", "1.2.3")); + List policyTypeList = new ArrayList<>(); + policyTypeList.add(new ToscaConceptIdentifier("policy.type.0", "1.2.3")); - List policyList = new ArrayList<>(); - policyList.add(new ToscaPolicyIdentifier("Policy0", "4.5.6")); + List policyList = new ArrayList<>(); + policyList.add(new ToscaConceptIdentifier("Policy0", "4.5.6")); // @formatter:off final PdpGroupFilter filter = PdpGroupFilter.builder() @@ -206,7 +232,7 @@ public class PdpProviderTest { assertThatThrownBy(() -> { new PdpProvider().createPdpGroups(pfDao, pdpGroups0.getGroups()); }).hasMessageContaining("PDP group").hasMessageContaining("pdpGroupState") - .hasMessageContaining(Validated.IS_NULL); + .hasMessageContaining(Validated.IS_NULL); } @Test @@ -272,7 +298,7 @@ public class PdpProviderTest { assertThatThrownBy(() -> { new PdpProvider().updatePdpGroups(pfDao, pdpGroups0.getGroups()); }).hasMessageContaining("PDP group").hasMessageContaining("pdpGroupState") - .hasMessageContaining(Validated.IS_NULL); + .hasMessageContaining(Validated.IS_NULL); } @Test @@ -379,7 +405,7 @@ public class PdpProviderTest { assertThatThrownBy(() -> { new PdpProvider().updatePdpSubGroup(pfDao, PDP_GROUP0, existingSubGroup); }).hasMessageContaining("PDP sub group").hasMessageContaining("desiredInstanceCount") - .hasMessageContaining("below the minimum value"); + .hasMessageContaining("below the minimum value"); existingSubGroup.setDesiredInstanceCount(10); } @@ -470,9 +496,9 @@ public class PdpProviderTest { List afterUpdatePdpGroups = new PdpProvider().getPdpGroups(pfDao, PDP_GROUP0); assertEquals(PdpState.TEST, - afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getPdpState()); + afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getPdpState()); assertEquals(PdpHealthStatus.TEST_IN_PROGRESS, - afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getHealthy()); + afterUpdatePdpGroups.get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getHealthy()); existingPdp.setMessage(""); assertThatThrownBy(() -> { @@ -495,7 +521,7 @@ public class PdpProviderTest { } @Test - public void testUpdatePdpStatistics() throws PfModelException { + public void testUpdatePdpStatisticsDao() throws PfModelException { assertThatThrownBy(() -> { new PdpProvider().updatePdpStatistics(null, null, null, null, null); }).hasMessageMatching(DAO_IS_NULL); @@ -559,7 +585,10 @@ public class PdpProviderTest { assertThatThrownBy(() -> { new PdpProvider().updatePdpStatistics(null, "name", "TYPE", "inst", new PdpStatistics()); }).hasMessageMatching(DAO_IS_NULL); + } + @Test + public void testUpdatePdpStatisticsGroup() throws PfModelException { assertThatThrownBy(() -> { new PdpProvider().updatePdpStatistics(pfDao, null, null, null, null); }).hasMessageMatching(GROUP_IS_NULL); @@ -622,4 +651,180 @@ public class PdpProviderTest { new PdpProvider().updatePdpStatistics(pfDao, "name", "TYPE", "inst", new PdpStatistics()); } + + @Test + public void testGetAllPolicyStatusPfDao() throws PfModelException { + assertThatThrownBy(() -> { + new PdpProvider().getAllPolicyStatus(null); + }).hasMessageMatching(DAO_IS_NULL); + + assertThat(new PdpProvider().getAllPolicyStatus(pfDao)).isEmpty(); + + PdpProvider provider = loadDeployments(); + assertThat(provider.getAllPolicyStatus(pfDao)).hasSize(5); + } + + private PdpProvider loadDeployments() { + PdpProvider provider = new PdpProvider(); + + // same name, different version + final ToscaConceptIdentifier policy3 = new ToscaConceptIdentifier(MY_POLICY.getName(), "10.20.30"); + + PdpPolicyStatus id1 = statusBuilder.pdpGroup(GROUP_A).pdpId("pdp1").policy(MY_POLICY).build(); + PdpPolicyStatus id2 = statusBuilder.pdpGroup(GROUP_A).pdpId("pdp2").policy(MY_POLICY2).build(); + PdpPolicyStatus id3 = statusBuilder.pdpGroup(GROUP_A).pdpId("pdp3").policy(policy3).build(); + PdpPolicyStatus id4 = statusBuilder.pdpGroup(GROUP_B).pdpId("pdp4").policy(MY_POLICY).build(); + PdpPolicyStatus id5 = statusBuilder.pdpGroup(GROUP_B).pdpId("pdp5").policy(MY_POLICY2).build(); + provider.cudPolicyStatus(pfDao, List.of(id1, id2, id3, id4, id5), null, null); + + return provider; + } + + @Test + public void testGetAllPolicyStatusPfDaoToscaConceptIdentifierOptVersion() throws PfModelException { + assertThatThrownBy(() -> { + new PdpProvider().getAllPolicyStatus(null, new ToscaConceptIdentifierOptVersion("somePdp", null)); + }).hasMessageMatching(DAO_IS_NULL); + + assertThatThrownBy(() -> { + new PdpProvider().getAllPolicyStatus(pfDao, null); + }).hasMessageContaining("policy").hasMessageContaining("null"); + + assertThat(new PdpProvider().getAllPolicyStatus(pfDao, new ToscaConceptIdentifierOptVersion("somePdp", null))) + .isEmpty(); + + PdpProvider provider = loadDeployments(); + assertThat(provider.getAllPolicyStatus(pfDao, new ToscaConceptIdentifierOptVersion(MY_POLICY))).hasSize(2); + assertThat(provider.getAllPolicyStatus(pfDao, new ToscaConceptIdentifierOptVersion(MY_POLICY.getName(), null))) + .hasSize(3); + } + + @Test + public void testGetGroupPolicyStatus() throws PfModelException { + assertThatThrownBy(() -> { + new PdpProvider().getGroupPolicyStatus(null, "someGroup"); + }).hasMessageMatching(DAO_IS_NULL); + + assertThatThrownBy(() -> { + new PdpProvider().getGroupPolicyStatus(pfDao, null); + }).hasMessageContaining("group").hasMessageContaining("null"); + + assertThat(new PdpProvider().getGroupPolicyStatus(pfDao, PDP_GROUP0)).isEmpty(); + + PdpProvider provider = loadDeployments(); + assertThat(provider.getGroupPolicyStatus(pfDao, GROUP_A)).hasSize(3); + } + + @Test + public void cudPolicyStatus() throws PfModelException { + PdpProvider prov = new PdpProvider(); + + assertThatThrownBy(() -> prov.cudPolicyStatus(null, List.of(), List.of(), List.of())) + .hasMessageMatching(DAO_IS_NULL); + + // null collections should be OK + assertThatCode(() -> prov.cudPolicyStatus(pfDao, null, null, null)).doesNotThrowAnyException(); + } + + @Test + public void cudPolicyStatus_Create() throws PfModelException { + PdpProvider prov = new PdpProvider(); + + PdpPolicyStatus idx = statusBuilder.pdpGroup(GROUP_A).pdpId("idX").build(); + PdpPolicyStatus idy = statusBuilder.pdpGroup(GROUP_A).pdpId("idY").build(); + PdpPolicyStatus idz = statusBuilder.pdpGroup(GROUP_B).pdpId("idZ").build(); + prov.cudPolicyStatus(pfDao, List.of(idx, idy), null, null); + prov.cudPolicyStatus(pfDao, List.of(idz), null, null); + + List records = prov.getGroupPolicyStatus(pfDao, GROUP_A); + assertThat(records).hasSize(2); + + Collections.sort(records, (rec1, rec2) -> rec1.getPdpId().compareTo(rec2.getPdpId())); + assertThat(records.get(0)).isEqualTo(idx); + assertThat(records.get(1)).isEqualTo(idy); + + records = prov.getGroupPolicyStatus(pfDao, GROUP_B); + assertThat(records).hasSize(1); + assertThat(records.get(0)).isEqualTo(idz); + } + + @Test + public void cudPolicyStatus_Update() throws PfModelException { + PdpProvider prov = new PdpProvider(); + + PdpPolicyStatus idw = statusBuilder.pdpGroup(GROUP_A).pdpId("wId").build(); + PdpPolicyStatus idx = statusBuilder.pdpGroup(GROUP_A).pdpId("xId").build(); + PdpPolicyStatus idy = statusBuilder.pdpGroup(GROUP_A).pdpId("yId").build(); + PdpPolicyStatus idz = statusBuilder.pdpGroup(GROUP_A).pdpId("zId").build(); + prov.cudPolicyStatus(pfDao, List.of(idw, idx, idy, idz), null, null); + + assertThat(prov.getGroupPolicyStatus(pfDao, GROUP_A)).hasSize(4); + + /* + * Now update some records. + */ + idx.setState(State.FAILURE); + idz.setState(State.WAITING); + prov.cudPolicyStatus(pfDao, null, List.of(idx, idz), null); + List records = prov.getGroupPolicyStatus(pfDao, GROUP_A); + assertThat(records).hasSize(4); + + Collections.sort(records, (rec1, rec2) -> rec1.getPdpId().compareTo(rec2.getPdpId())); + assertThat(records.get(0)).isEqualTo(idw); + assertThat(records.get(1)).isEqualTo(idx); + assertThat(records.get(2)).isEqualTo(idy); + assertThat(records.get(3)).isEqualTo(idz); + } + + @Test + public void cudPolicyStatus_Delete() throws PfModelException { + PdpProvider prov = new PdpProvider(); + + PdpPolicyStatus idw = statusBuilder.pdpGroup(GROUP_A).pdpId("idW").build(); + PdpPolicyStatus idx = statusBuilder.pdpGroup(GROUP_A).pdpId("idX").build(); + PdpPolicyStatus idy = statusBuilder.pdpGroup(GROUP_A).pdpId("idY").build(); + PdpPolicyStatus idz = statusBuilder.pdpGroup(GROUP_A).pdpId("idZ").build(); + prov.cudPolicyStatus(pfDao, List.of(idw, idx, idy, idz), null, null); + + assertThat(prov.getGroupPolicyStatus(pfDao, GROUP_A)).hasSize(4); + + /* + * Delete some records and then check again. + */ + prov.cudPolicyStatus(pfDao, null, null, List.of(idw, idy)); + + List records = prov.getGroupPolicyStatus(pfDao, GROUP_A); + assertThat(records).hasSize(2); + + Collections.sort(records, (rec1, rec2) -> rec1.getPdpId().compareTo(rec2.getPdpId())); + assertThat(records.get(0)).isEqualTo(idx); + assertThat(records.get(1)).isEqualTo(idz); + } + + @Test + public void testFromAuthorativeStatus() throws PfModelException { + PdpProvider prov = new PdpProvider(); + + assertThatCode(() -> prov.cudPolicyStatus(pfDao, null, null, null)).doesNotThrowAnyException(); + + PdpPolicyStatus ida = statusBuilder.pdpGroup(GROUP_A).pdpId("idA").build(); + PdpPolicyStatus idb = statusBuilder.pdpGroup(GROUP_A).pdpId("idB").build(); + PdpPolicyStatus idc = statusBuilder.pdpGroup(GROUP_A).pdpId("idC").build(); + PdpPolicyStatus idd = statusBuilder.pdpGroup(GROUP_A).pdpId("idD").build(); + + // make a couple invalid records + idb.setState(null); + idd.setState(null); + + List list = List.of(ida, idb, idc, idd); + + // @formatter:off + assertThatCode(() -> prov.cudPolicyStatus(pfDao, list, null, null)) + .isInstanceOf(PfModelRuntimeException.class) + .hasMessageContaining("1").hasMessageContaining("3") + .hasMessageNotContaining("0").hasMessageNotContaining("2"); + // @formatter:on + + assertThat(prov.getGroupPolicyStatus(pfDao, GROUP_A)).isEmpty(); + } }