/*-
* ============LICENSE_START=======================================================
- * policy-endpoints
+ * ONAP
* ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
import org.onap.policy.common.capabilities.Startable;
+/**
+ * Http Client interface.
+ */
public interface HttpClient extends Startable {
- public static final HttpClientFactory factory = new IndexedHttpClientFactory();
-
- public Response get(String path);
-
- public Response get();
-
- public Response put(String path, Entity<?> entity, Map<String, Object> headers);
-
- public static <T> T getBody(Response response, Class<T> entityType) {
+ /**
+ * Factory.
+ */
+ HttpClientFactory factory = new IndexedHttpClientFactory();
+
+ /**
+ * GET request.
+ *
+ * @param path context uri path.
+ * @return response
+ */
+ Response get(String path);
+
+ /**
+ * GET request.
+ *
+ * @return response
+ */
+ Response get();
+
+ /**
+ * PUT request.
+ *
+ * @param path context uri path
+ * @param entity body
+ * @param headers headers
+ *
+ * @return response.
+ */
+ Response put(String path, Entity<?> entity, Map<String, Object> headers);
+
+ /**
+ * POST request.
+ *
+ * @param path context uri path
+ * @param entity body
+ * @param headers headers
+ *
+ * @return response.
+ */
+ Response post(String path, Entity<?> entity, Map<String, Object> headers);
+
+ /**
+ * DELETE request.
+ *
+ * @param path context uri path
+ * @param headers headers
+ *
+ * @return response.
+ */
+ Response delete(String path, Map<String, Object> headers);
+
+ /**
+ * Retrieve the body from the HTTP transaction.
+ *
+ * @param response response.
+ * @param entityType body type.
+ * @param <T> body class.
+ *
+ * @return response.
+ */
+ static <T> T getBody(Response response, Class<T> entityType) {
return response.readEntity(entityType);
}
- public String getName();
-
- public boolean isHttps();
-
- public boolean isSelfSignedCerts();
-
- public String getHostname();
-
- public int getPort();
-
- public String getBasePath();
-
- public String getUserName();
-
- public String getPassword();
-
- public String getBaseUrl();
+ /**
+ * Get the client name.
+ * @return name
+ */
+ String getName();
+
+ /**
+ * HTTPS support.
+ *
+ * @return if the client uses https
+ */
+ boolean isHttps();
+
+ /**
+ * Self-signed certificates.
+ *
+ * @return if the self-signed certificates are allowed
+ */
+ boolean isSelfSignedCerts();
+
+ /**
+ * Get the host name.
+ *
+ * @return host name
+ */
+ String getHostname();
+
+ /**
+ * Get the port.
+ *
+ * @return port
+ */
+ int getPort();
+
+ /**
+ * Get the base path.
+ *
+ * @return base path
+ */
+ String getBasePath();
+
+ /**
+ * Get the user name.
+ *
+ * @return the user name
+ */
+ String getUserName();
+
+ /**
+ * Get the password.
+ *
+ * @return the password
+ */
+ String getPassword();
+
+ /**
+ * Get the base URL.
+ *
+ * @return the base URL
+ */
+ String getBaseUrl();
}
* ============LICENSE_START=======================================================
* ONAP
* ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
* Modifications Copyright (C) 2018 Samsung Electronics Co., Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
package org.onap.policy.common.endpoints.http.server.test;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
import java.io.IOException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
-
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.onap.policy.common.endpoints.http.server.internal.JettyJerseyServer;
import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
import org.onap.policy.common.utils.network.NetworkUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class HttpClientTest {
- private static final Logger logger = LoggerFactory.getLogger(HttpClientTest.class);
-
private static final HashMap<String, String> savedValuesMap = new HashMap<>();
/**
*/
@BeforeClass
public static void setUp() throws InterruptedException, IOException {
- logger.info("-- setup() --");
-
/* echo server - http + no auth */
final HttpServletServer echoServerNoAuth =
*/
@AfterClass
public static void tearDown() {
- logger.info("-- tearDown() --");
-
HttpServletServer.factory.destroy();
HttpClient.factory.destroy();
@Test
public void testHttpGetNoAuthClient() throws Exception {
- logger.info("-- testHttpNoAuthClient() --");
-
- final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpNoAuthClient")
- .useHttps(false).allowSelfSignedCerts(false).hostname("localhost").port(6666).basePath("junit/echo")
- .userName(null).password(null).managed(true).build());
+ final HttpClient client = getNoAuthHttpClient("testHttpNoAuthClient", false,
+ 6666);
final Response response = client.get("hello");
final String body = HttpClient.getBody(response, String.class);
- assertTrue(response.getStatus() == 200);
- assertTrue(body.equals("hello"));
+ assertEquals(200, response.getStatus());
+ assertEquals("hello", body);
}
@Test
public void testHttpPutNoAuthClient() throws Exception {
- logger.info("-- testHttpNoAuthClient() --");
-
- final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpNoAuthClient")
- .useHttps(false).allowSelfSignedCerts(false).hostname("localhost").port(6666).basePath("junit/echo")
- .userName(null).password(null).managed(true).build());
+ final HttpClient client = getNoAuthHttpClient("testHttpNoAuthClient", false, 6666);
Entity<MyEntity> entity = Entity.entity(new MyEntity("myValue"), MediaType.APPLICATION_JSON);
final Response response = client.put("hello", entity, Collections.emptyMap());
final String body = HttpClient.getBody(response, String.class);
- assertTrue(response.getStatus() == 200);
- assertTrue(body.equals("hello:{myParameter=myValue}"));
+ assertEquals(200, response.getStatus());
+ assertEquals("PUT:hello:{myParameter=myValue}", body);
}
@Test
- public void testHttpGetAuthClient() throws Exception {
- logger.info("-- testHttpAuthClient() --");
+ public void testHttpPostNoAuthClient() throws Exception {
+ final HttpClient client = getNoAuthHttpClient("testHttpNoAuthClient", false,
+ 6666);
- final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient")
- .useHttps(true).allowSelfSignedCerts(true).hostname("localhost").port(6667).basePath("junit/echo")
- .userName("x").password("y").managed(true).build());
+ Entity<MyEntity> entity = Entity.entity(new MyEntity("myValue"), MediaType.APPLICATION_JSON);
+ final Response response = client.post("hello", entity, Collections.emptyMap());
+ final String body = HttpClient.getBody(response, String.class);
+
+ assertEquals(200, response.getStatus());
+ assertEquals("POST:hello:{myParameter=myValue}", body);
+ }
+
+ @Test
+ public void testHttpDeletetNoAuthClient() throws Exception {
+ final HttpClient client = getNoAuthHttpClient("testHttpNoAuthClient", false,
+ 6666);
+
+ final Response response = client.delete("hello", Collections.emptyMap());
+ final String body = HttpClient.getBody(response, String.class);
+
+ assertEquals(200, response.getStatus());
+ assertEquals("DELETE:hello", body);
+ }
+
+ @Test
+ public void testHttpGetAuthClient() throws Exception {
+ final HttpClient client = getAuthHttpClient();
final Response response = client.get("hello");
final String body = HttpClient.getBody(response, String.class);
- assertTrue(response.getStatus() == 200);
- assertTrue(body.equals("hello"));
+ assertEquals(200, response.getStatus());
+ assertEquals("hello", body);
}
@Test
public void testHttpPutAuthClient() throws Exception {
- logger.info("-- testHttpAuthClient() --");
-
- final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient")
- .useHttps(true).allowSelfSignedCerts(true).hostname("localhost").port(6667).basePath("junit/echo")
- .userName("x").password("y").managed(true).build());
+ final HttpClient client = getAuthHttpClient();
Entity<MyEntity> entity = Entity.entity(new MyEntity("myValue"), MediaType.APPLICATION_JSON);
final Response response = client.put("hello", entity, Collections.emptyMap());
final String body = HttpClient.getBody(response, String.class);
- assertTrue(response.getStatus() == 200);
- assertTrue(body.equals("hello:{myParameter=myValue}"));
+ assertEquals(200, response.getStatus());
+ assertEquals("PUT:hello:{myParameter=myValue}", body);
}
@Test
public void testHttpAuthClient401() throws Exception {
- logger.info("-- testHttpAuthClient401() --");
-
- final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient401")
- .useHttps(true).allowSelfSignedCerts(true).hostname("localhost").port(6667).basePath("junit/echo")
- .userName(null).password(null).managed(true).build());
+ final HttpClient client = getNoAuthHttpClient("testHttpAuthClient401", true,
+ 6667);
final Response response = client.get("hello");
- assertEquals(new Integer(response.getStatus()).toString(), response.getStatus(), 401);
+ assertEquals(401, response.getStatus());
}
@Test
public void testHttpAuthClientProps() throws Exception {
- logger.info("-- testHttpAuthClientProps() --");
-
final Properties httpProperties = new Properties();
httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES, "PAP,PDP");
+ PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
final List<HttpServletServer> servers = HttpServletServer.factory.build(httpProperties);
- assertTrue(servers.size() == 2);
+ assertEquals(2, servers.size());
final List<HttpClient> clients = HttpClient.factory.build(httpProperties);
- assertTrue(clients.size() == 2);
+ assertEquals(2, clients.size());
for (final HttpServletServer server : servers) {
server.waitedStart(10000);
final HttpClient clientPap = HttpClient.factory.get("PAP");
final Response response = clientPap.get();
- assertTrue(response.getStatus() == 200);
+ assertEquals(200, response.getStatus());
final HttpClient clientPdp = HttpClient.factory.get("PDP");
final Response response2 = clientPdp.get("test");
- assertTrue(response2.getStatus() == 500);
+ assertEquals(500, response2.getStatus());
+ }
+
+ private HttpClient getAuthHttpClient() throws KeyManagementException, NoSuchAlgorithmException {
+ return HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient")
+ .useHttps(true).allowSelfSignedCerts(true).hostname("localhost").port(6667).basePath("junit/echo")
+ .userName("x").password("y").managed(true).build());
}
+ private HttpClient getNoAuthHttpClient(String clientName, boolean https, int port)
+ throws KeyManagementException, NoSuchAlgorithmException {
+ return HttpClient.factory.build(BusTopicParams.builder().clientName(clientName)
+ .useHttps(https).allowSelfSignedCerts(https).hostname("localhost").port(port).basePath("junit/echo")
+ .userName(null).password(null).managed(true).build());
+ }
+
+
class MyEntity {
private String myParameter;