a418f81cfd68a07b41ed1b0b077502f0e11edc5b
[policy/models.git] / models-pdp / src / test / java / org / onap / policy / models / pdp / persistence / provider / PdpStatisticsProviderTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2020-2021 Nordix Foundation.
4  *  Modifications Copyright (C) 2020 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
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.models.pdp.persistence.provider;
23
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.assertj.core.api.Assertions.assertThatThrownBy;
26 import static org.junit.Assert.assertEquals;
27
28 import java.time.Instant;
29 import java.util.ArrayList;
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;
43
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);
53     private static final String ORDER = "DESC";
54
55     private PfDao pfDao;
56
57     private ArrayList<PdpStatistics> pdpStatisticsTestList = new ArrayList<>();
58     private List<PdpEngineWorkerStatistics> engineStats = new ArrayList<>();
59     private String testListStr;
60     private String name1ListStr;
61     private String createdListStr;
62
63     /**
64      * Set up test Dao.
65      */
66     @Before
67     public void setupDao() throws Exception {
68         final DaoParameters daoParameters = new DaoParameters();
69         daoParameters.setPluginClass(DefaultPfDao.class.getName());
70
71         daoParameters.setPersistenceUnit("ToscaConceptTest");
72
73         Properties jdbcProperties = new Properties();
74         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
75         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
76
77         // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
78         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
79         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb");
80
81         daoParameters.setJdbcProperties(jdbcProperties);
82
83         pfDao = new PfDaoFactory().createPfDao(daoParameters);
84         pfDao.init(daoParameters);
85
86         PdpStatistics pdpStatistics = new PdpStatistics();
87         pdpStatistics.setPdpInstanceId(NAME);
88         pdpStatistics.setTimeStamp(TIMESTAMP1);
89         pdpStatistics.setPdpGroupName(GROUP);
90         pdpStatistics.setPdpSubGroupName(SUBGROUP);
91         pdpStatistics.setPolicyDeployCount(2);
92         pdpStatistics.setPolicyDeployFailCount(1);
93         pdpStatistics.setPolicyDeploySuccessCount(1);
94         pdpStatistics.setPolicyExecutedCount(2);
95         pdpStatistics.setPolicyExecutedFailCount(1);
96         pdpStatistics.setPolicyExecutedSuccessCount(1);
97         pdpStatistics.setEngineStats(engineStats);
98         pdpStatisticsTestList.add(pdpStatistics);
99         name1ListStr = pdpStatisticsTestList.toString();
100
101         PdpStatistics pdpStatistics2 = new PdpStatistics();
102         pdpStatistics2.setPdpInstanceId("name2");
103         pdpStatistics2.setTimeStamp(TIMESTAMP2);
104         pdpStatistics2.setPdpGroupName(GROUP);
105         pdpStatistics2.setPdpSubGroupName(SUBGROUP);
106         pdpStatistics2.setPolicyDeployCount(2);
107         pdpStatistics2.setPolicyDeployFailCount(1);
108         pdpStatistics2.setPolicyDeploySuccessCount(1);
109         pdpStatistics2.setPolicyExecutedCount(2);
110         pdpStatistics2.setPolicyExecutedFailCount(1);
111         pdpStatistics2.setPolicyExecutedSuccessCount(1);
112         pdpStatistics2.setEngineStats(engineStats);
113         pdpStatisticsTestList.add(pdpStatistics2);
114         testListStr = pdpStatisticsTestList.toString();
115
116         List<PdpStatistics> createdPdpStatisticsList;
117         createdPdpStatisticsList = new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsTestList);
118         createdListStr = createdPdpStatisticsList.toString();
119         assertEquals(createdListStr.replaceAll("\\s+", ""), testListStr.replaceAll("\\s+", ""));
120
121     }
122
123     @After
124     public void teardown() {
125         pfDao.close();
126     }
127
128     @Test
129     public void testNotOkPdpStatistics() {
130         PdpStatistics pdpStatisticsErr = new PdpStatistics();
131         pdpStatisticsErr.setPdpInstanceId("NULL");
132         pdpStatisticsErr.setPdpGroupName(GROUP);
133         ArrayList<PdpStatistics> pdpStatisticsNullList = new ArrayList<>();
134         pdpStatisticsNullList.add(pdpStatisticsErr);
135
136         assertThatThrownBy(() -> {
137             new PdpStatisticsProvider().createPdpStatistics(pfDao, null);
138         }).hasMessageMatching(LIST_IS_NULL);
139
140         assertThatThrownBy(() -> {
141             new PdpStatisticsProvider().updatePdpStatistics(pfDao, null);
142         }).hasMessageMatching(LIST_IS_NULL);
143
144         assertThatThrownBy(() -> {
145             new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsNullList);
146         }).hasMessageContaining("pdp statistics").hasMessageContaining("key")
147                         .hasMessageContaining(Validated.IS_A_NULL_KEY);
148
149         assertThatThrownBy(() -> {
150             new PdpStatisticsProvider().updatePdpStatistics(pfDao, pdpStatisticsNullList);
151         }).hasMessageContaining("pdp statistics").hasMessageContaining("key")
152                         .hasMessageContaining(Validated.IS_A_NULL_KEY);
153     }
154
155     @Test
156     public void testGetPdpStatistics() throws Exception {
157         assertThatThrownBy(() -> {
158             new PdpStatisticsProvider().createPdpStatistics(null, null);
159         }).hasMessageMatching(DAO_IS_NULL);
160         assertThatThrownBy(() -> {
161             new PdpStatisticsProvider().getPdpStatistics(null, null, null);
162         }).hasMessageMatching(DAO_IS_NULL);
163
164         List<PdpStatistics> getPdpStatisticsList;
165         getPdpStatisticsList = new PdpStatisticsProvider().getPdpStatistics(pfDao, NAME, TIMESTAMP1);
166         assertThat(getPdpStatisticsList).hasSize(1);
167         String gotListStr = getPdpStatisticsList.toString();
168         assertEquals(name1ListStr.replaceAll("\\s+", ""), gotListStr.replaceAll("\\s+", ""));
169
170         // name is null
171         getPdpStatisticsList = new PdpStatisticsProvider().getPdpStatistics(pfDao, null, TIMESTAMP1);
172         gotListStr = getPdpStatisticsList.toString();
173         assertEquals(testListStr.replaceAll("\\s+", ""), gotListStr.replaceAll("\\s+", ""));
174     }
175
176     @Test
177     public void testGetFilteredPdpStatistics() throws Exception {
178         assertThatThrownBy(() -> {
179             new PdpStatisticsProvider().getFilteredPdpStatistics(null, NAME, GROUP, SUBGROUP, TIMESTAMP1, TIMESTAMP2,
180                     ORDER, 1);
181         }).hasMessageMatching(DAO_IS_NULL);
182
183         assertThatThrownBy(() -> {
184             new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, NAME, null, null, TIMESTAMP1, TIMESTAMP2, ORDER,
185                     1);
186         }).hasMessageMatching("pdpGroupName is marked .*ull but is null");
187
188
189         List<PdpStatistics> createdPdpStatisticsList;
190         createdPdpStatisticsList = new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsTestList);
191         createdListStr = createdPdpStatisticsList.toString();
192         assertEquals(createdListStr.replaceAll("\\s+", ""), testListStr.replaceAll("\\s+", ""));
193
194         List<PdpStatistics> getPdpStatisticsList;
195         getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, NAME, GROUP, null,
196                 TIMESTAMP1, TIMESTAMP2, ORDER, 0);
197         assertThat(getPdpStatisticsList).hasSize(1);
198         getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, "name2", GROUP, null,
199                 TIMESTAMP1, TIMESTAMP2, ORDER, 0);
200         assertThat(getPdpStatisticsList).hasSize(1);
201         getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, "name2", GROUP, SUBGROUP,
202                 TIMESTAMP1, TIMESTAMP2, ORDER, 0);
203         assertThat(getPdpStatisticsList).hasSize(1);
204     }
205
206     @Test
207     public void testUpdatePdpStatistics() throws Exception {
208         assertThatThrownBy(() -> {
209             new PdpStatisticsProvider().updatePdpStatistics(null, null);
210         }).hasMessageMatching(DAO_IS_NULL);
211
212         pdpStatisticsTestList.get(0).setPdpGroupName(GROUP0);
213         testListStr = pdpStatisticsTestList.toString();
214         List<PdpStatistics> updatePdpStatisticsList =
215                 new PdpStatisticsProvider().updatePdpStatistics(pfDao, pdpStatisticsTestList);
216         String gotListStr = updatePdpStatisticsList.toString();
217         assertEquals(testListStr.replaceAll("\\s+", ""), gotListStr.replaceAll("\\s+", ""));
218
219     }
220
221     @Test
222     public void testDeletePdpStatistics() throws Exception {
223         assertThatThrownBy(() -> {
224             new PdpStatisticsProvider().deletePdpStatistics(null, null, null);
225         }).hasMessageMatching(DAO_IS_NULL);
226
227         assertThatThrownBy(() -> {
228             new PdpStatisticsProvider().deletePdpStatistics(pfDao, null, null);
229         }).hasMessageMatching("name is marked .*ull but is null");
230
231         List<PdpStatistics> deletedPdpStatisticsList =
232                 new PdpStatisticsProvider().deletePdpStatistics(pfDao, NAME, null);
233         String gotListStr = deletedPdpStatisticsList.toString();
234         assertEquals(name1ListStr.replaceAll("\\s+", ""), gotListStr.replaceAll("\\s+", ""));
235     }
236
237 }