b626142ade123716c684997ee6dab3ce2493d3aa
[policy/xacml-pdp.git] / main / src / test / java / org / onap / policy / pdpx / main / rest / TestXacmlPdpRestServer.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * Copyright (C) 2019, 2021-2022 AT&T Intellectual Property. All rights reserved.
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.pdpx.main.rest;
22
23 import static org.junit.Assert.assertEquals;
24
25 import java.util.HashMap;
26 import java.util.Map;
27 import javax.ws.rs.client.Invocation;
28 import org.junit.Test;
29 import org.onap.policy.common.endpoints.report.HealthCheckReport;
30 import org.onap.policy.pdpx.main.CommonRest;
31 import org.onap.policy.pdpx.main.XacmlState;
32 import org.onap.policy.pdpx.main.rest.model.StatisticsReport;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36 /**
37  * Class to perform unit test of {@link XacmlPdpRestServer}.
38  *
39  */
40 public class TestXacmlPdpRestServer extends CommonRest {
41
42     private static final Logger LOGGER = LoggerFactory.getLogger(TestXacmlPdpRestServer.class);
43     private static final String NOT_ALIVE = "not alive";
44     private static final String ALIVE = "alive";
45     private static final String SELF = "self";
46     private static final String NAME = XacmlState.PDP_NAME;
47     private static final String HEALTHCHECK_ENDPOINT = "healthcheck";
48     private static final String STATISTICS_ENDPOINT = "statistics";
49
50     private int nupdates = 0;
51
52     @Test
53     public void testHealthCheckSuccess() throws Exception {
54         LOGGER.info("***************************** Running testHealthCheckSuccess *****************************");
55         final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT);
56         final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
57         LOGGER.info("test1HealthCheckSuccess health report {}", report);
58         validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
59     }
60
61     @Test
62     public void testHealthCheckFailure() throws Exception {
63         LOGGER.info("***************************** Running testHealthCheckFailure *****************************");
64
65         markActivatorDead();
66
67         final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT);
68         final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
69         LOGGER.info("testHealthCheckFailure health report {}", report);
70         validateHealthCheckReport(NAME, SELF, false, 500, NOT_ALIVE, report);
71     }
72
73     @Test
74     public void testHttpsHealthCheckSuccess() throws Exception {
75         LOGGER.info("***************************** Running testHttpsHealthCheckSuccess *****************************");
76         final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT);
77         final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
78         LOGGER.info("testHttpsHealthCheckSuccess health report {}", report);
79         validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
80     }
81
82     @Test
83     public void testStatistics_200() throws Exception {
84         LOGGER.info("***************************** Running testStatistics_200 *****************************");
85         Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT);
86         StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
87         LOGGER.info("testStatistics_200 health report {}", report);
88         validateStatisticsReport(report, 0, 200, new HashMap<>());
89         updateXacmlPdpStatistics();
90         invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT);
91         report = invocationBuilder.get(StatisticsReport.class);
92         LOGGER.info("testStatistics_200 health report {}", report);
93         validateStatisticsReport(report, 1, 200, returnStatisticsMap());
94     }
95
96     @Test
97     public void testStatistics_500() throws Exception {
98         LOGGER.info("***************************** Running testStatistics_500 *****************************");
99
100         markActivatorDead();
101
102         final Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT);
103         final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
104         LOGGER.info("testStatistics_500 health report {}", report);
105         validateStatisticsReport(report, 0, 500, new HashMap<>());
106     }
107
108     @Test
109     public void testHttpsStatistic() throws Exception {
110         LOGGER.info("***************************** Running testHttpsStatistic *****************************");
111         final Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT);
112         final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
113         LOGGER.info("testHttpsStatistic health report {}", report);
114         validateStatisticsReport(report, 0, 200, new HashMap<>());
115     }
116
117     private Map<String, Map<String, Integer>> returnStatisticsMap() {
118         Map<String, Integer> testAppMetrics1 = new HashMap<>();
119         Map<String, Integer> testAppMetrics2 = new HashMap<>();
120         testAppMetrics1.put("permit_decisions_count", 1);
121         testAppMetrics1.put("deny_decisions_count", 1);
122         testAppMetrics2.put("indeterminant_decisions_count", 1);
123         testAppMetrics2.put("not_applicable_decisions_count", 1);
124         Map<String, Map<String, Integer>> statisticsMap = new HashMap<>();
125         statisticsMap.put("testApp1", testAppMetrics1);
126         statisticsMap.put("testApp2", testAppMetrics2);
127         return statisticsMap;
128     }
129
130     private void updateXacmlPdpStatistics() {
131         XacmlPdpStatisticsManager stats = XacmlPdpStatisticsManager.getCurrent();
132         ++nupdates;
133         stats.setTotalPolicyCount(nupdates);
134         stats.setTotalPolicyTypesCount(nupdates);
135         stats.updatePermitDecisionsCount("testApp1");
136         stats.updateDenyDecisionsCount("testApp1");
137         stats.updateIndeterminantDecisionsCount("testApp2");
138         stats.updateNotApplicableDecisionsCount("testApp2");
139     }
140
141     private void validateStatisticsReport(final StatisticsReport report, final int count,
142                                           final int code, final Map<String, Map<String, Integer>> decisionsMap) {
143         assertEquals(code, report.getCode());
144         assertEquals(count, report.getTotalPoliciesCount());
145         assertEquals(count, report.getTotalPolicyTypesCount());
146         assertEquals(count, report.getPermitDecisionsCount());
147         assertEquals(count, report.getDenyDecisionsCount());
148         assertEquals(count, report.getIndeterminantDecisionsCount());
149         assertEquals(count, report.getNotApplicableDecisionsCount());
150         assertEquals(decisionsMap, report.getApplicationMetrics());
151     }
152
153     private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
154                     final String message, final HealthCheckReport report) {
155         assertEquals(name, report.getName());
156         assertEquals(url, report.getUrl());
157         assertEquals(healthy, report.isHealthy());
158         assertEquals(code, report.getCode());
159         assertEquals(message, report.getMessage());
160     }
161 }