* ============LICENSE_END=========================================================
*/
-
package org.onap.policy.pdpx.main.rest;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import java.io.IOException;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.MediaType;
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
import org.junit.Test;
import org.onap.policy.common.endpoints.report.HealthCheckReport;
-import org.onap.policy.common.utils.network.NetworkUtil;
-import org.onap.policy.pdpx.main.PolicyXacmlPdpException;
-import org.onap.policy.pdpx.main.parameters.CommonTestData;
-import org.onap.policy.pdpx.main.parameters.RestServerParameters;
-import org.onap.policy.pdpx.main.startstop.Main;
+import org.onap.policy.pdpx.main.CommonRest;
+import org.onap.policy.pdpx.main.rest.model.StatisticsReport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
/**
- * Class to perform unit test of HealthCheckMonitor.
+ * Class to perform unit test of {@link XacmlPdpRestServer}.
*
*/
-public class TestXacmlPdpRestServer {
+public class TestXacmlPdpRestServer extends CommonRest {
private static final Logger LOGGER = LoggerFactory.getLogger(TestXacmlPdpRestServer.class);
private static final String NOT_ALIVE = "not alive";
private static final String ALIVE = "alive";
private static final String SELF = "self";
private static final String NAME = "Policy Xacml PDP";
+ private static final String HEALTHCHECK_ENDPOINT = "healthcheck";
+ private static final String STATISTICS_ENDPOINT = "statistics";
@Test
- public void testHealthCheckSuccess() throws PolicyXacmlPdpException, InterruptedException {
- final String reportString = "Report [name=Policy Xacml PDP, url=self, healthy=true, code=200, message=alive]";
- try {
- final Main main = startXacmlPdpService();
- final HealthCheckReport report = performHealthCheck();
- validateReport(NAME, SELF, true, 200, ALIVE, reportString, report);
- stopXacmlPdpService(main);
- } catch (final Exception e) {
- LOGGER.error("testHealthCheckSuccess failed", e);
- fail("Test should not throw an exception");
- }
-
+ public void testHealthCheckSuccess() throws Exception {
+ LOGGER.info("***************************** Running testHealthCheckSuccess *****************************");
+ final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT);
+ final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
+ LOGGER.info("test1HealthCheckSuccess health report {}", report);
+ validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
}
@Test
- public void testHealthCheckFailure() throws InterruptedException {
- final String reportString =
- "Report [name=Policy Xacml PDP, url=self, healthy=false, code=500, message=not alive]";
- final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false);
- restServerParams.setName(CommonTestData.PDPX_GROUP_NAME);
- final XacmlPdpRestServer restServer = new XacmlPdpRestServer(restServerParams);
-
- try {
- restServer.start();
- final HealthCheckReport report = performHealthCheck();
- validateReport(NAME, SELF, false, 500, NOT_ALIVE, reportString, report);
- assertTrue(restServer.isAlive());
- assertTrue(restServer.toString().startsWith("XacmlPdpRestServer [servers="));
- restServer.shutdown();
- } catch (final Exception e) {
- LOGGER.error("testHealthCheckSuccess failed", e);
- fail("Test should not throw an exception");
- }
- }
+ public void testHealthCheckFailure() throws Exception {
+ LOGGER.info("***************************** Running testHealthCheckFailure *****************************");
- private Main startXacmlPdpService() {
- final String[] xacmlPdpConfigParameters = {"-c", "parameters/XacmlPdpConfigParameters.json"};
- return new Main(xacmlPdpConfigParameters);
+ markActivatorDead();
+
+ final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT);
+ final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
+ LOGGER.info("testHealthCheckFailure health report {}", report);
+ validateHealthCheckReport(NAME, SELF, false, 500, NOT_ALIVE, report);
}
- private void stopXacmlPdpService(final Main main) throws PolicyXacmlPdpException {
- main.shutdown();
+ @Test
+ public void testHttpsHealthCheckSuccess() throws Exception {
+ LOGGER.info("***************************** Running testHttpsHealthCheckSuccess *****************************");
+ final Invocation.Builder invocationBuilder = sendHttpsRequest(HEALTHCHECK_ENDPOINT);
+ final HealthCheckReport report = invocationBuilder.get(HealthCheckReport.class);
+ LOGGER.info("testHttpsHealthCheckSuccess health report {}", report);
+ validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report);
}
- private HealthCheckReport performHealthCheck() throws InterruptedException, IOException {
+ @Test
+ public void testStatistics_200() throws Exception {
+ LOGGER.info("***************************** Running testStatistics_200 *****************************");
+ Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT);
+ StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
+ LOGGER.info("testStatistics_200 health report {}", report);
+ validateStatisticsReport(report, 0, 200);
+ updateXacmlPdpStatistics();
+ invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT);
+ report = invocationBuilder.get(StatisticsReport.class);
+ LOGGER.info("testStatistics_200 health report {}", report);
+ validateStatisticsReport(report, 1, 200);
+ }
- final ClientConfig clientConfig = new ClientConfig();
+ @Test
+ public void testStatistics_500() throws Exception {
+ LOGGER.info("***************************** Running testStatistics_500 *****************************");
- final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34");
- clientConfig.register(feature);
+ markActivatorDead();
- final Client client = ClientBuilder.newClient(clientConfig);
- final WebTarget webTarget = client.target("http://localhost:6969/policy/pdpx/v1/healthcheck");
+ final Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT);
+ final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
+ LOGGER.info("testStatistics_500 health report {}", report);
+ validateStatisticsReport(report, 0, 500);
+ }
- final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
+ @Test
+ public void testHttpsStatistic() throws Exception {
+ LOGGER.info("***************************** Running testHttpsStatistic *****************************");
+ final Invocation.Builder invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT);
+ final StatisticsReport report = invocationBuilder.get(StatisticsReport.class);
+ LOGGER.info("testHttpsStatistic health report {}", report);
+ validateStatisticsReport(report, 0, 200);
+ }
- if (!NetworkUtil.isTcpPortOpen("localhost", 6969, 6, 10000L)) {
- throw new IllegalStateException("Cannot connect to port 6969");
- }
+ private void updateXacmlPdpStatistics() {
+ XacmlPdpStatisticsManager stats = XacmlPdpStatisticsManager.getCurrent();
+ stats.updateTotalPoliciesCount();
+ stats.updatePermitDecisionsCount();
+ stats.updateDenyDecisionsCount();
+ stats.updateIndeterminantDecisionsCount();
+ stats.updateNotApplicableDecisionsCount();
+ }
- return invocationBuilder.get(HealthCheckReport.class);
+ private void validateStatisticsReport(final StatisticsReport report, final int count, final int code) {
+ assertEquals(code, report.getCode());
+ assertEquals(count, report.getTotalPoliciesCount());
+ assertEquals(count, report.getPermitDecisionsCount());
+ assertEquals(count, report.getDenyDecisionsCount());
+ assertEquals(count, report.getIndeterminantDecisionsCount());
+ assertEquals(count, report.getNotApplicableDecisionsCount());
}
- private void validateReport(final String name, final String url, final boolean healthy, final int code,
- final String message, final String reportString, final HealthCheckReport report) {
+ private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code,
+ final String message, final HealthCheckReport report) {
assertEquals(name, report.getName());
assertEquals(url, report.getUrl());
assertEquals(healthy, report.isHealthy());
assertEquals(code, report.getCode());
assertEquals(message, report.getMessage());
- assertEquals(reportString, report.toString());
}
}