Merge "add unit test for pdpstatistics provider"
[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 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.pdp.persistence.provider;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26
27 import java.util.ArrayList;
28 import java.util.Date;
29 import java.util.List;
30 import java.util.Properties;
31 import org.eclipse.persistence.config.PersistenceUnitProperties;
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.onap.policy.models.dao.DaoParameters;
36 import org.onap.policy.models.dao.PfDao;
37 import org.onap.policy.models.dao.PfDaoFactory;
38 import org.onap.policy.models.dao.impl.DefaultPfDao;
39 import org.onap.policy.models.pdp.concepts.PdpEngineWorkerStatistics;
40 import org.onap.policy.models.pdp.concepts.PdpStatistics;
41
42 public class PdpStatisticsProviderTest {
43     private static final String DAO_IS_NULL = "dao is marked @NonNull but is null";
44     private static final String LIST_IS_NULL = "pdpStatisticsList is marked @NonNull but is null";
45     private static final String GROUP0 = "group0";
46     private static final String NAME = "name";
47     private static final String GROUP = "group";
48     private static final String SUBGROUP = "subgroup";
49     private static final Date TIMESTAMP1 = new Date(1078884319);
50     private static final Date TIMESTAMP2 = new Date(1078884350);
51     private static final String ORDER = "DESC";
52
53     private PfDao pfDao;
54
55     private ArrayList<PdpStatistics> pdpStatisticsTestList = new ArrayList<>();
56     private List<PdpEngineWorkerStatistics> engineStats = new ArrayList<>();
57     private String testListStr;
58     private String name1ListStr;
59     private String createdListStr;
60
61     /**
62      * Set up test Dao.
63      */
64     @Before
65     public void setupDao() throws Exception {
66         final DaoParameters daoParameters = new DaoParameters();
67         daoParameters.setPluginClass(DefaultPfDao.class.getName());
68
69         daoParameters.setPersistenceUnit("ToscaConceptTest");
70
71         Properties jdbcProperties = new Properties();
72         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
73         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
74
75         // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
76         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
77         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb");
78
79         daoParameters.setJdbcProperties(jdbcProperties);
80
81         pfDao = new PfDaoFactory().createPfDao(daoParameters);
82         pfDao.init(daoParameters);
83
84         PdpStatistics pdpStatistics = new PdpStatistics();
85         pdpStatistics.setPdpInstanceId(NAME);
86         pdpStatistics.setTimeStamp(TIMESTAMP1);
87         pdpStatistics.setPdpGroupName(GROUP);
88         pdpStatistics.setPdpSubGroupName(SUBGROUP);
89         pdpStatistics.setPolicyDeployCount(2);
90         pdpStatistics.setPolicyDeployFailCount(1);
91         pdpStatistics.setPolicyDeploySuccessCount(1);
92         pdpStatistics.setPolicyExecutedCount(2);
93         pdpStatistics.setPolicyExecutedFailCount(1);
94         pdpStatistics.setPolicyExecutedSuccessCount(1);
95         pdpStatistics.setEngineStats(engineStats);
96         pdpStatisticsTestList.add(pdpStatistics);
97         name1ListStr = pdpStatisticsTestList.toString();
98
99         PdpStatistics pdpStatistics2 = new PdpStatistics();
100         pdpStatistics2.setPdpInstanceId("name2");
101         pdpStatistics2.setTimeStamp(TIMESTAMP2);
102         pdpStatistics2.setPdpGroupName(GROUP);
103         pdpStatistics2.setPdpSubGroupName(SUBGROUP);
104         pdpStatistics2.setPolicyDeployCount(2);
105         pdpStatistics2.setPolicyDeployFailCount(1);
106         pdpStatistics2.setPolicyDeploySuccessCount(1);
107         pdpStatistics2.setPolicyExecutedCount(2);
108         pdpStatistics2.setPolicyExecutedFailCount(1);
109         pdpStatistics2.setPolicyExecutedSuccessCount(1);
110         pdpStatistics2.setEngineStats(engineStats);
111         pdpStatisticsTestList.add(pdpStatistics2);
112         testListStr = pdpStatisticsTestList.toString();
113
114         List<PdpStatistics> createdPdpStatisticsList;
115         createdPdpStatisticsList = new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsTestList);
116         createdListStr = createdPdpStatisticsList.toString();
117         assertEquals(createdListStr.replaceAll("\\s+", ""), testListStr.replaceAll("\\s+", ""));
118
119     }
120
121     @After
122     public void teardown() {
123         pfDao.close();
124     }
125
126     @Test
127     public void testNotOkPdpStatistics() {
128         PdpStatistics pdpStatisticsErr = new PdpStatistics();
129         pdpStatisticsErr.setPdpInstanceId("NULL");
130         pdpStatisticsErr.setPdpGroupName(GROUP);
131         ArrayList<PdpStatistics> pdpStatisticsNullList = new ArrayList<>();
132         pdpStatisticsNullList.add(pdpStatisticsErr);
133
134         assertThatThrownBy(() -> {
135             new PdpStatisticsProvider().createPdpStatistics(pfDao, null);
136         }).hasMessage(LIST_IS_NULL);
137
138         assertThatThrownBy(() -> {
139             new PdpStatisticsProvider().updatePdpStatistics(pfDao, null);
140         }).hasMessage(LIST_IS_NULL);
141
142         assertThatThrownBy(() -> {
143             new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsNullList);
144         }).hasMessageContaining("pdp statictics \"NULL\" is not valid");
145
146         assertThatThrownBy(() -> {
147             new PdpStatisticsProvider().updatePdpStatistics(pfDao, pdpStatisticsNullList);
148         }).hasMessageContaining("pdp statistics \"NULL:0.0.0:0\" is not valid");
149     }
150
151     @Test
152     public void testGetPdpStatistics() throws Exception {
153         assertThatThrownBy(() -> {
154             new PdpStatisticsProvider().createPdpStatistics(null, null);
155         }).hasMessage(DAO_IS_NULL);
156         assertThatThrownBy(() -> {
157             new PdpStatisticsProvider().getPdpStatistics(null, null, null);
158         }).hasMessage(DAO_IS_NULL);
159
160         List<PdpStatistics> getPdpStatisticsList;
161         getPdpStatisticsList = new PdpStatisticsProvider().getPdpStatistics(pfDao, NAME, TIMESTAMP1);
162         assertThat(getPdpStatisticsList).hasSize(1);
163         String gotListStr = getPdpStatisticsList.toString();
164         assertEquals(name1ListStr.replaceAll("\\s+", ""), gotListStr.replaceAll("\\s+", ""));
165
166         // name is null
167         getPdpStatisticsList = new PdpStatisticsProvider().getPdpStatistics(pfDao, null, TIMESTAMP1);
168         gotListStr = getPdpStatisticsList.toString();
169         assertEquals(testListStr.replaceAll("\\s+", ""), gotListStr.replaceAll("\\s+", ""));
170     }
171
172     @Test
173     public void testGetFilteredPdpStatistics() throws Exception {
174         assertThatThrownBy(() -> {
175             new PdpStatisticsProvider().getFilteredPdpStatistics(null, NAME, GROUP, SUBGROUP, TIMESTAMP1, TIMESTAMP2,
176                     ORDER, 1);
177         }).hasMessage(DAO_IS_NULL);
178
179         assertThatThrownBy(() -> {
180             new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, NAME, null, null, TIMESTAMP1, TIMESTAMP2, ORDER,
181                     1);
182         }).hasMessage("pdpGroupName is marked @NonNull but is null");
183
184
185         List<PdpStatistics> createdPdpStatisticsList;
186         createdPdpStatisticsList = new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsTestList);
187         createdListStr = createdPdpStatisticsList.toString();
188         assertEquals(createdListStr.replaceAll("\\s+", ""), testListStr.replaceAll("\\s+", ""));
189
190         List<PdpStatistics> getPdpStatisticsList;
191         getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, NAME, GROUP, null,
192                 TIMESTAMP1, TIMESTAMP2, ORDER, 0);
193         assertThat(getPdpStatisticsList).hasSize(1);
194         getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, "name2", GROUP, null,
195                 TIMESTAMP1, TIMESTAMP2, ORDER, 0);
196         assertThat(getPdpStatisticsList).hasSize(1);
197         getPdpStatisticsList = new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, "name2", GROUP, SUBGROUP,
198                 TIMESTAMP1, TIMESTAMP2, ORDER, 0);
199         assertThat(getPdpStatisticsList).hasSize(1);
200     }
201
202     @Test
203     public void testUpdatePdpStatistics() throws Exception {
204         assertThatThrownBy(() -> {
205             new PdpStatisticsProvider().updatePdpStatistics(null, null);
206         }).hasMessage(DAO_IS_NULL);
207
208         pdpStatisticsTestList.get(0).setPdpGroupName(GROUP0);
209         testListStr = pdpStatisticsTestList.toString();
210         List<PdpStatistics> updatePdpStatisticsList =
211                 new PdpStatisticsProvider().updatePdpStatistics(pfDao, pdpStatisticsTestList);
212         String gotListStr = updatePdpStatisticsList.toString();
213         assertEquals(testListStr.replaceAll("\\s+", ""), gotListStr.replaceAll("\\s+", ""));
214
215     }
216
217     @Test
218     public void testDeletePdpStatistics() throws Exception {
219         assertThatThrownBy(() -> {
220             new PdpStatisticsProvider().deletePdpStatistics(null, null, null);
221         }).hasMessage(DAO_IS_NULL);
222
223         assertThatThrownBy(() -> {
224             new PdpStatisticsProvider().deletePdpStatistics(pfDao, null, null);
225         }).hasMessage("name is marked @NonNull but is null");
226
227         List<PdpStatistics> deletedPdpStatisticsList =
228                 new PdpStatisticsProvider().deletePdpStatistics(pfDao, NAME, null);
229         String gotListStr = deletedPdpStatisticsList.toString();
230         assertEquals(name1ListStr.replaceAll("\\s+", ""), gotListStr.replaceAll("\\s+", ""));
231     }
232
233 }