diff options
author | a.sreekumar <ajith.sreekumar@bell.ca> | 2022-02-15 12:16:30 +0000 |
---|---|---|
committer | a.sreekumar <ajith.sreekumar@bell.ca> | 2022-02-16 11:49:27 +0000 |
commit | 676194789a8b880e2416f9d3bf2484a9fc6be1bc (patch) | |
tree | 71617241837026c53dec1f76b9c0b3ae7a584dff /models-pdp | |
parent | 45b653fc5a8d641452247eca5c80cf580609e9bf (diff) |
Fix issue with GeneratedValue in PfGeneratedIdKey
PfGeneratedIdKey class (which is used as a composite key
in JpaPolicyAudit and JpaPdpStatistics) uses GeneratedValue
in a wrong way and not according to the specification.
This review fixes it. PfGeneratedIdKey class is removed, and the
generatedId is directly specified in the JpaPolicyAudit and
JpaPdpStatistics classes.
Note: These classes are only used by PAP, so the related methods for db
interaction is removed as PAP directly talks to DB using spring
repository layer. Also the only end result this change brings is that the
'generatedId' alone will be used as the primary key instead of
'generatedId, name and version' together.
Corresponding changes in
DB Migrator: https://gerrit.onap.org/r/c/policy/docker/+/127139
PAP: https://gerrit.onap.org/r/c/policy/pap/+/127130
Change-Id: Ib4ea8b60ffe5c2480746569c0354bf474a6b7006
Issue-ID: POLICY-3897
Signed-off-by: a.sreekumar <ajith.sreekumar@bell.ca>
Diffstat (limited to 'models-pdp')
4 files changed, 61 insertions, 484 deletions
diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java index 0ff60b90f..45e63e404 100644 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java +++ b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatistics.java @@ -4,6 +4,7 @@ * ================================================================================ * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 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. @@ -25,15 +26,19 @@ package org.onap.policy.models.pdp.persistence.concepts; import java.io.Serializable; import java.time.Instant; +import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.persistence.Column; import javax.persistence.ElementCollection; -import javax.persistence.EmbeddedId; import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; import javax.persistence.Table; +import javax.persistence.TableGenerator; import javax.persistence.Temporal; import javax.persistence.TemporalType; import lombok.AllArgsConstructor; @@ -42,13 +47,15 @@ import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.builder.CompareToBuilder; import org.eclipse.persistence.annotations.Index; -import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.common.parameters.BeanValidationResult; +import org.onap.policy.common.parameters.ValidationStatus; +import org.onap.policy.common.parameters.annotations.Pattern; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; -import org.onap.policy.models.base.PfGeneratedIdKey; +import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; import org.onap.policy.models.base.PfUtils; -import org.onap.policy.models.base.validation.annotations.VerifyKey; +import org.onap.policy.models.base.Validated; import org.onap.policy.models.pdp.concepts.PdpEngineWorkerStatistics; import org.onap.policy.models.pdp.concepts.PdpStatistics; @@ -67,10 +74,24 @@ import org.onap.policy.models.pdp.concepts.PdpStatistics; public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStatistics>, Serializable { private static final long serialVersionUID = -7312974966820980659L; - @EmbeddedId - @VerifyKey - @NotNull - private PfGeneratedIdKey key; + @Id + @Column(name = "ID") + @GeneratedValue(strategy = GenerationType.TABLE, generator = "statisticsIdGen") + @TableGenerator( + name = "statisticsIdGen", + table = "sequence", + pkColumnName = "SEQ_NAME", + valueColumnName = "SEQ_COUNT", + pkColumnValue = "SEQ_GEN") + private Long generatedId; + + @Column(name = "name", length = 120) + @Pattern(regexp = PfKey.NAME_REGEXP) + private String name; + + @Column(name = "version", length = 20) + @Pattern(regexp = PfKey.VERSION_REGEXP) + private String version; @Column(precision = 3) @Temporal(TemporalType.TIMESTAMP) @@ -116,16 +137,8 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat * The Default Constructor creates a {@link JpaPdpStatistics} object with a null key. */ public JpaPdpStatistics() { - this(new PfGeneratedIdKey()); - } - - /** - * The Key Constructor creates a {@link JpaPdpStatistics} object with the given concept key. - * - * @param key the key - */ - public JpaPdpStatistics(@NonNull final PfGeneratedIdKey key) { - this.key = new PfGeneratedIdKey(key); + this.setName(PfKey.NULL_KEY_NAME); + this.setVersion(PfKey.NULL_KEY_VERSION); } /** @@ -135,7 +148,9 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat */ public JpaPdpStatistics(@NonNull final JpaPdpStatistics copyConcept) { super(copyConcept); - this.key = new PfGeneratedIdKey(copyConcept.key); + this.name = copyConcept.name; + this.version = copyConcept.version; + this.generatedId = copyConcept.generatedId; this.timeStamp = copyConcept.timeStamp; this.pdpGroupName = copyConcept.pdpGroupName; this.pdpSubGroupName = copyConcept.pdpSubGroupName; @@ -174,7 +189,9 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat final JpaPdpStatistics other = (JpaPdpStatistics) otherConcept; return new CompareToBuilder() - .append(this.key, other.key) + .append(this.name, other.name) + .append(this.version, other.version) + .append(this.generatedId, other.generatedId) .append(this.timeStamp, other.timeStamp) .append(this.pdpGroupName, other.pdpGroupName) .append(this.pdpSubGroupName, other.pdpSubGroupName) @@ -192,8 +209,8 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat @Override public PdpStatistics toAuthorative() { var pdpStatistics = new PdpStatistics(); - pdpStatistics.setPdpInstanceId(key.getName()); - pdpStatistics.setGeneratedId(key.getGeneratedId()); + pdpStatistics.setPdpInstanceId(name); + pdpStatistics.setGeneratedId(generatedId); pdpStatistics.setTimeStamp(timeStamp.toInstant()); pdpStatistics.setPdpGroupName(pdpGroupName); pdpStatistics.setPdpSubGroupName(pdpSubGroupName); @@ -213,12 +230,11 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat @Override public void fromAuthorative(@NonNull final PdpStatistics pdpStatistics) { - if (pdpStatistics.getGeneratedId() == null) { - this.setKey(new PfGeneratedIdKey(pdpStatistics.getPdpInstanceId(), PfKey.NULL_KEY_VERSION)); - } else { - this.setKey(new PfGeneratedIdKey(pdpStatistics.getPdpInstanceId(), - PfKey.NULL_KEY_VERSION, pdpStatistics.getGeneratedId())); + if (pdpStatistics.getGeneratedId() != null) { + this.setGeneratedId(pdpStatistics.getGeneratedId()); } + this.setName(pdpStatistics.getPdpInstanceId()); + this.setVersion(PfKey.NULL_KEY_VERSION); if (pdpStatistics.getTimeStamp() == null) { this.setTimeStamp(Date.from(Instant.EPOCH)); } else { @@ -241,12 +257,18 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat @Override public List<PfKey> getKeys() { - return getKey().getKeys(); + final List<PfKey> keyList = new ArrayList<>(); + keyList.add(getKey()); + return keyList; + } + + @Override + public PfKey getKey() { + return new PfConceptKey(name, version); } @Override public void clean() { - key.clean(); pdpGroupName = pdpGroupName.trim(); pdpSubGroupName = pdpSubGroupName.trim(); if (engineStats != null) { @@ -255,4 +277,13 @@ public class JpaPdpStatistics extends PfConcept implements PfAuthorative<PdpStat } } } + + @Override + public BeanValidationResult validate(@NonNull String fieldName) { + BeanValidationResult result = super.validate(fieldName); + if (PfKey.NULL_KEY_NAME.equals(name)) { + result.addResult("name", name, ValidationStatus.INVALID, Validated.IS_NULL); + } + return result; + } } diff --git a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java b/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java deleted file mode 100644 index 0b3f32cf5..000000000 --- a/models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java +++ /dev/null @@ -1,172 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP Policy Model - * ================================================================================ - * Copyright (C) 2019-2021 Nordix Foundation. - * Modifications Copyright (C) 2020-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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.models.pdp.persistence.provider; - -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; -import javax.ws.rs.core.Response; -import lombok.NonNull; -import org.onap.policy.common.parameters.BeanValidationResult; -import org.onap.policy.models.base.PfGeneratedIdKey; -import org.onap.policy.models.base.PfKey; -import org.onap.policy.models.base.PfModelException; -import org.onap.policy.models.base.PfModelRuntimeException; -import org.onap.policy.models.dao.PfDao; -import org.onap.policy.models.dao.PfFilterParameters; -import org.onap.policy.models.pdp.concepts.PdpStatistics; -import org.onap.policy.models.pdp.persistence.concepts.JpaPdpStatistics; - - -/** - * This class provides the provision of information on PAP concepts in the database to callers. - * - * @author Ning Xi (ning.xi@est.tech) - */ -public class PdpStatisticsProvider { - private static final int DEFAULT_RECORD_COUNT = 10; - private static final int MAX_RECORD_COUNT = 100; - - /** - * Get filtered PDP statistics. - * - * @param dao the DAO to use to access the database - * @param filterParams filter parameters - * @return the PDP statistics found - * @throws PfModelException on errors getting policies - */ - public List<PdpStatistics> getFilteredPdpStatistics(@NonNull final PfDao dao, - PdpFilterParameters filterParams) { - - if (filterParams.getRecordNum() <= 0) { - filterParams.setRecordNum(DEFAULT_RECORD_COUNT); - - } else if (filterParams.getRecordNum() > MAX_RECORD_COUNT) { - filterParams.setRecordNum(MAX_RECORD_COUNT); - } - - return asPdpStatisticsList(dao.getFiltered(JpaPdpStatistics.class, filterParams)); - } - - /** - * Creates PDP statistics. - * - * @param dao the DAO to use to access the database - * @param pdpStatisticsList a specification of the PDP statistics to create - * @return the PDP statistics created - * @throws PfModelException on errors creating PDP statistics - */ - public List<PdpStatistics> createPdpStatistics(@NonNull final PfDao dao, - @NonNull final List<PdpStatistics> pdpStatisticsList) throws PfModelException { - for (PdpStatistics pdpStatistics : pdpStatisticsList) { - var jpaPdpStatistics = new JpaPdpStatistics(); - jpaPdpStatistics.fromAuthorative(pdpStatistics); - BeanValidationResult validationResult = jpaPdpStatistics.validate("pdp statistics"); - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); - } - - dao.create(jpaPdpStatistics); - pdpStatistics.setGeneratedId(jpaPdpStatistics.getKey().getGeneratedId()); - } - - // Return the created PDP statistics - List<PdpStatistics> pdpStatistics = new ArrayList<>(pdpStatisticsList.size()); - - for (PdpStatistics pdpStatisticsItem : pdpStatisticsList) { - var jpaPdpStatistics = - dao.get(JpaPdpStatistics.class, new PfGeneratedIdKey(pdpStatisticsItem.getPdpInstanceId(), - PfKey.NULL_KEY_VERSION, pdpStatisticsItem.getGeneratedId())); - pdpStatistics.add(jpaPdpStatistics.toAuthorative()); - } - return pdpStatistics; - } - - /** - * Updates PDP statistics. - * - * @param dao the DAO to use to access the database - * @param pdpStatisticsList a specification of the PDP statistics to update - * @return the PDP statistics updated - * @throws PfModelException on errors updating PDP statistics - */ - public List<PdpStatistics> updatePdpStatistics(@NonNull final PfDao dao, - @NonNull final List<PdpStatistics> pdpStatisticsList) throws PfModelException { - - for (PdpStatistics pdpStatistics : pdpStatisticsList) { - var jpaPdpStatistics = new JpaPdpStatistics(); - jpaPdpStatistics.fromAuthorative(pdpStatistics); - - BeanValidationResult validationResult = jpaPdpStatistics.validate("pdp statistics"); - if (!validationResult.isValid()) { - throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, validationResult.getResult()); - } - - dao.update(jpaPdpStatistics); - } - - // Return the created PDP statistics - List<PdpStatistics> pdpStatistics = new ArrayList<>(pdpStatisticsList.size()); - - for (PdpStatistics pdpStatisticsItem : pdpStatisticsList) { - var jpaPdpStatistics = - dao.get(JpaPdpStatistics.class, new PfGeneratedIdKey(pdpStatisticsItem.getPdpInstanceId(), - PfKey.NULL_KEY_VERSION, pdpStatisticsItem.getGeneratedId())); - pdpStatistics.add(jpaPdpStatistics.toAuthorative()); - } - - return pdpStatistics; - } - - /** - * Delete a PDP statistics. - * - * @param dao the DAO to use to access the database - * @param name the name of the policy to get, null to get all PDP statistics - * @param timestamp the timeStamp of statistics to delete, null to delete all statistics record of given PDP - * @return the PDP statistics list deleted - * @throws PfModelException on errors deleting PDP statistics - */ - public List<PdpStatistics> deletePdpStatistics(@NonNull final PfDao dao, @NonNull final String name, - final Instant timestamp) { - List<PdpStatistics> pdpStatisticsListToDel = asPdpStatisticsList(dao.getFiltered(JpaPdpStatistics.class, - PfFilterParameters.builder().name(name).startTime(timestamp).endTime(timestamp).build())); - - pdpStatisticsListToDel.stream().forEach(s -> dao.delete(JpaPdpStatistics.class, - new PfGeneratedIdKey(s.getPdpInstanceId(), PfKey.NULL_KEY_VERSION, s.getGeneratedId()))); - - return pdpStatisticsListToDel; - } - - /** - * Convert JPA PDP statistics list to an PDP statistics list. - * - * @param jpaPdpStatisticsList the list to convert - * @return the PDP statistics list - */ - private List<PdpStatistics> asPdpStatisticsList(List<JpaPdpStatistics> jpaPdpStatisticsList) { - return jpaPdpStatisticsList.stream().map(JpaPdpStatistics::toAuthorative).collect(Collectors.toList()); - } -} diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java index 7c0522ff9..505e3f685 100644 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java +++ b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/concepts/JpaPdpStatisticsTest.java @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2020 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 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. @@ -31,7 +32,6 @@ import static org.junit.Assert.assertTrue; import java.time.Instant; import java.util.ArrayList; import org.junit.Test; -import org.onap.policy.models.base.PfGeneratedIdKey; import org.onap.policy.models.pdp.concepts.PdpStatistics; /** @@ -41,14 +41,12 @@ public class JpaPdpStatisticsTest { @Test public void testConstructor() { - assertThatThrownBy(() -> new JpaPdpStatistics((PfGeneratedIdKey) null)).hasMessageContaining("key"); assertThatThrownBy(() -> new JpaPdpStatistics((JpaPdpStatistics) null)).hasMessageContaining("copyConcept"); assertThatThrownBy(() -> new JpaPdpStatistics((PdpStatistics) null)).hasMessageContaining("authorativeConcept"); assertNotNull(new JpaPdpStatistics()); - assertNotNull(new JpaPdpStatistics(new PfGeneratedIdKey())); PdpStatistics pdpStat = createPdpStatistics(); JpaPdpStatistics jpaPdpStat = new JpaPdpStatistics(createPdpStatistics()); diff --git a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java b/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java deleted file mode 100644 index 90b85b5ae..000000000 --- a/models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java +++ /dev/null @@ -1,280 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * Copyright (C) 2020-2021 Nordix Foundation. - * Modifications Copyright (C) 2020-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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.models.pdp.persistence.provider; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -import java.time.Instant; -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.models.base.Validated; -import org.onap.policy.models.dao.DaoParameters; -import org.onap.policy.models.dao.PfDao; -import org.onap.policy.models.dao.PfDaoFactory; -import org.onap.policy.models.dao.impl.DefaultPfDao; -import org.onap.policy.models.pdp.concepts.PdpEngineWorkerStatistics; -import org.onap.policy.models.pdp.concepts.PdpStatistics; - -public class PdpStatisticsProviderTest { - private static final String DAO_IS_NULL = "dao is marked .*ull but is null"; - private static final String LIST_IS_NULL = "pdpStatisticsList is marked .*ull but is null"; - private static final String GROUP0 = "group0"; - private static final String NAME = "name"; - private static final String GROUP = "group"; - private static final String SUBGROUP = "subgroup"; - private static final Instant TIMESTAMP1 = Instant.ofEpochSecond(1078884319); - private static final Instant TIMESTAMP2 = Instant.ofEpochSecond(1078884350); - - private PfDao pfDao; - - private List<PdpEngineWorkerStatistics> engineStats = new ArrayList<>(); - private PdpStatistics pdpStatistics11; - private PdpStatistics pdpStatistics12; - private PdpStatistics pdpStatistics22; - private PdpStatistics pdpStatistics31; - - // checkstyle complained about this as a local variable; had to make it a field - private long genId; - - /** - * Set up test Dao. - */ - @Before - public void setupDao() throws Exception { - final DaoParameters daoParameters = new DaoParameters(); - daoParameters.setPluginClass(DefaultPfDao.class.getName()); - - daoParameters.setPersistenceUnit("ToscaConceptTest"); - - Properties jdbcProperties = new Properties(); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy"); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY"); - - if (System.getProperty("USE-MARIADB") != null) { - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.mariadb.jdbc.Driver"); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:mariadb://localhost:3306/policy"); - } else { - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver"); - jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:PdpStatisticsProviderTest"); - } - - daoParameters.setJdbcProperties(jdbcProperties); - - pfDao = new PfDaoFactory().createPfDao(daoParameters); - pfDao.init(daoParameters); - - genId = 1; - - pdpStatistics11 = new PdpStatistics(); - pdpStatistics11.setPdpInstanceId(NAME); - pdpStatistics11.setTimeStamp(TIMESTAMP1); - pdpStatistics11.setGeneratedId(genId++); - pdpStatistics11.setPdpGroupName(GROUP); - pdpStatistics11.setPdpSubGroupName(SUBGROUP); - pdpStatistics11.setPolicyDeployCount(2); - pdpStatistics11.setPolicyDeployFailCount(1); - pdpStatistics11.setPolicyDeploySuccessCount(1); - pdpStatistics11.setPolicyExecutedCount(2); - pdpStatistics11.setPolicyExecutedFailCount(1); - pdpStatistics11.setPolicyExecutedSuccessCount(1); - pdpStatistics11.setEngineStats(engineStats); - - pdpStatistics12 = new PdpStatistics(); - pdpStatistics12.setPdpInstanceId(NAME); - pdpStatistics12.setTimeStamp(TIMESTAMP2); - pdpStatistics12.setGeneratedId(genId++); - pdpStatistics12.setPdpGroupName(GROUP); - pdpStatistics12.setPdpSubGroupName(SUBGROUP); - pdpStatistics12.setPolicyDeployCount(2); - pdpStatistics12.setPolicyDeployFailCount(1); - pdpStatistics12.setPolicyDeploySuccessCount(1); - pdpStatistics12.setPolicyExecutedCount(2); - pdpStatistics12.setPolicyExecutedFailCount(1); - pdpStatistics12.setPolicyExecutedSuccessCount(1); - pdpStatistics12.setEngineStats(engineStats); - - pdpStatistics22 = new PdpStatistics(); - pdpStatistics22.setPdpInstanceId("name2"); - pdpStatistics22.setTimeStamp(TIMESTAMP2); - pdpStatistics22.setGeneratedId(genId++); - pdpStatistics22.setPdpGroupName(GROUP); - pdpStatistics22.setPdpSubGroupName(SUBGROUP); - pdpStatistics22.setPolicyDeployCount(2); - pdpStatistics22.setPolicyDeployFailCount(1); - pdpStatistics22.setPolicyDeploySuccessCount(1); - pdpStatistics22.setPolicyExecutedCount(2); - pdpStatistics22.setPolicyExecutedFailCount(1); - pdpStatistics22.setPolicyExecutedSuccessCount(1); - pdpStatistics22.setEngineStats(engineStats); - - pdpStatistics31 = new PdpStatistics(); - pdpStatistics31.setPdpInstanceId("name3"); - pdpStatistics31.setTimeStamp(TIMESTAMP1); - pdpStatistics31.setGeneratedId(genId++); - pdpStatistics31.setPdpGroupName(GROUP); - pdpStatistics31.setPdpSubGroupName(SUBGROUP); - pdpStatistics31.setPolicyDeployCount(2); - pdpStatistics31.setPolicyDeployFailCount(1); - pdpStatistics31.setPolicyDeploySuccessCount(1); - pdpStatistics31.setPolicyExecutedCount(2); - pdpStatistics31.setPolicyExecutedFailCount(1); - pdpStatistics31.setPolicyExecutedSuccessCount(1); - pdpStatistics31.setEngineStats(engineStats); - - List<PdpStatistics> create = List.of(pdpStatistics11, pdpStatistics22, pdpStatistics31, pdpStatistics12); - List<PdpStatistics> createdPdpStatisticsList = new PdpStatisticsProvider().createPdpStatistics(pfDao, create); - - // these should match AND be in the same order - assertThat(createdPdpStatisticsList).isEqualTo(create); - } - - @After - public void teardown() { - pfDao.close(); - } - - @Test - public void testNotOkPdpStatistics() { - PdpStatistics pdpStatisticsErr = new PdpStatistics(); - pdpStatisticsErr.setPdpInstanceId("NULL"); - pdpStatisticsErr.setPdpGroupName(GROUP); - ArrayList<PdpStatistics> pdpStatisticsNullList = new ArrayList<>(); - pdpStatisticsNullList.add(pdpStatisticsErr); - - assertThatThrownBy(() -> { - new PdpStatisticsProvider().createPdpStatistics(pfDao, null); - }).hasMessageMatching(LIST_IS_NULL); - - assertThatThrownBy(() -> { - new PdpStatisticsProvider().updatePdpStatistics(pfDao, null); - }).hasMessageMatching(LIST_IS_NULL); - - assertThatThrownBy(() -> { - new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsNullList); - }).hasMessageContaining("pdp statistics").hasMessageContaining("key") - .hasMessageContaining(Validated.IS_A_NULL_KEY); - - assertThatThrownBy(() -> { - new PdpStatisticsProvider().updatePdpStatistics(pfDao, pdpStatisticsNullList); - }).hasMessageContaining("pdp statistics").hasMessageContaining("key") - .hasMessageContaining(Validated.IS_A_NULL_KEY); - } - - @Test - public void testGetFilteredPdpStatistics() throws Exception { - - assertThatThrownBy(() -> { - new PdpStatisticsProvider().getFilteredPdpStatistics(null, PdpFilterParameters.builder().build()); - }).hasMessageMatching(DAO_IS_NULL); - - List<PdpStatistics> getPdpStatisticsList; - - // empty filter - should return everything - getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters - .builder().build()); - verifyEquals(getPdpStatisticsList, List.of(pdpStatistics11, pdpStatistics12, pdpStatistics22, pdpStatistics31)); - - // match on name - returns multiple records - getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters - .builder().name(NAME).group(GROUP).startTime(TIMESTAMP1).endTime(TIMESTAMP2).build()); - verifyEquals(getPdpStatisticsList, List.of(pdpStatistics11, pdpStatistics12)); - - // this name only has one record - getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters - .builder().name("name2").group(GROUP).startTime(TIMESTAMP1).endTime(TIMESTAMP2).build()); - verifyEquals(getPdpStatisticsList, List.of(pdpStatistics22)); - - // match on subgroup - getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, - PdpFilterParameters.builder().name("name2").group(GROUP).subGroup(SUBGROUP) - .startTime(TIMESTAMP1).endTime(TIMESTAMP2).build()); - verifyEquals(getPdpStatisticsList, List.of(pdpStatistics22)); - - // only request one record - getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters - .builder().name(NAME).recordNum(1).build()); - verifyEquals(getPdpStatisticsList, List.of(pdpStatistics12)); - - // request too many records - getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters - .builder().name(NAME).recordNum(10000).build()); - verifyEquals(getPdpStatisticsList, List.of(pdpStatistics11, pdpStatistics12)); - - // group mismatch - getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters - .builder().name(NAME).group(GROUP0).startTime(TIMESTAMP1).endTime(TIMESTAMP2).build()); - assertThat(getPdpStatisticsList).isEmpty(); - - // subgroup mismatch - getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, - PdpFilterParameters.builder().name("name2").group(GROUP).subGroup("subgroup2") - .startTime(TIMESTAMP1).endTime(TIMESTAMP2).build()); - assertThat(getPdpStatisticsList).isEmpty(); - } - - @Test - public void testUpdatePdpStatistics() throws Exception { - assertThatThrownBy(() -> { - new PdpStatisticsProvider().updatePdpStatistics(null, null); - }).hasMessageMatching(DAO_IS_NULL); - - pdpStatistics11.setPdpGroupName(GROUP0); - List<PdpStatistics> update = List.of(pdpStatistics11); - List<PdpStatistics> updatePdpStatisticsList = new PdpStatisticsProvider().updatePdpStatistics(pfDao, update); - - // these should match AND be in the same order - assertThat(updatePdpStatisticsList).isEqualTo(update); - } - - @Test - public void testDeletePdpStatistics() throws Exception { - assertThatThrownBy(() -> { - new PdpStatisticsProvider().deletePdpStatistics(null, null, null); - }).hasMessageMatching(DAO_IS_NULL); - - assertThatThrownBy(() -> { - new PdpStatisticsProvider().deletePdpStatistics(pfDao, null, null); - }).hasMessageMatching("name is marked .*ull but is null"); - - List<PdpStatistics> deletedPdpStatisticsList = - new PdpStatisticsProvider().deletePdpStatistics(pfDao, NAME, null); - verifyEquals(deletedPdpStatisticsList, List.of(pdpStatistics12, pdpStatistics11)); - } - - private void verifyEquals(List<PdpStatistics> list1, List<PdpStatistics> list2) { - assertThat(sort(list1)).isEqualTo(sort(list2)); - } - - private List<PdpStatistics> sort(List<PdpStatistics> list1) { - List<PdpStatistics> list2 = new ArrayList<>(list1); - Collections.sort(list2, (stat1, stat2) -> stat1.getGeneratedId().compareTo(stat2.getGeneratedId())); - - return list2; - } -} |