Refactor xacml-pdp to remove various statics
[policy/xacml-pdp.git] / main / src / test / java / org / onap / policy / pdpx / main / rest / TestDecision.java
index b81336a..5f7eb78 100644 (file)
@@ -38,17 +38,11 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.Entity;
-import javax.ws.rs.client.Invocation;
-import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
@@ -73,7 +67,9 @@ public class TestDecision {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(TestDecision.class);
 
+    private static int port;
     private static Main main;
+    private static HttpClient client;
 
     @ClassRule
     public static final TemporaryFolder appsFolder = new TemporaryFolder();
@@ -81,15 +77,19 @@ public class TestDecision {
     /**
      * BeforeClass setup environment.
      * @throws IOException Cannot create temp apps folder
+     * @throws Exception exception if service does not start
      */
     @BeforeClass
-    public static void beforeClass() throws IOException {
+    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
         //
-        Path src = Paths.get("../packages/policy-xacmlpdp-tarball/src/main/resources/apps");
+        Path src = Paths.get("src/test/resources/apps");
         File apps = appsFolder.newFolder("apps");
         Files.walk(src).forEach(source -> {
             copy(source, apps.toPath().resolve(src.relativize(source)));
@@ -98,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");
@@ -109,6 +109,16 @@ public class TestDecision {
         // Start the service
         //
         main = startXacmlPdpService(fileParams);
+        //
+        // Make sure it is running
+        //
+        if (!NetworkUtil.isTcpPortOpen("localhost", port, 20, 1000L)) {
+            throw new IllegalStateException("Cannot connect to port " + port);
+        }
+        //
+        // Create a client
+        //
+        client = getNoAuthHttpClient();
     }
 
     @AfterClass
@@ -117,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");
 
@@ -139,7 +148,9 @@ public class TestDecision {
     }
 
     @Test
-    public void testDecision_Guard() throws InterruptedException, IOException {
+    public void testDecision_Guard() throws KeyManagementException, NoSuchAlgorithmException,
+        ClassNotFoundException {
+
         LOGGER.info("Running test testDecision_Guard");
 
         DecisionRequest request = new DecisionRequest();
@@ -157,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);
@@ -167,28 +178,17 @@ public class TestDecision {
         main.shutdown();
     }
 
-    private DecisionResponse getDecision(DecisionRequest request) 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/decision");
+    private DecisionResponse getDecision(DecisionRequest request) {
 
-        final Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);
+        Entity<DecisionRequest> entityRequest = Entity.entity(request, MediaType.APPLICATION_JSON);
+        Response response = client.post("", entityRequest, Collections.emptyMap());
 
-        if (!NetworkUtil.isTcpPortOpen("localhost", 6969, 6, 10000L)) {
-            throw new IllegalStateException("Cannot connect to port 6969");
-        }
+        assertEquals(200, response.getStatus());
 
-        return invocationBuilder.post(Entity.json(request), DecisionResponse.class);
+        return HttpClient.getBody(response, DecisionResponse.class);
     }
 
-    private ErrorResponse getErrorDecision(DecisionRequest request) throws KeyManagementException,
-        NoSuchAlgorithmException, ClassNotFoundException {
-
-        HttpClient client = getNoAuthHttpClient();
+    private ErrorResponse getErrorDecision(DecisionRequest request) {
 
         Entity<DecisionRequest> entityRequest = Entity.entity(request, MediaType.APPLICATION_JSON);
         Response response = client.post("", entityRequest, Collections.emptyMap());
@@ -198,12 +198,12 @@ public class TestDecision {
         return HttpClient.getBody(response, ErrorResponse.class);
     }
 
-    private HttpClient getNoAuthHttpClient()
+    private static HttpClient getNoAuthHttpClient()
             throws KeyManagementException, NoSuchAlgorithmException, ClassNotFoundException {
         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());
     }