diff options
author | jh7358 <jh7358@att.com> | 2019-04-25 20:15:28 -0400 |
---|---|---|
committer | Jim Hahn <jrh3@att.com> | 2019-04-26 17:16:27 -0400 |
commit | 05045cd36ad264b5d7b674155699b2cccee71165 (patch) | |
tree | f2651c9b19f09f7944339ab07fc706bc5d6cd8f3 /main/src/test | |
parent | c7beb45738209526a4794b3b72f0f0bd025d1a82 (diff) |
Refactor xacml-pdp to remove various statics3.0.2-ONAP
Refactored xacml-pdp to eliminate a number of static fields.
Modified junit tests to allocate new ports for each test.
Also modified XacmlPolicyUtilsTest to convert path names to match
the file system so that the junit will work in OSs other than
linux.
Replaced logback.xml with a copy of the one from PAP to resolve
some issues.
Don't print entire message when discarding, as each PDP receives
messages for ALL PDPs.
Remove shutdown class from Main - just invoke this.shutdown()
directly.
Added additional comments to CommonRest. Also modified port test
parameters.
Change-Id: Id8bf7216cdcb59a1a2cb4cb957fa44f640315cfe
Issue-ID: POLICY-1645
Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'main/src/test')
-rw-r--r-- | main/src/test/java/org/onap/policy/pdpx/main/CommonRest.java | 216 | ||||
-rw-r--r-- | main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java | 17 | ||||
-rw-r--r-- | main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpRestServer.java | 251 | ||||
-rw-r--r-- | main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpStatistics.java | 123 | ||||
-rw-r--r-- | main/src/test/java/org/onap/policy/pdpx/main/startstop/TestMain.java | 72 | ||||
-rw-r--r-- | main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java | 40 | ||||
-rw-r--r-- | main/src/test/resources/parameters/XacmlPdpConfigParameters_Std.json (renamed from main/src/test/resources/parameters/XacmlPdpConfigParameters_Https.json) | 2 |
7 files changed, 356 insertions, 365 deletions
diff --git a/main/src/test/java/org/onap/policy/pdpx/main/CommonRest.java b/main/src/test/java/org/onap/policy/pdpx/main/CommonRest.java new file mode 100644 index 00000000..0c84419f --- /dev/null +++ b/main/src/test/java/org/onap/policy/pdpx/main/CommonRest.java @@ -0,0 +1,216 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.pdpx.main; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.SecureRandom; +import javax.net.ssl.SSLContext; +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.authentication.HttpAuthenticationFeature; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.onap.policy.common.utils.network.NetworkUtil; +import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.pdpx.main.rest.XacmlPdpStatisticsManager; +import org.onap.policy.pdpx.main.startstop.Main; +import org.onap.policy.pdpx.main.startstop.XacmlPdpActivator; +import org.powermock.reflect.Whitebox; + +/** + * Common base class for REST service tests. + */ +public class CommonRest { + private static final String KEYSTORE = System.getProperty("user.dir") + "/src/test/resources/ssl/policy-keystore"; + + /** + * Full path to the config file. + */ + public static final String CONFIG_FILE; + + /** + * Path corresponding to {@link #CONFIG_FILE}. + */ + private static final Path CONFIG_PATH; + + /** + * Contents read from the "standard" config file, which still contains ${xxx} + * place-holders. + */ + private static final String STD_CONFIG; + + /** + * Port that was last allocated for the server. + */ + protected static int port; + + /** + * "Main" that was last started. + */ + private static Main main; + + /** + * Records the "alive" state of the activator while it's temporarily updated by + * various junit tests. The {@link #tearDown()} method restores the "alive" state back + * to this value. + */ + private boolean activatorWasAlive; + + static { + try { + File file = new File(ResourceUtils.getFilePath4Resource("parameters/XacmlPdpConfigParameters_Std.json")); + STD_CONFIG = new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8); + + file = new File(file.getParentFile(), "Test_XacmlPdpConfigParameters.json"); + file.deleteOnExit(); + + CONFIG_FILE = file.getAbsolutePath(); + CONFIG_PATH = new File(CONFIG_FILE).toPath(); + + } catch (IOException e) { + throw new ExceptionInInitializerError(e); + } + } + + /** + * Configures system properties and creates a JSON config file. + * + * @throws Exception if an error occurs + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + System.setProperty("javax.net.ssl.keyStore", KEYSTORE); + System.setProperty("javax.net.ssl.keyStorePassword", "Pol1cy_0nap"); + + System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog"); + System.setProperty("org.eclipse.jetty.LEVEL", "OFF"); + + writeJsonConfig(); + + final String[] xacmlPdpConfigParameters = {"-c", CommonRest.CONFIG_FILE, "-p", "parameters/topic.properties"}; + main = new Main(xacmlPdpConfigParameters); + + if (!NetworkUtil.isTcpPortOpen("localhost", port, 20, 1000L)) { + throw new IllegalStateException("server is not listening on port " + port); + } + } + + /** + * Stops the "Main". + */ + @AfterClass + public static void tearDownAfterClass() { + stopMain(); + } + + /** + * Resets the statistics. + */ + @Before + public void setUp() { + activatorWasAlive = XacmlPdpActivator.getCurrent().isAlive(); + XacmlPdpStatisticsManager.getCurrent().resetAllStatistics(); + } + + /** + * Restores the "alive" status of the activator. + */ + @After + public void tearDown() { + markActivator(activatorWasAlive); + } + + /** + * Stops the "main". + */ + protected static void stopMain() { + main.shutdown(); + } + + /** + * Writes a JSON config file, substituting an allocated port number for occurrences of + * "${port}". + * + * @return the allocated server port + * @throws IOException if the config file cannot be created + */ + public static int writeJsonConfig() throws IOException { + port = NetworkUtil.allocPort(); + + String config = STD_CONFIG.replace("${port}", String.valueOf(port)); + Files.write(CONFIG_PATH, config.getBytes(StandardCharsets.UTF_8)); + + return port; + } + + /** + * Sends an HTTPS request to an endpoint of the PDP's REST API. + * + * @param endpoint target endpoint + * @return a request builder + * @throws Exception if an error occurs + */ + protected Invocation.Builder sendHttpsRequest(final String endpoint) throws Exception { + // always trust the certificate + final SSLContext sc = SSLContext.getInstance("TLSv1.2"); + sc.init(null, NetworkUtil.getAlwaysTrustingManager(), new SecureRandom()); + + // always trust the host name + 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:" + port + "/policy/pdpx/v1/" + endpoint); + + return webTarget.request(MediaType.APPLICATION_JSON); + } + + /** + * Mark the activator as dead, but leave its REST server running. + */ + protected void markActivatorDead() { + markActivator(false); + } + + /** + * Changes the internal "alive" status of the activator to a new value. + * + * @param newAlive the new "alive" status + */ + private void markActivator(boolean newAlive) { + Object manager = Whitebox.getInternalState(XacmlPdpActivator.getCurrent(), "serviceManager"); + Whitebox.setInternalState(manager, "running", newAlive); + } +} diff --git a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java index 3a1e98b1..5f7eb78c 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestDecision.java @@ -67,6 +67,7 @@ public class TestDecision { private static final Logger LOGGER = LoggerFactory.getLogger(TestDecision.class); + private static int port; private static Main main; private static HttpClient client; @@ -82,6 +83,9 @@ public class TestDecision { public static void beforeClass() throws Exception { System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog"); System.setProperty("org.eclipse.jetty.LEVEL", "OFF"); + + port = NetworkUtil.allocPort(); + // // Copy test directory over of the application directories // @@ -94,7 +98,7 @@ public class TestDecision { // Get the parameters file correct. // RestServerParameters rest = new RestServerParameters(new RestServerBuilder() - .setHost("0.0.0.0").setPort(6969).setUserName("healthcheck").setPassword("zb!XztG34")); + .setHost("0.0.0.0").setPort(port).setUserName("healthcheck").setPassword("zb!XztG34")); XacmlPdpParameterGroup params = new XacmlPdpParameterGroup("XacmlPdpGroup", rest, apps.getAbsolutePath()); final Gson gson = new GsonBuilder().create(); File fileParams = appsFolder.newFile("params.json"); @@ -108,8 +112,8 @@ public class TestDecision { // // Make sure it is running // - if (!NetworkUtil.isTcpPortOpen("localhost", 6969, 20, 1000L)) { - throw new IllegalStateException("Cannot connect to port 6969"); + if (!NetworkUtil.isTcpPortOpen("localhost", port, 20, 1000L)) { + throw new IllegalStateException("Cannot connect to port " + port); } // // Create a client @@ -123,8 +127,7 @@ public class TestDecision { } @Test - public void testDecision_UnsupportedAction() throws KeyManagementException, NoSuchAlgorithmException, - ClassNotFoundException { + public void testDecision_UnsupportedAction() throws Exception { LOGGER.info("Running test testDecision_UnsupportedAction"); @@ -165,7 +168,7 @@ public class TestDecision { assertThat(response.getStatus()).isEqualTo("Permit"); } - private static Main startXacmlPdpService(File params) { + private static Main startXacmlPdpService(File params) throws PolicyXacmlPdpException { final String[] XacmlPdpConfigParameters = {"-c", params.getAbsolutePath(), "-p", "parameters/topic.properties"}; return new Main(XacmlPdpConfigParameters); @@ -200,7 +203,7 @@ public class TestDecision { return HttpClient.factory.build(BusTopicParams.builder() .clientName("testDecisionClient") .serializationProvider(GsonMessageBodyHandler.class.getName()) - .useHttps(false).allowSelfSignedCerts(false).hostname("localhost").port(6969) + .useHttps(false).allowSelfSignedCerts(false).hostname("localhost").port(port) .basePath("policy/pdpx/v1/decision") .userName("healthcheck").password("zb!XztG34").managed(true).build()); } 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 f9f2abf3..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,41 +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.File; -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.ClassRule; -import org.junit.FixMethodOrder; import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.junit.runners.MethodSorters; -import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClientException; 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; @@ -63,8 +34,7 @@ import org.slf4j.LoggerFactory; * Class to perform unit test of {@link XacmlPdpRestServer}. * */ -@FixMethodOrder(MethodSorters.NAME_ASCENDING) -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"; @@ -73,224 +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; - private static File applicationPath; - - @ClassRule - public static final TemporaryFolder applicationFolder = new TemporaryFolder(); - - /** - * setup. - * - * @throws IOException exception if cannot create temporary folder - */ - @BeforeClass - public static void setUp() throws IOException { - System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog"); - System.setProperty("org.eclipse.jetty.LEVEL", "OFF"); - applicationPath = applicationFolder.newFolder(); - } - - /** - * Method for cleanup after each test. - */ - @After - public void teardown() { - try { - if (NetworkUtil.isTcpPortOpen("localhost", 6969, 1, 1000L)) { - if (main != null) { - stopXacmlPdpService(main); - main = null; - } - - if (restServer != null) { - restServer.stop(); - restServer = null; - } - } - } catch (IOException | PolicyXacmlPdpException e) { - LOGGER.error("teardown failed", e); - } catch (InterruptedException ie) { - Thread.interrupted(); - LOGGER.error("teardown failed", ie); - } - } @Test - public void test1HealthCheckSuccess() throws IOException, InterruptedException, TopicSinkClientException { - LOGGER.info("***************************** Running test1HealthCheckSuccess *****************************"); - 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 test7HealthCheckFailure() throws InterruptedException, IOException { - LOGGER.info("***************************** Running test7HealthCheckFailure *****************************"); - final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false); - restServerParams.setName(CommonTestData.PDPX_GROUP_NAME); - restServer = new XacmlPdpRestServer(restServerParams, applicationPath.getAbsolutePath()); - 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("test7HealthCheckFailure health report {}", report); + 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 test2HttpsHealthCheckSuccess() throws Exception { - LOGGER.info("**************************** Running test2HttpsHealthCheckSuccess ****************************"); - main = startXacmlPdpService(false); + 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("test2HttpsHealthCheckSuccess health report {}", report); + LOGGER.info("testHttpsHealthCheckSuccess health report {}", report); validateHealthCheckReport(NAME, SELF, true, 200, ALIVE, report); } @Test - public void test4Statistics_200() throws IOException, InterruptedException, TopicSinkClientException { - LOGGER.info("***************************** Running test4Statistics_200 *****************************"); - XacmlPdpStatisticsManager.resetAllStatistics(); - 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("test4Statistics_200 health report {}", report); + 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("test4Statistics_200 health report {}", report); + LOGGER.info("testStatistics_200 health report {}", report); validateStatisticsReport(report, 1, 200); - XacmlPdpStatisticsManager.resetAllStatistics(); } @Test - public void test5Statistics_500() throws IOException, InterruptedException { - LOGGER.info("***************************** Running test5Statistics_500 *****************************"); - final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false); - restServerParams.setName(CommonTestData.PDPX_GROUP_NAME); - restServer = new XacmlPdpRestServer(restServerParams, applicationPath.getAbsolutePath()); - 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("test5Statistics_500 health report {}", report); + LOGGER.info("testStatistics_500 health report {}", report); validateStatisticsReport(report, 0, 500); - XacmlPdpStatisticsManager.resetAllStatistics(); } @Test - public void test6HttpsStatistic() throws Exception { - LOGGER.info("***************************** Running test6HttpsStatistic *****************************"); - main = startXacmlPdpService(false); + 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("test6HttpsStatistic health report {}", report); + LOGGER.info("testHttpsStatistic health report {}", report); validateStatisticsReport(report, 0, 200); } - @Test - public void test3StatisticsConstructorIsPrivate() { - LOGGER.info("************************* Running test3StatisticsConstructorIsPrivate *************************"); - try { - final Constructor<XacmlPdpStatisticsManager> 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) throws TopicSinkClientException { - final String[] xacmlPdpConfigParameters = new String[4]; - if (http) { - xacmlPdpConfigParameters[0] = "-c"; - xacmlPdpConfigParameters[1] = "parameters/XacmlPdpConfigParameters.json"; - xacmlPdpConfigParameters[2] = "-p"; - xacmlPdpConfigParameters[3] = "parameters/topic.properties"; - } 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"; - xacmlPdpConfigParameters[2] = "-p"; - xacmlPdpConfigParameters[3] = "parameters/topic.properties"; - } - 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, 20, 1000L)) { - 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) { @@ -303,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()); diff --git a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpStatistics.java b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpStatistics.java index 6a762924..250f21e6 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpStatistics.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/rest/TestXacmlPdpStatistics.java @@ -21,31 +21,11 @@ package org.onap.policy.pdpx.main.rest; -import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import java.io.File; -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.BeforeClass; -import org.junit.ClassRule; import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClientException; -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.rest.XacmlPdpStatisticsManager; +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; @@ -53,101 +33,42 @@ import org.slf4j.LoggerFactory; * Class to perform unit test of {@link XacmlPdpRestController}. * */ -public class TestXacmlPdpStatistics { +public class TestXacmlPdpStatistics extends CommonRest { private static final Logger LOGGER = LoggerFactory.getLogger(TestXacmlPdpStatistics.class); - private static File applicationPath; - - @ClassRule - public static final TemporaryFolder applicationFolder = new TemporaryFolder(); - - /** - * Turn off some debugging and create temporary folder for applications. - * - * @throws IOException If temporary folder fails - */ - @BeforeClass - public static void beforeClass() throws IOException { - System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog"); - System.setProperty("org.eclipse.jetty.LEVEL", "OFF"); - applicationPath = applicationFolder.newFolder(); - } @Test - public void testXacmlPdpStatistics_200() throws PolicyXacmlPdpException, InterruptedException { - try { - LOGGER.info("*************************** Running testXacmlPdpStatistics_200 ***************************"); - final Main main = startXacmlPdpService(); - StatisticsReport report = getXacmlPdpStatistics(); - validateReport(report, 0, 200); - assertThat(report.getTotalPolicyTypesCount()).isGreaterThan(0); - updateXacmlPdpStatistics(); - report = getXacmlPdpStatistics(); - validateReport(report, 1, 200); - stopXacmlPdpService(main); - XacmlPdpStatisticsManager.resetAllStatistics(); - } catch (final Exception e) { - LOGGER.error("testApiStatistics_200 failed", e); - fail("Test should not throw an exception"); - } + public void testXacmlPdpStatistics_200() throws Exception { + LOGGER.info("*************************** Running testXacmlPdpStatistics_200 ***************************"); + StatisticsReport report = getXacmlPdpStatistics(); + validateReport(report, 0, 200); + updateXacmlPdpStatistics(); + report = getXacmlPdpStatistics(); + validateReport(report, 1, 200); } @Test - public void testXacmlPdpStatistics_500() throws InterruptedException { + public void testXacmlPdpStatistics_500() throws Exception { LOGGER.info("***************************** Running testXacmlPdpStatistics_500 *****************************"); - final RestServerParameters restServerParams = new CommonTestData().getRestServerParameters(false); - restServerParams.setName(CommonTestData.PDPX_GROUP_NAME); - final XacmlPdpRestServer restServer = new XacmlPdpRestServer(restServerParams, - applicationPath.getAbsolutePath()); - try { - restServer.start(); - final StatisticsReport report = getXacmlPdpStatistics(); - validateReport(report, 0, 500); - restServer.shutdown(); - XacmlPdpStatisticsManager.resetAllStatistics(); - } catch (final Exception e) { - LOGGER.error("testApiStatistics_500 failed", e); - fail("Test should not throw an exception"); - } - } - - - private Main startXacmlPdpService() throws TopicSinkClientException { - final String[] XacmlPdpConfigParameters = {"-c", "parameters/XacmlPdpConfigParameters.json", "-p", - "parameters/topic.properties"}; - return new Main(XacmlPdpConfigParameters); - } + markActivatorDead(); - private void stopXacmlPdpService(final Main main) throws PolicyXacmlPdpException { - main.shutdown(); + final StatisticsReport report = getXacmlPdpStatistics(); + validateReport(report, 0, 500); } - private StatisticsReport getXacmlPdpStatistics() throws InterruptedException, IOException { - - 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/statistics"); - - final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); - - if (!NetworkUtil.isTcpPortOpen("localhost", 6969, 20, 1000L)) { - throw new IllegalStateException("Cannot connect to port 6969"); - } - - return invocationBuilder.get(StatisticsReport.class); + private StatisticsReport getXacmlPdpStatistics() throws Exception { + return sendHttpsRequest("statistics").get(StatisticsReport.class); } 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 validateReport(final StatisticsReport report, final int count, final int code) { diff --git a/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestMain.java b/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestMain.java index 80ee95f6..e8448ab2 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestMain.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestMain.java @@ -20,70 +20,84 @@ package org.onap.policy.pdpx.main.startstop; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import org.junit.After; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClientException; +import org.onap.policy.pdpx.main.CommonRest; import org.onap.policy.pdpx.main.PolicyXacmlPdpException; -import org.onap.policy.pdpx.main.parameters.CommonTestData; /** * Class to perform unit test of Main. * */ -public class TestMain { +public class TestMain extends CommonRest { + + private Main main; /** - * setup. + * Sets up properties and configuration. + * @throws Exception if an error occurs */ @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"); + public static void setUpBeforeClass() throws Exception { + CommonRest.setUpBeforeClass(); + + // don't want the common "main" running + CommonRest.stopMain(); + } + + @Before + public void setUp() { + main = null; + } + /** + * Shuts "main" down. + */ + @After + public void tearDown() { + if (main != null) { + main.shutdown(); + } } @Test - public void testMain() throws PolicyXacmlPdpException, TopicSinkClientException { - final String[] xacmlPdpConfigParameters = {"-c", "parameters/XacmlPdpConfigParameters.json"}; - final Main main = new Main(xacmlPdpConfigParameters); - assertTrue(main.getParameters().isValid()); - assertEquals(CommonTestData.PDPX_GROUP_NAME, main.getParameters().getName()); + public void testMain() throws PolicyXacmlPdpException { + final String[] xacmlPdpConfigParameters = {"-c", CONFIG_FILE, "-p", "parameters/topic.properties"}; + main = new Main(xacmlPdpConfigParameters); main.shutdown(); + main = null; } @Test - public void testMain_NoArguments() throws PolicyXacmlPdpException, TopicSinkClientException { + public void testMain_NoArguments() { final String[] xacmlPdpConfigParameters = {}; - final Main main = new Main(xacmlPdpConfigParameters); - assertNull(main.getParameters()); - main.shutdown(); + assertThatThrownBy(() -> new Main(xacmlPdpConfigParameters)).isInstanceOf(PolicyXacmlPdpException.class) + .hasMessage("policy xacml pdp configuration file was not specified as an argument"); } @Test - public void testMain_InvalidArguments() throws TopicSinkClientException { + public void testMain_InvalidArguments() { final String[] xacmlPdpConfigParameters = {"parameters/XacmlPdpConfigParameters.json"}; - final Main main = new Main(xacmlPdpConfigParameters); - assertNull(main.getParameters()); + assertThatThrownBy(() -> new Main(xacmlPdpConfigParameters)).isInstanceOf(PolicyXacmlPdpException.class) + .hasMessage("too many command line arguments specified : [parameters/XacmlPdpConfigParameters.json]"); } @Test - public void testMain_Help() throws TopicSinkClientException { + public void testMain_Help() throws PolicyXacmlPdpException { final String[] xacmlPdpConfigParameters = {"-h"}; - final Main main = new Main(xacmlPdpConfigParameters); - final String message = "-h,--help outputs the usage of this command"; - Assert.assertTrue(main.getArgumentMessage().contains(message)); + Assert.assertTrue(new Main(xacmlPdpConfigParameters).getArgumentMessage().contains("-h,--help")); } @Test - public void testMain_InvalidParameters() throws TopicSinkClientException { + public void testMain_InvalidParameters() { final String[] xacmlPdpConfigParameters = {"-c", "parameters/XacmlPdpConfigParameters_InvalidName.json"}; - final Main main = new Main(xacmlPdpConfigParameters); - assertNull(main.getParameters()); + assertThatThrownBy(() -> new Main(xacmlPdpConfigParameters)).isInstanceOf(PolicyXacmlPdpException.class) + .hasMessageContaining("validation error"); } } diff --git a/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java b/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java index 5930dd5e..b60f4589 100644 --- a/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java +++ b/main/src/test/java/org/onap/policy/pdpx/main/startstop/TestXacmlPdpActivator.java @@ -26,13 +26,12 @@ import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import java.io.FileInputStream; -import java.net.UnknownHostException; import java.util.Properties; - import org.junit.After; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClientException; +import org.onap.policy.pdpx.main.CommonRest; import org.onap.policy.pdpx.main.PolicyXacmlPdpException; import org.onap.policy.pdpx.main.parameters.CommonTestData; import org.onap.policy.pdpx.main.parameters.XacmlPdpParameterGroup; @@ -43,30 +42,44 @@ import org.onap.policy.pdpx.main.parameters.XacmlPdpParameterHandler; * Class to perform unit test of XacmlPdpActivator. * */ -public class TestXacmlPdpActivator { - private static XacmlPdpActivator activator = null; +public class TestXacmlPdpActivator extends CommonRest { + private static XacmlPdpParameterGroup parGroup; + private static Properties props; + + private XacmlPdpActivator activator = null; /** - * Setup the tests. + * Loads properties. */ @BeforeClass - public static void setup() throws Exception { + public static void setUpBeforeClass() throws Exception { + CommonRest.setUpBeforeClass(); + final String[] xacmlPdpConfigParameters = - {"-c", "parameters/XacmlPdpConfigParameters.json", "-p", "parameters/topic.properties"}; + {"-c", CommonRest.CONFIG_FILE, "-p", "parameters/topic.properties"}; final XacmlPdpCommandLineArguments arguments = new XacmlPdpCommandLineArguments(xacmlPdpConfigParameters); - final XacmlPdpParameterGroup parGroup = new XacmlPdpParameterHandler().getParameters(arguments); + parGroup = new XacmlPdpParameterHandler().getParameters(arguments); - Properties props = new Properties(); + props = new Properties(); String propFile = arguments.getFullPropertyFilePath(); try (FileInputStream stream = new FileInputStream(propFile)) { props.load(stream); } + // don't want the common "main" running + CommonRest.stopMain(); + } + + /** + * Creates the activator. + */ + @Before + public void setUp() { activator = new XacmlPdpActivator(parGroup, props); } @Test - public void testXacmlPdpActivator() throws PolicyXacmlPdpException, TopicSinkClientException, UnknownHostException { + public void testXacmlPdpActivator() throws Exception { assertFalse(activator.isAlive()); activator.start(); assertTrue(activator.isAlive()); @@ -77,14 +90,13 @@ public class TestXacmlPdpActivator { @Test public void testGetCurrent_testSetCurrent() { + XacmlPdpActivator.setCurrent(activator); assertSame(activator, XacmlPdpActivator.getCurrent()); } @Test public void testTerminate() throws Exception { - if (!activator.isAlive()) { - activator.start(); - } + activator.start(); activator.stop(); assertFalse(activator.isAlive()); } diff --git a/main/src/test/resources/parameters/XacmlPdpConfigParameters_Https.json b/main/src/test/resources/parameters/XacmlPdpConfigParameters_Std.json index ae5e1cbd..5b6586a3 100644 --- a/main/src/test/resources/parameters/XacmlPdpConfigParameters_Https.json +++ b/main/src/test/resources/parameters/XacmlPdpConfigParameters_Std.json @@ -2,7 +2,7 @@ "name":"XacmlPdpGroup", "restServerParameters":{ "host":"0.0.0.0", - "port":6969, + "port":${port}, "userName":"healthcheck", "password":"zb!XztG34", "https":true |