2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2018 Samsung Electronics Co., Ltd.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.common.endpoints.http.server.test;
24 import static org.junit.Assert.assertTrue;
26 import java.io.IOException;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Properties;
31 import javax.ws.rs.core.Response;
33 import org.junit.AfterClass;
34 import org.junit.BeforeClass;
35 import org.junit.Test;
36 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
37 import org.onap.policy.common.endpoints.http.client.HttpClient;
38 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
39 import org.onap.policy.common.endpoints.http.server.internal.JettyJerseyServer;
40 import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
41 import org.onap.policy.common.utils.network.NetworkUtil;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
45 public class HttpClientTest {
46 private static final Logger logger = LoggerFactory.getLogger(HttpClientTest.class);
48 private static final HashMap<String, String> savedValuesMap = new HashMap<>();
51 * Setup before class method.
53 * @throws InterruptedException can be interrupted
54 * @throws IOException can have an IO exception
57 public static void setUp() throws InterruptedException, IOException {
58 logger.info("-- setup() --");
60 /* echo server - http + no auth */
62 final HttpServletServer echoServerNoAuth =
63 HttpServletServer.factory.build("echo", "localhost", 6666, "/", false, true);
64 echoServerNoAuth.addServletPackage("/*", HttpClientTest.class.getPackage().getName());
65 echoServerNoAuth.waitedStart(5000);
67 if (!NetworkUtil.isTcpPortOpen("localhost", echoServerNoAuth.getPort(), 5, 10000L)) {
68 throw new IllegalStateException("cannot connect to port " + echoServerNoAuth.getPort());
71 String keyStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
72 if (keyStoreSystemProperty != null) {
73 savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, keyStoreSystemProperty);
76 String keyStorePasswordSystemProperty =
77 System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
78 if (keyStorePasswordSystemProperty != null) {
80 JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, keyStorePasswordSystemProperty);
83 String trustStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
84 if (trustStoreSystemProperty != null) {
86 .put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, trustStoreSystemProperty);
89 String trustStorePasswordSystemProperty =
90 System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
91 if (trustStorePasswordSystemProperty != null) {
93 .put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, trustStorePasswordSystemProperty);
96 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
97 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, "kstest");
99 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
100 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, "kstest");
102 /* echo server - https + basic auth */
104 final HttpServletServer echoServerAuth =
105 HttpServletServer.factory.build("echo", true, "localhost", 6667, "/", false, true);
106 echoServerAuth.setBasicAuthentication("x", "y", null);
107 echoServerAuth.addServletPackage("/*", HttpClientTest.class.getPackage().getName());
108 echoServerAuth.waitedStart(5000);
110 if (!NetworkUtil.isTcpPortOpen("localhost", echoServerAuth.getPort(), 5, 10000L)) {
111 throw new IllegalStateException("cannot connect to port " + echoServerAuth.getPort());
116 * After the class is created method.
119 public static void tearDown() {
120 logger.info("-- tearDown() --");
122 HttpServletServer.factory.destroy();
123 HttpClient.factory.destroy();
125 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME)) {
126 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME,
127 savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME));
128 savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
130 System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
133 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME)) {
134 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME,
135 savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME));
136 savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
138 System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
141 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME)) {
142 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME,
143 savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME));
144 savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
146 System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
149 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME)) {
150 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME,
151 savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME));
152 savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
154 System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
161 public void testHttpNoAuthClient() throws Exception {
162 logger.info("-- testHttpNoAuthClient() --");
164 final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpNoAuthClient")
166 .allowSelfSignedCerts(false)
167 .hostname("localhost")
168 .port(6666).basePath("junit/echo").userName(null).password(null).managed(true).build());
169 final Response response = client.get("hello");
170 final String body = HttpClient.getBody(response, String.class);
172 assertTrue(response.getStatus() == 200);
173 assertTrue(body.equals("hello"));
177 public void testHttpAuthClient() throws Exception {
178 logger.info("-- testHttpAuthClient() --");
180 final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient")
182 .allowSelfSignedCerts(true)
183 .hostname("localhost")
185 .basePath("junit/echo")
188 .managed(true).build());
190 final Response response = client.get("hello");
191 final String body = HttpClient.getBody(response, String.class);
193 assertTrue(response.getStatus() == 200);
194 assertTrue(body.equals("hello"));
198 public void testHttpAuthClient401() throws Exception {
199 logger.info("-- testHttpAuthClient401() --");
201 final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient401")
203 .allowSelfSignedCerts(true)
204 .hostname("localhost")
206 .basePath("junit/echo")
209 .managed(true).build());
210 final Response response = client.get("hello");
211 assertTrue(response.getStatus() == 401);
215 public void testHttpAuthClientProps() throws Exception {
216 logger.info("-- testHttpAuthClientProps() --");
218 final Properties httpProperties = new Properties();
220 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES, "PAP,PDP");
221 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
222 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
223 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
224 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7777");
225 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
226 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpap");
227 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
228 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
229 httpProperties.setProperty(
230 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
231 + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
232 RestMockHealthCheck.class.getName());
233 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
234 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
236 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
237 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
238 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
239 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7778");
240 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
241 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpdp");
242 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
243 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
244 httpProperties.setProperty(
245 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
246 + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
247 RestMockHealthCheck.class.getName());
248 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
249 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
251 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES, "PAP,PDP");
252 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
253 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
254 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
255 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7777");
256 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
257 + PolicyEndPointProperties.PROPERTY_HTTP_URL_SUFFIX, "pap/test");
258 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
259 + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
260 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
261 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpap");
262 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
263 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
264 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
265 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
267 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
268 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
269 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
270 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7778");
271 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
272 + PolicyEndPointProperties.PROPERTY_HTTP_URL_SUFFIX, "pdp");
273 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
274 + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
275 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
276 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpdp");
277 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
278 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
279 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
280 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
282 final List<HttpServletServer> servers = HttpServletServer.factory.build(httpProperties);
283 assertTrue(servers.size() == 2);
285 final List<HttpClient> clients = HttpClient.factory.build(httpProperties);
286 assertTrue(clients.size() == 2);
288 for (final HttpServletServer server : servers) {
289 server.waitedStart(10000);
292 final HttpClient clientPAP = HttpClient.factory.get("PAP");
293 final Response response = clientPAP.get();
294 assertTrue(response.getStatus() == 200);
296 final HttpClient clientPDP = HttpClient.factory.get("PDP");
297 final Response response2 = clientPDP.get("test");
298 assertTrue(response2.getStatus() == 500);