2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2020-2021 Nordix Foundation.
4 * Modifications Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.models.pdp.persistence.provider;
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.assertj.core.api.Assertions.assertThatThrownBy;
27 import java.time.Instant;
28 import java.util.ArrayList;
29 import java.util.Collections;
30 import java.util.List;
31 import java.util.Properties;
32 import org.eclipse.persistence.config.PersistenceUnitProperties;
33 import org.junit.After;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.onap.policy.models.base.Validated;
37 import org.onap.policy.models.dao.DaoParameters;
38 import org.onap.policy.models.dao.PfDao;
39 import org.onap.policy.models.dao.PfDaoFactory;
40 import org.onap.policy.models.dao.impl.DefaultPfDao;
41 import org.onap.policy.models.pdp.concepts.PdpEngineWorkerStatistics;
42 import org.onap.policy.models.pdp.concepts.PdpStatistics;
44 public class PdpStatisticsProviderTest {
45 private static final String DAO_IS_NULL = "dao is marked .*ull but is null";
46 private static final String LIST_IS_NULL = "pdpStatisticsList is marked .*ull but is null";
47 private static final String GROUP0 = "group0";
48 private static final String NAME = "name";
49 private static final String GROUP = "group";
50 private static final String SUBGROUP = "subgroup";
51 private static final Instant TIMESTAMP1 = Instant.ofEpochSecond(1078884319);
52 private static final Instant TIMESTAMP2 = Instant.ofEpochSecond(1078884350);
56 private List<PdpEngineWorkerStatistics> engineStats = new ArrayList<>();
57 private PdpStatistics pdpStatistics11;
58 private PdpStatistics pdpStatistics12;
59 private PdpStatistics pdpStatistics22;
60 private PdpStatistics pdpStatistics31;
62 // checkstyle complained about this as a local variable; had to make it a field
69 public void setupDao() throws Exception {
70 final DaoParameters daoParameters = new DaoParameters();
71 daoParameters.setPluginClass(DefaultPfDao.class.getName());
73 daoParameters.setPersistenceUnit("ToscaConceptTest");
75 Properties jdbcProperties = new Properties();
76 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
77 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
79 if (System.getProperty("USE-MARIADB") != null) {
80 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.mariadb.jdbc.Driver");
81 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:mariadb://localhost:3306/policy");
83 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
84 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:PdpStatisticsProviderTest");
87 daoParameters.setJdbcProperties(jdbcProperties);
89 pfDao = new PfDaoFactory().createPfDao(daoParameters);
90 pfDao.init(daoParameters);
94 pdpStatistics11 = new PdpStatistics();
95 pdpStatistics11.setPdpInstanceId(NAME);
96 pdpStatistics11.setTimeStamp(TIMESTAMP1);
97 pdpStatistics11.setGeneratedId(genId++);
98 pdpStatistics11.setPdpGroupName(GROUP);
99 pdpStatistics11.setPdpSubGroupName(SUBGROUP);
100 pdpStatistics11.setPolicyDeployCount(2);
101 pdpStatistics11.setPolicyDeployFailCount(1);
102 pdpStatistics11.setPolicyDeploySuccessCount(1);
103 pdpStatistics11.setPolicyExecutedCount(2);
104 pdpStatistics11.setPolicyExecutedFailCount(1);
105 pdpStatistics11.setPolicyExecutedSuccessCount(1);
106 pdpStatistics11.setEngineStats(engineStats);
108 pdpStatistics12 = new PdpStatistics();
109 pdpStatistics12.setPdpInstanceId(NAME);
110 pdpStatistics12.setTimeStamp(TIMESTAMP2);
111 pdpStatistics12.setGeneratedId(genId++);
112 pdpStatistics12.setPdpGroupName(GROUP);
113 pdpStatistics12.setPdpSubGroupName(SUBGROUP);
114 pdpStatistics12.setPolicyDeployCount(2);
115 pdpStatistics12.setPolicyDeployFailCount(1);
116 pdpStatistics12.setPolicyDeploySuccessCount(1);
117 pdpStatistics12.setPolicyExecutedCount(2);
118 pdpStatistics12.setPolicyExecutedFailCount(1);
119 pdpStatistics12.setPolicyExecutedSuccessCount(1);
120 pdpStatistics12.setEngineStats(engineStats);
122 pdpStatistics22 = new PdpStatistics();
123 pdpStatistics22.setPdpInstanceId("name2");
124 pdpStatistics22.setTimeStamp(TIMESTAMP2);
125 pdpStatistics22.setGeneratedId(genId++);
126 pdpStatistics22.setPdpGroupName(GROUP);
127 pdpStatistics22.setPdpSubGroupName(SUBGROUP);
128 pdpStatistics22.setPolicyDeployCount(2);
129 pdpStatistics22.setPolicyDeployFailCount(1);
130 pdpStatistics22.setPolicyDeploySuccessCount(1);
131 pdpStatistics22.setPolicyExecutedCount(2);
132 pdpStatistics22.setPolicyExecutedFailCount(1);
133 pdpStatistics22.setPolicyExecutedSuccessCount(1);
134 pdpStatistics22.setEngineStats(engineStats);
136 pdpStatistics31 = new PdpStatistics();
137 pdpStatistics31.setPdpInstanceId("name3");
138 pdpStatistics31.setTimeStamp(TIMESTAMP1);
139 pdpStatistics31.setGeneratedId(genId++);
140 pdpStatistics31.setPdpGroupName(GROUP);
141 pdpStatistics31.setPdpSubGroupName(SUBGROUP);
142 pdpStatistics31.setPolicyDeployCount(2);
143 pdpStatistics31.setPolicyDeployFailCount(1);
144 pdpStatistics31.setPolicyDeploySuccessCount(1);
145 pdpStatistics31.setPolicyExecutedCount(2);
146 pdpStatistics31.setPolicyExecutedFailCount(1);
147 pdpStatistics31.setPolicyExecutedSuccessCount(1);
148 pdpStatistics31.setEngineStats(engineStats);
150 List<PdpStatistics> create = List.of(pdpStatistics11, pdpStatistics22, pdpStatistics31, pdpStatistics12);
151 List<PdpStatistics> createdPdpStatisticsList = new PdpStatisticsProvider().createPdpStatistics(pfDao, create);
153 // these should match AND be in the same order
154 assertThat(createdPdpStatisticsList).isEqualTo(create);
158 public void teardown() {
163 public void testNotOkPdpStatistics() {
164 PdpStatistics pdpStatisticsErr = new PdpStatistics();
165 pdpStatisticsErr.setPdpInstanceId("NULL");
166 pdpStatisticsErr.setPdpGroupName(GROUP);
167 ArrayList<PdpStatistics> pdpStatisticsNullList = new ArrayList<>();
168 pdpStatisticsNullList.add(pdpStatisticsErr);
170 assertThatThrownBy(() -> {
171 new PdpStatisticsProvider().createPdpStatistics(pfDao, null);
172 }).hasMessageMatching(LIST_IS_NULL);
174 assertThatThrownBy(() -> {
175 new PdpStatisticsProvider().updatePdpStatistics(pfDao, null);
176 }).hasMessageMatching(LIST_IS_NULL);
178 assertThatThrownBy(() -> {
179 new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsNullList);
180 }).hasMessageContaining("pdp statistics").hasMessageContaining("key")
181 .hasMessageContaining(Validated.IS_A_NULL_KEY);
183 assertThatThrownBy(() -> {
184 new PdpStatisticsProvider().updatePdpStatistics(pfDao, pdpStatisticsNullList);
185 }).hasMessageContaining("pdp statistics").hasMessageContaining("key")
186 .hasMessageContaining(Validated.IS_A_NULL_KEY);
190 public void testGetPdpStatisticsName() throws Exception {
191 assertThatThrownBy(() -> {
192 new PdpStatisticsProvider().createPdpStatistics(null, null);
193 }).hasMessageMatching(DAO_IS_NULL);
194 assertThatThrownBy(() -> {
195 new PdpStatisticsProvider().getPdpStatistics(null, null);
196 }).hasMessageMatching(DAO_IS_NULL);
198 List<PdpStatistics> getPdpStatisticsList = new PdpStatisticsProvider().getPdpStatistics(pfDao, NAME);
199 verifyEquals(getPdpStatisticsList, List.of(pdpStatistics12, pdpStatistics11));
202 getPdpStatisticsList = new PdpStatisticsProvider().getPdpStatistics(pfDao, null);
203 verifyEquals(getPdpStatisticsList, List.of(pdpStatistics12, pdpStatistics22, pdpStatistics11, pdpStatistics31));
207 public void testGetPdpStatisticsNameTimestamp() throws Exception {
208 assertThatThrownBy(() -> {
209 new PdpStatisticsProvider().createPdpStatistics(null, null);
210 }).hasMessageMatching(DAO_IS_NULL);
211 assertThatThrownBy(() -> {
212 new PdpStatisticsProvider().getPdpStatistics(null, null, null);
213 }).hasMessageMatching(DAO_IS_NULL);
215 List<PdpStatistics> getPdpStatisticsList;
216 getPdpStatisticsList = new PdpStatisticsProvider().getPdpStatistics(pfDao, NAME, TIMESTAMP1);
217 verifyEquals(getPdpStatisticsList, List.of(pdpStatistics11));
220 getPdpStatisticsList = new PdpStatisticsProvider().getPdpStatistics(pfDao, null, TIMESTAMP1);
221 verifyEquals(getPdpStatisticsList, List.of(pdpStatistics11, pdpStatistics31));
224 getPdpStatisticsList = new PdpStatisticsProvider().getPdpStatistics(pfDao, NAME, null);
225 verifyEquals(getPdpStatisticsList, List.of(pdpStatistics11, pdpStatistics12));
229 public void testGetFilteredPdpStatistics() throws Exception {
231 assertThatThrownBy(() -> {
232 new PdpStatisticsProvider().getFilteredPdpStatistics(null, PdpFilterParameters.builder().build());
233 }).hasMessageMatching(DAO_IS_NULL);
235 List<PdpStatistics> getPdpStatisticsList;
237 // match on name - returns multiple records
238 getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters
239 .builder().name(NAME).group(GROUP).startTime(TIMESTAMP1).endTime(TIMESTAMP2).build());
240 verifyEquals(getPdpStatisticsList, List.of(pdpStatistics11, pdpStatistics12));
242 // this name only has one record
243 getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters
244 .builder().name("name2").group(GROUP).startTime(TIMESTAMP1).endTime(TIMESTAMP2).build());
245 verifyEquals(getPdpStatisticsList, List.of(pdpStatistics22));
248 getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao,
249 PdpFilterParameters.builder().name("name2").group(GROUP).subGroup(SUBGROUP)
250 .startTime(TIMESTAMP1).endTime(TIMESTAMP2).build());
251 verifyEquals(getPdpStatisticsList, List.of(pdpStatistics22));
253 // only request one record
254 getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters
255 .builder().name(NAME).recordNum(1).build());
256 verifyEquals(getPdpStatisticsList, List.of(pdpStatistics12));
258 // request too many records
259 getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters
260 .builder().name(NAME).recordNum(10000).build());
261 verifyEquals(getPdpStatisticsList, List.of(pdpStatistics11, pdpStatistics12));
264 getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, PdpFilterParameters
265 .builder().name(NAME).group(GROUP0).startTime(TIMESTAMP1).endTime(TIMESTAMP2).build());
266 assertThat(getPdpStatisticsList).isEmpty();
269 getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao,
270 PdpFilterParameters.builder().name("name2").group(GROUP).subGroup("subgroup2")
271 .startTime(TIMESTAMP1).endTime(TIMESTAMP2).build());
272 assertThat(getPdpStatisticsList).isEmpty();
276 public void testUpdatePdpStatistics() throws Exception {
277 assertThatThrownBy(() -> {
278 new PdpStatisticsProvider().updatePdpStatistics(null, null);
279 }).hasMessageMatching(DAO_IS_NULL);
281 pdpStatistics11.setPdpGroupName(GROUP0);
282 List<PdpStatistics> update = List.of(pdpStatistics11);
283 List<PdpStatistics> updatePdpStatisticsList = new PdpStatisticsProvider().updatePdpStatistics(pfDao, update);
285 // these should match AND be in the same order
286 assertThat(updatePdpStatisticsList).isEqualTo(update);
290 public void testDeletePdpStatistics() throws Exception {
291 assertThatThrownBy(() -> {
292 new PdpStatisticsProvider().deletePdpStatistics(null, null, null);
293 }).hasMessageMatching(DAO_IS_NULL);
295 assertThatThrownBy(() -> {
296 new PdpStatisticsProvider().deletePdpStatistics(pfDao, null, null);
297 }).hasMessageMatching("name is marked .*ull but is null");
299 List<PdpStatistics> deletedPdpStatisticsList =
300 new PdpStatisticsProvider().deletePdpStatistics(pfDao, NAME, null);
301 verifyEquals(deletedPdpStatisticsList, List.of(pdpStatistics12, pdpStatistics11));
304 private void verifyEquals(List<PdpStatistics> list1, List<PdpStatistics> list2) {
305 assertThat(sort(list1)).isEqualTo(sort(list2));
308 private List<PdpStatistics> sort(List<PdpStatistics> list1) {
309 List<PdpStatistics> list2 = new ArrayList<>(list1);
310 Collections.sort(list2, (stat1, stat2) -> stat1.getGeneratedId().compareTo(stat2.getGeneratedId()));