diff options
author | Liam Fallon <liam.fallon@est.tech> | 2021-11-15 13:08:36 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2021-11-15 13:08:36 +0000 |
commit | c1b29b86a2c6804de6c7c302cdd103143c1fc617 (patch) | |
tree | 52869148225ee9ff40d3a6ac0aae324ac71ef2eb /models/src | |
parent | d09354a2a5bf018b2fd5dec68a835c084bef16e6 (diff) | |
parent | a88c9a232d486865ce007886daff56392ebf2d7b (diff) |
Merge "Add support transaction in Statistics Providers"
Diffstat (limited to 'models/src')
8 files changed, 266 insertions, 123 deletions
diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProvider.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProvider.java index e5b062bc1..bdb0d4d9b 100644 --- a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProvider.java +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProvider.java @@ -21,19 +21,20 @@ package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider; import java.time.Instant; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import javax.ws.rs.core.Response.Status; +import lombok.AllArgsConstructor; import lombok.NonNull; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaClElementStatistics; +import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ClElementStatisticsRepository; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfReferenceTimestampKey; import org.onap.policy.models.dao.PfFilterParameters; -import org.onap.policy.models.provider.PolicyModelsProviderParameters; -import org.onap.policy.models.provider.impl.AbstractModelsProvider; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; /** * This class provides the provision of information on control loop element statistics in the database to callers. @@ -41,46 +42,34 @@ import org.springframework.stereotype.Component; * @author Ramesh Murugan Iyer (ramesh.murugan.iyer@est.tech) */ @Component -public class ClElementStatisticsProvider extends AbstractModelsProvider { +@Transactional +@AllArgsConstructor +public class ClElementStatisticsProvider { - /** - * Create a provider for control loop element statistics. - * - * @param parameters the parameters for database access - * @throws PfModelException on initiation errors - */ - public ClElementStatisticsProvider(@NonNull PolicyModelsProviderParameters parameters) throws PfModelException { - super(parameters); - this.init(); - } + private ClElementStatisticsRepository clElementStatisticsRepository; /** * Creates control loop element statistics. * * @param clElementStatisticsList a specification of the CL element statistics to create * @return the clElement statistics created - * @throws PfModelException on errors creating clElement statistics + * @throws PfModelException on initiation errors */ public List<ClElementStatistics> createClElementStatistics( @NonNull final List<ClElementStatistics> clElementStatisticsList) throws PfModelException { - List<JpaClElementStatistics> jpaClElementStatisticsList = ProviderUtils.getJpaAndValidate( - clElementStatisticsList, JpaClElementStatistics::new, "control loop element statistics"); + try { + var jpaClElementStatisticsList = ProviderUtils.getJpaAndValidate(clElementStatisticsList, + JpaClElementStatistics::new, "control loop element statistics"); - jpaClElementStatisticsList.forEach(jpaClElementStatistics -> getPfDao().create(jpaClElementStatistics)); + var jpaClElementStatisticsSaved = clElementStatisticsRepository.saveAll(jpaClElementStatisticsList); - // Return the created control loop element statistics - List<ClElementStatistics> elementStatistics = new ArrayList<>(clElementStatisticsList.size()); - - for (ClElementStatistics clElementStat : clElementStatisticsList) { - var jpaClElementStatistics = getPfDao().get(JpaClElementStatistics.class, - new PfReferenceTimestampKey(clElementStat.getParticipantId().getName(), - clElementStat.getParticipantId().getVersion(), clElementStat.getId().toString(), - clElementStat.getTimeStamp())); - elementStatistics.add(jpaClElementStatistics.toAuthorative()); + // Return the saved control loop element statistics + return asClElementStatisticsList(jpaClElementStatisticsSaved); + } catch (IllegalArgumentException e) { + throw new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error in save control loop element statistics", + e); } - - return elementStatistics; } /** @@ -101,22 +90,17 @@ public class ClElementStatisticsProvider extends AbstractModelsProvider { * @param id of the control loop element * @param timestamp timestamp of the statistics * @return the clElement statistics found - * @throws PfModelException on errors getting clElement statistics */ + @Transactional(readOnly = true) public List<ClElementStatistics> getClElementStatistics(final String name, final String version, final String id, - final Instant timestamp) throws PfModelException { - List<ClElementStatistics> clElementStatistics = new ArrayList<>(1); + final Instant timestamp) { if (name != null && version != null && timestamp != null && id != null) { - clElementStatistics.add(getPfDao() - .get(JpaClElementStatistics.class, new PfReferenceTimestampKey(name, version, id, timestamp)) - .toAuthorative()); - return clElementStatistics; + return asClElementStatisticsList(clElementStatisticsRepository + .findAllById(List.of(new PfReferenceTimestampKey(name, version, id, timestamp)))); } else if (name != null) { - clElementStatistics.addAll(getFilteredClElementStatistics(name, version, null, null, null, "DESC", 0)); - } else { - clElementStatistics.addAll(asClElementStatisticsList(getPfDao().getAll(JpaClElementStatistics.class))); + return getFilteredClElementStatistics(name, version, null, null, null, "DESC", 0); } - return clElementStatistics; + return asClElementStatisticsList(clElementStatisticsRepository.findAll()); } /** @@ -130,8 +114,8 @@ public class ClElementStatisticsProvider extends AbstractModelsProvider { * @param getRecordNum Total query count from database * @param filterMap the filters to apply to the get operation * @return the clElement statistics found - * @throws PfModelException on errors getting policies */ + @Transactional(readOnly = true) public List<ClElementStatistics> getFilteredClElementStatistics(final String name, final String version, final Instant startTimeStamp, final Instant endTimeStamp, Map<String, Object> filterMap, final String sortOrder, final int getRecordNum) { @@ -148,6 +132,7 @@ public class ClElementStatisticsProvider extends AbstractModelsProvider { .recordNum(getRecordNum) .build(); // @formatter:on - return asClElementStatisticsList(getPfDao().getFiltered(JpaClElementStatistics.class, filterParams)); + return asClElementStatisticsList( + clElementStatisticsRepository.getFiltered(JpaClElementStatistics.class, filterParams)); } } diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProvider.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProvider.java index fa27a41c2..06c7a11f8 100644 --- a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProvider.java +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProvider.java @@ -21,36 +21,30 @@ package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provider; import java.time.Instant; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import javax.ws.rs.core.Response.Status; +import lombok.AllArgsConstructor; import lombok.NonNull; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics; import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipantStatistics; +import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ParticipantStatisticsRepository; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfTimestampKey; import org.onap.policy.models.dao.PfFilterParameters; -import org.onap.policy.models.provider.PolicyModelsProviderParameters; -import org.onap.policy.models.provider.impl.AbstractModelsProvider; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; /** * This class provides the provision of information on participant statistics in the database to callers. */ @Component -public class ParticipantStatisticsProvider extends AbstractModelsProvider { +@Transactional +@AllArgsConstructor +public class ParticipantStatisticsProvider { - /** - * Create a provider for control loops statistics. - * - * @param parameters the parameters for database access - * @throws PfModelException on initiation errors - */ - public ParticipantStatisticsProvider(@NonNull PolicyModelsProviderParameters parameters) throws PfModelException { - super(parameters); - this.init(); - } + private ParticipantStatisticsRepository participantStatisticsRepository; /** * Get Participant statistics. @@ -59,20 +53,18 @@ public class ParticipantStatisticsProvider extends AbstractModelsProvider { * @param version the version of the participant statistics to get, null to get all stats for a name * @param timestamp the time stamp for the stats to get * @return the participant statistics found - * @throws PfModelException on errors getting participant statistics */ + @Transactional(readOnly = true) public List<ParticipantStatistics> getParticipantStatistics(final String name, final String version, - final Instant timestamp) throws PfModelException { + final Instant timestamp) { if (name != null && version != null && timestamp != null) { - List<ParticipantStatistics> participantStatistics = new ArrayList<>(1); - participantStatistics.add(getPfDao() - .get(JpaParticipantStatistics.class, new PfTimestampKey(name, version, timestamp)).toAuthorative()); - return participantStatistics; + return asParticipantStatisticsList( + participantStatisticsRepository.findAllById(List.of(new PfTimestampKey(name, version, timestamp)))); } else if (name != null) { return getFilteredParticipantStatistics(name, version, timestamp, null, null, "DESC", 0); } else { - return asParticipantStatisticsList(getPfDao().getAll(JpaParticipantStatistics.class)); + return asParticipantStatisticsList(participantStatisticsRepository.findAll()); } } @@ -87,8 +79,8 @@ public class ParticipantStatisticsProvider extends AbstractModelsProvider { * @param getRecordNum Total query count from database * @param filterMap the filters to apply to the get operation * @return the participant statistics found - * @throws PfModelException on errors getting policies */ + @Transactional(readOnly = true) public List<ParticipantStatistics> getFilteredParticipantStatistics(final String name, final String version, final Instant startTimeStamp, final Instant endTimeStamp, Map<String, Object> filterMap, final String sortOrder, final int getRecordNum) { @@ -106,7 +98,8 @@ public class ParticipantStatisticsProvider extends AbstractModelsProvider { .build(); // @formatter:on - return asParticipantStatisticsList(getPfDao().getFiltered(JpaParticipantStatistics.class, filterParams)); + return asParticipantStatisticsList( + participantStatisticsRepository.getFiltered(JpaParticipantStatistics.class, filterParams)); } /** @@ -119,23 +112,17 @@ public class ParticipantStatisticsProvider extends AbstractModelsProvider { public List<ParticipantStatistics> createParticipantStatistics( @NonNull final List<ParticipantStatistics> participantStatisticsList) throws PfModelException { - List<JpaParticipantStatistics> jpaParticipantStatisticsList = ProviderUtils - .getJpaAndValidate(participantStatisticsList, JpaParticipantStatistics::new, "Participant Statistics"); - - jpaParticipantStatisticsList.forEach(jpaParticipantStatistics -> getPfDao().update(jpaParticipantStatistics)); + try { + var jpaParticipantStatisticsList = ProviderUtils.getJpaAndValidate(participantStatisticsList, + JpaParticipantStatistics::new, "Participant Statistics"); - // Return the created participant statistics - List<ParticipantStatistics> participantStatistics = new ArrayList<>(participantStatisticsList.size()); + var jpaParticipantStatisticsSaved = participantStatisticsRepository.saveAll(jpaParticipantStatisticsList); - for (ParticipantStatistics participantStatisticsItem : participantStatisticsList) { - var jpaParticipantStatistics = getPfDao().get(JpaParticipantStatistics.class, - new PfTimestampKey(participantStatisticsItem.getParticipantId().getName(), - participantStatisticsItem.getParticipantId().getVersion(), - participantStatisticsItem.getTimeStamp())); - participantStatistics.add(jpaParticipantStatistics.toAuthorative()); + // Return the saved participant statistics + return asParticipantStatisticsList(jpaParticipantStatisticsSaved); + } catch (IllegalArgumentException e) { + throw new PfModelException(Status.INTERNAL_SERVER_ERROR, "Error in save participant statistics", e); } - - return participantStatistics; } /** diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ClElementStatisticsRepository.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ClElementStatisticsRepository.java new file mode 100644 index 000000000..1e07a4fe6 --- /dev/null +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ClElementStatisticsRepository.java @@ -0,0 +1,32 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * 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.clamp.controlloop.models.controlloop.persistence.repository; + +import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaClElementStatistics; +import org.onap.policy.models.base.PfReferenceTimestampKey; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ClElementStatisticsRepository + extends JpaRepository<JpaClElementStatistics, PfReferenceTimestampKey>, FilterRepository { + +} diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/FilterRepository.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/FilterRepository.java new file mode 100644 index 000000000..ce1f3d8c3 --- /dev/null +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/FilterRepository.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * 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.clamp.controlloop.models.controlloop.persistence.repository; + +import java.util.List; +import org.onap.policy.models.base.PfConcept; +import org.onap.policy.models.dao.PfFilterParametersIntfc; + +public interface FilterRepository { + + /** + * Get an object from the database, referred to by concept key. + * + * @param <T> the type of the object to get, a subclass of {@link PfConcept} + * @param someClass the class of the object to get, a subclass of {@link PfConcept}, if name is null, all concepts + * of type T are returned, if name is not null and version is null, all versions of that concept matching the + * name are returned. + * @param filterParams filter parameters + * @return the objects that was retrieved from the database + */ + <T extends PfConcept> List<T> getFiltered(Class<T> someClass, PfFilterParametersIntfc filterParams); + + /** + * Get an object from the database, referred to by concept key. + * + * @param <T> the type of the object to get, a subclass of {@link PfConcept} + * @param someClass the class of the object to get, a subclass of {@link PfConcept}, if name is null, all concepts + * of type T are returned, if name is not null and version is null, all versions of that concept matching the + * name are returned. + * @param name the name of the object to get, null returns all objects + * @param version the version the object to get, null returns all objects for a specified name + * @return the objects that was retrieved from the database + */ + <T extends PfConcept> List<T> getFiltered(Class<T> someClass, String name, String version); +} diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/FilterRepositoryImpl.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/FilterRepositoryImpl.java new file mode 100644 index 000000000..0dc8fc373 --- /dev/null +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/FilterRepositoryImpl.java @@ -0,0 +1,51 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * 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.clamp.controlloop.models.controlloop.persistence.repository; + +import java.util.List; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import org.onap.policy.models.base.PfConcept; +import org.onap.policy.models.dao.PfDao; +import org.onap.policy.models.dao.PfFilterParametersIntfc; +import org.onap.policy.models.dao.impl.ProxyDao; +import org.springframework.stereotype.Repository; + +@Repository +public class FilterRepositoryImpl implements FilterRepository { + + @PersistenceContext + private EntityManager entityManager; + + protected PfDao getPfDao() { + return new ProxyDao(entityManager); + } + + @Override + public <T extends PfConcept> List<T> getFiltered(Class<T> someClass, PfFilterParametersIntfc filterParams) { + return getPfDao().getFiltered(someClass, filterParams); + } + + @Override + public <T extends PfConcept> List<T> getFiltered(Class<T> someClass, String name, String version) { + return getPfDao().getFiltered(someClass, name, version); + } +} diff --git a/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ParticipantStatisticsRepository.java b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ParticipantStatisticsRepository.java new file mode 100644 index 000000000..6fecd6143 --- /dev/null +++ b/models/src/main/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/repository/ParticipantStatisticsRepository.java @@ -0,0 +1,32 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * 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.clamp.controlloop.models.controlloop.persistence.repository; + +import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipantStatistics; +import org.onap.policy.models.base.PfTimestampKey; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ParticipantStatisticsRepository + extends JpaRepository<JpaParticipantStatistics, PfTimestampKey>, FilterRepository { + +} diff --git a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProviderTest.java b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProviderTest.java index a9ef9148f..cf4136d3e 100644 --- a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProviderTest.java +++ b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ClElementStatisticsProviderTest.java @@ -23,19 +23,23 @@ package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provide import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.time.Instant; import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatistics; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ClElementStatisticsList; +import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaClElementStatistics; +import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ClElementStatisticsRepository; import org.onap.policy.common.utils.coder.Coder; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; -import org.onap.policy.models.provider.PolicyModelsProviderParameters; import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; class ClElementStatisticsProviderTest { @@ -43,9 +47,6 @@ class ClElementStatisticsProviderTest { private static final Coder CODER = new StandardCoder(); private static final String CL_ELEMENT_STATS_JSON = "src/test/resources/providers/TestClElementStatistics.json"; - private static AtomicInteger dbNameCounter = new AtomicInteger(); - - private PolicyModelsProviderParameters parameters; private ClElementStatisticsProvider clElementStatisticsProvider; private ClElementStatisticsList inputClElementStats; private String originalJson = ResourceUtils.getResourceAsString(CL_ELEMENT_STATS_JSON); @@ -58,22 +59,23 @@ class ClElementStatisticsProviderTest { @BeforeEach void beforeSetupDao() throws Exception { - parameters = new PolicyModelsProviderParameters(); - parameters.setDatabaseDriver("org.h2.Driver"); - parameters.setName("PolicyProviderParameterGroup"); - parameters.setImplementation("org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl"); - parameters.setDatabaseUrl("jdbc:h2:mem:clElementTestDb" + dbNameCounter.getAndIncrement()); - parameters.setDatabaseUser("policy"); - parameters.setDatabasePassword("P01icY"); - parameters.setPersistenceUnit("ToscaConceptTest"); - - clElementStatisticsProvider = new ClElementStatisticsProvider(parameters); inputClElementStats = CODER.decode(originalJson, ClElementStatisticsList.class); - } + var clElementStatisticsRepository = mock(ClElementStatisticsRepository.class); + + var jpaClElementStatisticsList = ProviderUtils.getJpaAndValidate(inputClElementStats.getClElementStatistics(), + JpaClElementStatistics::new, "control loop element statistics"); + + for (var clElementStat : jpaClElementStatisticsList) { + when(clElementStatisticsRepository.findAllById(List.of(clElementStat.getKey()))) + .thenReturn(List.of(clElementStat)); + } + + when(clElementStatisticsRepository.saveAll(anyList())).thenReturn(jpaClElementStatisticsList); + + when(clElementStatisticsRepository.getFiltered(eq(JpaClElementStatistics.class), any())) + .thenReturn(List.of(jpaClElementStatisticsList.get(0))); - @AfterEach - void teardown() { - clElementStatisticsProvider.close(); + clElementStatisticsProvider = new ClElementStatisticsProvider(clElementStatisticsRepository); } @Test @@ -84,10 +86,10 @@ class ClElementStatisticsProviderTest { ClElementStatisticsList createdClElementStats = new ClElementStatisticsList(); createdClElementStats.setClElementStatistics( - clElementStatisticsProvider.createClElementStatistics(inputClElementStats.getClElementStatistics())); + clElementStatisticsProvider.createClElementStatistics(inputClElementStats.getClElementStatistics())); assertEquals(inputClElementStats.toString().replaceAll("\\s+", ""), - createdClElementStats.toString().replaceAll("\\s+", "")); + createdClElementStats.toString().replaceAll("\\s+", "")); } @Test @@ -104,9 +106,9 @@ class ClElementStatisticsProviderTest { Instant instant = inputClElementStats.getClElementStatistics().get(0).getTimeStamp(); String id = inputClElementStats.getClElementStatistics().get(0).getId().toString(); assertEquals(1, clElementStatisticsProvider - .getClElementStatistics(identifier.getName(), identifier.getVersion(), id, instant).size()); + .getClElementStatistics(identifier.getName(), identifier.getVersion(), id, instant).size()); assertEquals(1, clElementStatisticsProvider - .getFilteredClElementStatistics("name2", "1.0.1", null, null, null, "DESC", 1).size()); + .getFilteredClElementStatistics("name2", "1.0.1", null, null, null, "DESC", 1).size()); } } diff --git a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProviderTest.java b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProviderTest.java index 8191dd618..c6e1f817d 100644 --- a/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProviderTest.java +++ b/models/src/test/java/org/onap/policy/clamp/controlloop/models/controlloop/persistence/provider/ParticipantStatisticsProviderTest.java @@ -23,19 +23,23 @@ package org.onap.policy.clamp.controlloop.models.controlloop.persistence.provide import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.time.Instant; import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatistics; import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantStatisticsList; +import org.onap.policy.clamp.controlloop.models.controlloop.persistence.concepts.JpaParticipantStatistics; +import org.onap.policy.clamp.controlloop.models.controlloop.persistence.repository.ParticipantStatisticsRepository; import org.onap.policy.common.utils.coder.Coder; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.resources.ResourceUtils; -import org.onap.policy.models.provider.PolicyModelsProviderParameters; import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; class ParticipantStatisticsProviderTest { @@ -44,32 +48,29 @@ class ParticipantStatisticsProviderTest { private static final Coder CODER = new StandardCoder(); private static final String PARTICIPANT_STATS_JSON = "src/test/resources/providers/TestParticipantStatistics.json"; - private static AtomicInteger dbNameCounter = new AtomicInteger(); - - private PolicyModelsProviderParameters parameters; private ParticipantStatisticsProvider participantStatisticsProvider; private ParticipantStatisticsList inputParticipantStatistics; private String originalJson = ResourceUtils.getResourceAsString(PARTICIPANT_STATS_JSON); @BeforeEach void beforeSetupDao() throws Exception { + var participantStatisticsRepository = mock(ParticipantStatisticsRepository.class); + participantStatisticsProvider = new ParticipantStatisticsProvider(participantStatisticsRepository); + inputParticipantStatistics = CODER.decode(originalJson, ParticipantStatisticsList.class); - parameters = new PolicyModelsProviderParameters(); - parameters.setDatabaseDriver("org.h2.Driver"); - parameters.setName("PolicyProviderParameterGroup"); - parameters.setImplementation("org.onap.policy.models.provider.impl.DatabasePolicyModelsProviderImpl"); - parameters.setDatabaseUrl("jdbc:h2:mem:participantStatisticsProviderTestDb" + dbNameCounter.getAndIncrement()); - parameters.setDatabaseUser("policy"); - parameters.setDatabasePassword("P01icY"); - parameters.setPersistenceUnit("ToscaConceptTest"); + var jpaParticipantStatisticsList = + ProviderUtils.getJpaAndValidate(inputParticipantStatistics.getStatisticsList(), + JpaParticipantStatistics::new, "Participant Statistics"); - participantStatisticsProvider = new ParticipantStatisticsProvider(parameters); - inputParticipantStatistics = CODER.decode(originalJson, ParticipantStatisticsList.class); - } + for (var participantStat : jpaParticipantStatisticsList) { + when(participantStatisticsRepository.findAllById(List.of(participantStat.getKey()))) + .thenReturn(List.of(participantStat)); + } + + when(participantStatisticsRepository.getFiltered(eq(JpaParticipantStatistics.class), any())) + .thenReturn(List.of(jpaParticipantStatisticsList.get(0))); - @AfterEach - void teardown() { - participantStatisticsProvider.close(); + when(participantStatisticsRepository.saveAll(anyList())).thenReturn(jpaParticipantStatisticsList); } @Test |