Refactor xacml-pdp to remove various statics
[policy/xacml-pdp.git] / main / src / test / java / org / onap / policy / pdpx / main / rest / TestXacmlPdpRestServer.java
index 2170c8a..ba8f004 100644 (file)
  * ============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());
     }
 }