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
 
  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;
 
  26 import static org.junit.Assert.assertEquals;
 
  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;
 
  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";
 
  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;
 
  67     public void setupDao() throws Exception {
 
  68         final DaoParameters daoParameters = new DaoParameters();
 
  69         daoParameters.setPluginClass(DefaultPfDao.class.getName());
 
  71         daoParameters.setPersistenceUnit("ToscaConceptTest");
 
  73         Properties jdbcProperties = new Properties();
 
  74         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
 
  75         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
 
  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");
 
  81         daoParameters.setJdbcProperties(jdbcProperties);
 
  83         pfDao = new PfDaoFactory().createPfDao(daoParameters);
 
  84         pfDao.init(daoParameters);
 
  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();
 
 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();
 
 116         List<PdpStatistics> createdPdpStatisticsList;
 
 117         createdPdpStatisticsList = new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsTestList);
 
 118         createdListStr = createdPdpStatisticsList.toString();
 
 119         assertEquals(createdListStr.replaceAll("\\s+", ""), testListStr.replaceAll("\\s+", ""));
 
 124     public void teardown() {
 
 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);
 
 136         assertThatThrownBy(() -> {
 
 137             new PdpStatisticsProvider().createPdpStatistics(pfDao, null);
 
 138         }).hasMessageMatching(LIST_IS_NULL);
 
 140         assertThatThrownBy(() -> {
 
 141             new PdpStatisticsProvider().updatePdpStatistics(pfDao, null);
 
 142         }).hasMessageMatching(LIST_IS_NULL);
 
 144         assertThatThrownBy(() -> {
 
 145             new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsNullList);
 
 146         }).hasMessageContaining("pdp statistics").hasMessageContaining("key")
 
 147                         .hasMessageContaining(Validated.IS_A_NULL_KEY);
 
 149         assertThatThrownBy(() -> {
 
 150             new PdpStatisticsProvider().updatePdpStatistics(pfDao, pdpStatisticsNullList);
 
 151         }).hasMessageContaining("pdp statistics").hasMessageContaining("key")
 
 152                         .hasMessageContaining(Validated.IS_A_NULL_KEY);
 
 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);
 
 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+", ""));
 
 171         getPdpStatisticsList = new PdpStatisticsProvider().getPdpStatistics(pfDao, null, TIMESTAMP1);
 
 172         gotListStr = getPdpStatisticsList.toString();
 
 173         assertEquals(testListStr.replaceAll("\\s+", ""), gotListStr.replaceAll("\\s+", ""));
 
 177     public void testGetFilteredPdpStatistics() throws Exception {
 
 178         assertThatThrownBy(() -> {
 
 179             new PdpStatisticsProvider().getFilteredPdpStatistics(null, NAME, GROUP, SUBGROUP, TIMESTAMP1, TIMESTAMP2,
 
 181         }).hasMessageMatching(DAO_IS_NULL);
 
 183         assertThatThrownBy(() -> {
 
 184             new PdpStatisticsProvider().getFilteredPdpStatistics(pfDao, NAME, null, null, TIMESTAMP1, TIMESTAMP2, ORDER,
 
 186         }).hasMessageMatching("pdpGroupName is marked .*ull but is null");
 
 189         List<PdpStatistics> createdPdpStatisticsList;
 
 190         createdPdpStatisticsList = new PdpStatisticsProvider().createPdpStatistics(pfDao, pdpStatisticsTestList);
 
 191         createdListStr = createdPdpStatisticsList.toString();
 
 192         assertEquals(createdListStr.replaceAll("\\s+", ""), testListStr.replaceAll("\\s+", ""));
 
 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);
 
 207     public void testUpdatePdpStatistics() throws Exception {
 
 208         assertThatThrownBy(() -> {
 
 209             new PdpStatisticsProvider().updatePdpStatistics(null, null);
 
 210         }).hasMessageMatching(DAO_IS_NULL);
 
 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+", ""));
 
 222     public void testDeletePdpStatistics() throws Exception {
 
 223         assertThatThrownBy(() -> {
 
 224             new PdpStatisticsProvider().deletePdpStatistics(null, null, null);
 
 225         }).hasMessageMatching(DAO_IS_NULL);
 
 227         assertThatThrownBy(() -> {
 
 228             new PdpStatisticsProvider().deletePdpStatistics(pfDao, null, null);
 
 229         }).hasMessageMatching("name is marked .*ull but is null");
 
 231         List<PdpStatistics> deletedPdpStatisticsList =
 
 232                 new PdpStatisticsProvider().deletePdpStatistics(pfDao, NAME, null);
 
 233         String gotListStr = deletedPdpStatisticsList.toString();
 
 234         assertEquals(name1ListStr.replaceAll("\\s+", ""), gotListStr.replaceAll("\\s+", ""));