X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=main%2Fsrc%2Ftest%2Fjava%2Forg%2Fonap%2Fpolicy%2Fpdpx%2Fmain%2Frest%2FTestXacmlPdpRestServer.java;h=ba8f00445490d0e7bf5f776c504bb72915681b74;hb=05045cd36ad264b5d7b674155699b2cccee71165;hp=1ec649cb16bd4ef9e1ac1ce3b2940f200ee7b973;hpb=b909b14fe88c5fe8f096cf8b471a2aa799d84739;p=policy%2Fxacml-pdp.git diff --git a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpRestServer.java b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpRestServer.java index 1ec649cb..ba8f0044 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpRestServer.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpRestServer.java @@ -21,35 +21,12 @@ 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 java.lang.reflect.Constructor; -import java.lang.reflect.Modifier; -import java.security.SecureRandom; -import java.security.cert.X509Certificate; -import java.util.Properties; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -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.After; -import org.junit.BeforeClass; 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.CommonRest; import org.onap.policy.pdpx.main.rest.model.StatisticsReport; -import org.onap.policy.pdpx.main.startstop.Main; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,7 +34,7 @@ import org.slf4j.LoggerFactory; * 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"; @@ -66,196 +43,79 @@ public class TestXacmlPdpRestServer { private static final String NAME = "Policy Xacml PDP"; private static final String HEALTHCHECK_ENDPOINT = "healthcheck"; private static final String STATISTICS_ENDPOINT = "statistics"; - private static String KEYSTORE = System.getProperty("user.dir") + "/src/test/resources/ssl/policy-keystore"; - private Main main; - private XacmlPdpRestServer restServer; - - /** - * setup. - */ - @BeforeClass - public static void setUp() { - System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog"); - System.setProperty("org.eclipse.jetty.LEVEL", "OFF"); - - } - - /** - * Method for cleanup after each test. - */ - @After - public void teardown() { - try { - if (NetworkUtil.isTcpPortOpen("localhost", 6969, 1, 1000L)) { - if (main != null) { - stopXacmlPdpService(main); - } - - if (restServer != null) { - restServer.stop(); - } - } - } catch (IOException | PolicyXacmlPdpException e) { - LOGGER.error("teardown failed", e); - } catch (InterruptedException ie) { - Thread.interrupted(); - LOGGER.error("teardown failed", ie); - } - } @Test - public void testHealthCheckSuccess() throws IOException, InterruptedException { - main = startXacmlPdpService(true); - final Invocation.Builder invocationBuilder = sendHttpRequest(HEALTHCHECK_ENDPOINT); + 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, IOException { - final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false); - restServerParams.setName(CommonTestData.PDPX_GROUP_NAME); - restServer = new XacmlPdpRestServer(restServerParams); - restServer.start(); - final Invocation.Builder invocationBuilder = sendHttpRequest(HEALTHCHECK_ENDPOINT); + public void testHealthCheckFailure() throws Exception { + LOGGER.info("***************************** Running testHealthCheckFailure *****************************"); + + 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); - assertTrue(restServer.isAlive()); - assertTrue(restServer.toString().startsWith("XacmlPdpRestServer [servers=")); } @Test public void testHttpsHealthCheckSuccess() throws Exception { - main = startXacmlPdpService(false); + 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); } @Test - public void testStatistics_200() throws IOException, InterruptedException { - main = startXacmlPdpService(true); - Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT); + 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 = sendHttpRequest(STATISTICS_ENDPOINT); + invocationBuilder = sendHttpsRequest(STATISTICS_ENDPOINT); report = invocationBuilder.get(StatisticsReport.class); + LOGGER.info("testStatistics_200 health report {}", report); validateStatisticsReport(report, 1, 200); - XacmlPdpStatisticsManager.resetAllStatistics(); } @Test - public void testStatistics_500() throws IOException, InterruptedException { - final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false); - restServerParams.setName(CommonTestData.PDPX_GROUP_NAME); - restServer = new XacmlPdpRestServer(restServerParams); - restServer.start(); - final Invocation.Builder invocationBuilder = sendHttpRequest(STATISTICS_ENDPOINT); + public void testStatistics_500() throws Exception { + LOGGER.info("***************************** Running testStatistics_500 *****************************"); + + markActivatorDead(); + + 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); - XacmlPdpStatisticsManager.resetAllStatistics(); } @Test public void testHttpsStatistic() throws Exception { - main = startXacmlPdpService(false); + 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); } - @Test - public void testStatisticsConstructorIsPrivate() { - try { - final Constructor constructor = - XacmlPdpStatisticsManager.class.getDeclaredConstructor(); - assertTrue(Modifier.isPrivate(constructor.getModifiers())); - constructor.setAccessible(true); - constructor.newInstance(); - fail("Expected an InstantiationException to be thrown"); - } catch (final Exception exp) { - assertTrue(exp.getCause().toString().contains("Instantiation of the class is not allowed")); - } - } - - private Main startXacmlPdpService(final boolean http) { - final String[] xacmlPdpConfigParameters = new String[2]; - if (http) { - xacmlPdpConfigParameters[0] = "-c"; - xacmlPdpConfigParameters[1] = "parameters/XacmlPdpConfigParameters.json"; - } else { - final Properties systemProps = System.getProperties(); - systemProps.put("javax.net.ssl.keyStore", KEYSTORE); - systemProps.put("javax.net.ssl.keyStorePassword", "Pol1cy_0nap"); - System.setProperties(systemProps); - xacmlPdpConfigParameters[0] = "-c"; - xacmlPdpConfigParameters[1] = "parameters/XacmlPdpConfigParameters_Https.json"; - } - return new Main(xacmlPdpConfigParameters); - } - - private void stopXacmlPdpService(final Main main) throws PolicyXacmlPdpException { - main.shutdown(); - } - - private Invocation.Builder sendHttpRequest(final String endpoint) throws IOException, InterruptedException { - final ClientConfig clientConfig = new ClientConfig(); - - final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34"); - clientConfig.register(feature); - - final Client client = ClientBuilder.newClient(clientConfig); - final WebTarget webTarget = client.target("http://localhost:6969/policy/pdpx/v1/" + endpoint); - - final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); - - if (!NetworkUtil.isTcpPortOpen("localhost", 6969, 6, 10000L)) { - throw new IllegalStateException("cannot connect to port 6969"); - } - return invocationBuilder; - } - - private Invocation.Builder sendHttpsRequest(final String endpoint) throws Exception { - - final TrustManager[] noopTrustManager = new TrustManager[] {new X509TrustManager() { - - @Override - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void checkClientTrusted(final java.security.cert.X509Certificate[] certs, final String authType) {} - - @Override - public void checkServerTrusted(final java.security.cert.X509Certificate[] certs, final String authType) {} - }}; - - final SSLContext sc = SSLContext.getInstance("TLSv1.2"); - sc.init(null, noopTrustManager, new SecureRandom()); - final ClientBuilder clientBuilder = - ClientBuilder.newBuilder().sslContext(sc).hostnameVerifier((host, session) -> true); - final Client client = clientBuilder.build(); - final HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("healthcheck", "zb!XztG34"); - client.register(feature); - - final WebTarget webTarget = client.target("https://localhost:6969/policy/pdpx/v1/" + endpoint); - - final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); - - if (!NetworkUtil.isTcpPortOpen("localhost", 6969, 6, 10000L)) { - throw new IllegalStateException("cannot connect to port 6969"); - } - return invocationBuilder; - } - private void updateXacmlPdpStatistics() { - XacmlPdpStatisticsManager.updateTotalPoliciesCount(); - XacmlPdpStatisticsManager.updatePermitDecisionsCount(); - XacmlPdpStatisticsManager.updateDenyDecisionsCount(); - XacmlPdpStatisticsManager.updateIndeterminantDecisionsCount(); - XacmlPdpStatisticsManager.updateNotApplicableDecisionsCount(); + XacmlPdpStatisticsManager stats = XacmlPdpStatisticsManager.getCurrent(); + stats.updateTotalPoliciesCount(); + stats.updatePermitDecisionsCount(); + stats.updateDenyDecisionsCount(); + stats.updateIndeterminantDecisionsCount(); + stats.updateNotApplicableDecisionsCount(); } private void validateStatisticsReport(final StatisticsReport report, final int count, final int code) { @@ -268,7 +128,7 @@ public class TestXacmlPdpRestServer { } private void validateHealthCheckReport(final String name, final String url, final boolean healthy, final int code, - final String message, final HealthCheckReport report) { + final String message, final HealthCheckReport report) { assertEquals(name, report.getName()); assertEquals(url, report.getUrl()); assertEquals(healthy, report.isHealthy());