Refactor Pap code to use Instant from Date
[policy/pap.git] / main / src / test / java / org / onap / policy / pap / main / rest / e2e / StatisticsTest.java
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP PAP
4  * ================================================================================
5  * Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2020-2021 Nordix Foundation.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.pap.main.rest.e2e;
23
24 import static org.junit.Assert.assertEquals;
25
26 import java.net.HttpURLConnection;
27 import java.time.Instant;
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.Map;
31 import javax.ws.rs.client.Invocation;
32 import javax.ws.rs.core.GenericType;
33 import javax.ws.rs.core.Response;
34 import org.junit.Test;
35 import org.onap.policy.common.utils.services.Registry;
36 import org.onap.policy.models.base.PfModelException;
37 import org.onap.policy.models.base.PfModelRuntimeException;
38 import org.onap.policy.models.pdp.concepts.PdpStatistics;
39 import org.onap.policy.models.provider.PolicyModelsProvider;
40 import org.onap.policy.pap.main.PapConstants;
41 import org.onap.policy.pap.main.PolicyModelsProviderFactoryWrapper;
42 import org.onap.policy.pap.main.rest.PapStatisticsManager;
43 import org.onap.policy.pap.main.rest.StatisticsReport;
44
45 public class StatisticsTest extends End2EndBase {
46     private static final String STATISTICS_ENDPOINT = "statistics";
47     private List<PdpStatistics> recordList = new ArrayList<>();
48
49
50     @Test
51     public void test() throws Exception {
52         Invocation.Builder invocationBuilder = sendRequest(STATISTICS_ENDPOINT);
53         StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
54         assertEquals(HttpURLConnection.HTTP_OK, report.getCode());
55
56         updateDistributionStatistics();
57
58         invocationBuilder = sendRequest(STATISTICS_ENDPOINT);
59         StatisticsReport report2 = invocationBuilder.get(StatisticsReport.class);
60
61         assertEquals(HttpURLConnection.HTTP_OK, report.getCode());
62         assertEquals(report.getTotalPdpCount() + 1, report2.getTotalPdpCount());
63         assertEquals(report.getTotalPdpGroupCount() + 1, report2.getTotalPdpGroupCount());
64         assertEquals(report.getTotalPolicyDeployCount() + 1, report2.getTotalPolicyDeployCount());
65         assertEquals(report.getPolicyDeploySuccessCount() + 1, report2.getPolicyDeploySuccessCount());
66         assertEquals(report.getPolicyDeployFailureCount() + 1, report2.getPolicyDeployFailureCount());
67         assertEquals(report.getTotalPolicyDownloadCount() + 1, report2.getTotalPolicyDownloadCount());
68         assertEquals(report.getPolicyDeploySuccessCount() + 1, report2.getPolicyDeploySuccessCount());
69         assertEquals(report.getPolicyDeployFailureCount() + 1, report2.getPolicyDeployFailureCount());
70     }
71
72     @Test
73     public void testDb() throws Exception {
74         verifyResponse("pdps/statistics");
75     }
76
77     @Test
78     public void testDbWithGroup() throws Exception {
79         verifyResponse("pdps/statistics/defaultGroup");
80
81     }
82
83     @Test
84     public void testDbWithSubGroup() throws Exception {
85         verifyResponse("pdps/statistics/defaultGroup/apex");
86     }
87
88     @Test
89     public void testDbWithPdp() throws Exception {
90         verifyResponse("pdps/statistics/defaultGroup/apex/pdp1");
91     }
92
93     @Test
94     public void testDbWithPdpLatest() throws Exception {
95         verifyResponse("pdps/statistics/defaultGroup/apex/pdp1?recordCount=5");
96     }
97
98     private void updateDistributionStatistics() {
99         PapStatisticsManager mgr = Registry.get(PapConstants.REG_STATISTICS_MANAGER, PapStatisticsManager.class);
100
101         mgr.updateTotalPdpCount();
102         mgr.updateTotalPdpGroupCount();
103         mgr.updateTotalPolicyDeployCount();
104         mgr.updatePolicyDeploySuccessCount();
105         mgr.updatePolicyDeployFailureCount();
106         mgr.updateTotalPolicyDownloadCount();
107         mgr.updatePolicyDownloadSuccessCount();
108         mgr.updatePolicyDownloadFailureCount();
109     }
110
111     private void setupEnv() {
112         PolicyModelsProviderFactoryWrapper modelProviderWrapper =
113                 Registry.get(PapConstants.REG_PAP_DAO_FACTORY, PolicyModelsProviderFactoryWrapper.class);
114
115         try (PolicyModelsProvider databaseProvider = modelProviderWrapper.create()) {
116             PdpStatistics pdpStatisticsRecord = new PdpStatistics();
117             pdpStatisticsRecord.setPdpGroupName("defaultGroup");
118             pdpStatisticsRecord.setPdpSubGroupName("apex");
119             pdpStatisticsRecord.setPdpInstanceId("pdp1");
120             pdpStatisticsRecord.setTimeStamp(Instant.now());
121             pdpStatisticsRecord.setPolicyDeployCount(1);
122             pdpStatisticsRecord.setPolicyDeployFailCount(0);
123             pdpStatisticsRecord.setPolicyDeploySuccessCount(1);
124             pdpStatisticsRecord.setPolicyExecutedCount(1);
125             pdpStatisticsRecord.setPolicyExecutedFailCount(0);
126             pdpStatisticsRecord.setPolicyExecutedSuccessCount(1);
127             recordList.add(pdpStatisticsRecord);
128             databaseProvider.createPdpStatistics(recordList);
129         } catch (final PfModelException exp) {
130             throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, exp.getMessage());
131         }
132     }
133
134     private void verifyResponse(String endpoint) throws Exception {
135         setupEnv();
136         Invocation.Builder invocationBuilder = sendRequest(endpoint);
137         verifyResponse(invocationBuilder.get());
138     }
139
140     private void verifyResponse(Response testResponse) {
141         assertEquals(Response.Status.OK.getStatusCode(), testResponse.getStatus());
142         Map<String, Map<String, List<PdpStatistics>>> map =
143                 testResponse.readEntity(new GenericType<Map<String, Map<String, List<PdpStatistics>>>>() {});
144         Map<String, List<PdpStatistics>> subMap = map.get("defaultGroup");
145         List<PdpStatistics> resRecord = subMap.get("apex");
146         assertEquals("pdp1", resRecord.get(0).getPdpInstanceId());
147         assertEquals("apex", resRecord.get(0).getPdpSubGroupName());
148         assertEquals("defaultGroup", resRecord.get(0).getPdpGroupName());
149     }
150 }