From 676194789a8b880e2416f9d3bf2484a9fc6be1bc Mon Sep 17 00:00:00 2001 From: "a.sreekumar" Date: Tue, 15 Feb 2022 12:16:30 +0000 Subject: 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 --- .../pdp/persistence/concepts/JpaPdpStatistics.java | 89 ++++--- .../provider/PdpStatisticsProvider.java | 172 ------------- .../persistence/concepts/JpaPdpStatisticsTest.java | 4 +- .../provider/PdpStatisticsProviderTest.java | 280 --------------------- 4 files changed, 61 insertions(+), 484 deletions(-) delete mode 100644 models-pdp/src/main/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProvider.java delete mode 100644 models-pdp/src/test/java/org/onap/policy/models/pdp/persistence/provider/PdpStatisticsProviderTest.java (limited to 'models-pdp/src') 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, 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 getKeys() { - return getKey().getKeys(); + final List 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 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 createPdpStatistics(@NonNull final PfDao dao, - @NonNull final List 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 = 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 updatePdpStatistics(@NonNull final PfDao dao, - @NonNull final List 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 = 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 deletePdpStatistics(@NonNull final PfDao dao, @NonNull final String name, - final Instant timestamp) { - List 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 asPdpStatisticsList(List 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 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 create = List.of(pdpStatistics11, pdpStatistics22, pdpStatistics31, pdpStatistics12); - List 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 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 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 update = List.of(pdpStatistics11); - List 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 deletedPdpStatisticsList = - new PdpStatisticsProvider().deletePdpStatistics(pfDao, NAME, null); - verifyEquals(deletedPdpStatisticsList, List.of(pdpStatistics12, pdpStatistics11)); - } - - private void verifyEquals(List list1, List list2) { - assertThat(sort(list1)).isEqualTo(sort(list2)); - } - - private List sort(List list1) { - List list2 = new ArrayList<>(list1); - Collections.sort(list2, (stat1, stat2) -> stat1.getGeneratedId().compareTo(stat2.getGeneratedId())); - - return list2; - } -} -- cgit 1.2.3-korg