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.assertEquals;
25 import static org.junit.Assert.assertTrue;
27 import java.io.IOException;
28 import java.util.Collections;
29 import java.util.HashMap;
30 import java.util.List;
31 import java.util.Properties;
33 import javax.ws.rs.client.Entity;
34 import javax.ws.rs.core.MediaType;
35 import javax.ws.rs.core.Response;
37 import org.junit.AfterClass;
38 import org.junit.BeforeClass;
39 import org.junit.Test;
40 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
41 import org.onap.policy.common.endpoints.http.client.HttpClient;
42 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
43 import org.onap.policy.common.endpoints.http.server.internal.JettyJerseyServer;
44 import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
45 import org.onap.policy.common.utils.network.NetworkUtil;
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
49 public class HttpClientTest {
50 private static final Logger logger = LoggerFactory.getLogger(HttpClientTest.class);
52 private static final HashMap<String, String> savedValuesMap = new HashMap<>();
55 * Setup before class method.
57 * @throws InterruptedException can be interrupted
58 * @throws IOException can have an IO exception
61 public static void setUp() throws InterruptedException, IOException {
62 logger.info("-- setup() --");
64 /* echo server - http + no auth */
66 final HttpServletServer echoServerNoAuth =
67 HttpServletServer.factory.build("echo", "localhost", 6666, "/", false, true);
68 echoServerNoAuth.addServletPackage("/*", HttpClientTest.class.getPackage().getName());
69 echoServerNoAuth.waitedStart(5000);
71 if (!NetworkUtil.isTcpPortOpen("localhost", echoServerNoAuth.getPort(), 5, 10000L)) {
72 throw new IllegalStateException("cannot connect to port " + echoServerNoAuth.getPort());
75 String keyStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
76 if (keyStoreSystemProperty != null) {
77 savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, keyStoreSystemProperty);
80 String keyStorePasswordSystemProperty =
81 System.getProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
82 if (keyStorePasswordSystemProperty != null) {
83 savedValuesMap.put(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME,
84 keyStorePasswordSystemProperty);
87 String trustStoreSystemProperty = System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
88 if (trustStoreSystemProperty != null) {
89 savedValuesMap.put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, trustStoreSystemProperty);
92 String trustStorePasswordSystemProperty =
93 System.getProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
94 if (trustStorePasswordSystemProperty != null) {
95 savedValuesMap.put(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME,
96 trustStorePasswordSystemProperty);
99 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
100 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME, "kstest");
102 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME, "src/test/resources/keystore-test");
103 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME, "kstest");
105 /* echo server - https + basic auth */
107 final HttpServletServer echoServerAuth =
108 HttpServletServer.factory.build("echo", true, "localhost", 6667, "/", false, true);
109 echoServerAuth.setBasicAuthentication("x", "y", null);
110 echoServerAuth.addServletPackage("/*", HttpClientTest.class.getPackage().getName());
111 echoServerAuth.addFilterClass("/*", TestFilter.class.getCanonicalName());
112 echoServerAuth.addFilterClass("/*", TestAuthorizationFilter.class.getCanonicalName());
113 echoServerAuth.addFilterClass("/*", TestAafAuthFilter.class.getCanonicalName());
114 echoServerAuth.addFilterClass("/*", TestAafGranularAuthFilter.class.getCanonicalName());
115 echoServerAuth.waitedStart(5000);
117 if (!NetworkUtil.isTcpPortOpen("localhost", echoServerAuth.getPort(), 5, 10000L)) {
118 throw new IllegalStateException("cannot connect to port " + echoServerAuth.getPort());
123 * After the class is created method.
126 public static void tearDown() {
127 logger.info("-- tearDown() --");
129 HttpServletServer.factory.destroy();
130 HttpClient.factory.destroy();
132 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME)) {
133 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME,
134 savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME));
135 savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
137 System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PROPERTY_NAME);
140 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME)) {
141 System.setProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME,
142 savedValuesMap.get(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME));
143 savedValuesMap.remove(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
145 System.clearProperty(JettyJerseyServer.SYSTEM_KEYSTORE_PASSWORD_PROPERTY_NAME);
148 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME)) {
149 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME,
150 savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME));
151 savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
153 System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PROPERTY_NAME);
156 if (savedValuesMap.containsKey(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME)) {
157 System.setProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME,
158 savedValuesMap.get(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME));
159 savedValuesMap.remove(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
161 System.clearProperty(JettyJerseyServer.SYSTEM_TRUSTSTORE_PASSWORD_PROPERTY_NAME);
168 public void testHttpGetNoAuthClient() throws Exception {
169 logger.info("-- testHttpNoAuthClient() --");
171 final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpNoAuthClient")
172 .useHttps(false).allowSelfSignedCerts(false).hostname("localhost").port(6666).basePath("junit/echo")
173 .userName(null).password(null).managed(true).build());
174 final Response response = client.get("hello");
175 final String body = HttpClient.getBody(response, String.class);
177 assertTrue(response.getStatus() == 200);
178 assertTrue(body.equals("hello"));
182 public void testHttpPutNoAuthClient() throws Exception {
183 logger.info("-- testHttpNoAuthClient() --");
185 final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpNoAuthClient")
186 .useHttps(false).allowSelfSignedCerts(false).hostname("localhost").port(6666).basePath("junit/echo")
187 .userName(null).password(null).managed(true).build());
189 Entity<MyEntity> entity = Entity.entity(new MyEntity("myValue"), MediaType.APPLICATION_JSON);
190 final Response response = client.put("hello", entity, Collections.emptyMap());
191 final String body = HttpClient.getBody(response, String.class);
193 assertTrue(response.getStatus() == 200);
194 assertTrue(body.equals("hello:{myParameter=myValue}"));
198 public void testHttpGetAuthClient() throws Exception {
199 logger.info("-- testHttpAuthClient() --");
201 final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient")
202 .useHttps(true).allowSelfSignedCerts(true).hostname("localhost").port(6667).basePath("junit/echo")
203 .userName("x").password("y").managed(true).build());
205 final Response response = client.get("hello");
206 final String body = HttpClient.getBody(response, String.class);
208 assertTrue(response.getStatus() == 200);
209 assertTrue(body.equals("hello"));
213 public void testHttpPutAuthClient() throws Exception {
214 logger.info("-- testHttpAuthClient() --");
216 final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient")
217 .useHttps(true).allowSelfSignedCerts(true).hostname("localhost").port(6667).basePath("junit/echo")
218 .userName("x").password("y").managed(true).build());
220 Entity<MyEntity> entity = Entity.entity(new MyEntity("myValue"), MediaType.APPLICATION_JSON);
221 final Response response = client.put("hello", entity, Collections.emptyMap());
222 final String body = HttpClient.getBody(response, String.class);
224 assertTrue(response.getStatus() == 200);
225 assertTrue(body.equals("hello:{myParameter=myValue}"));
229 public void testHttpAuthClient401() throws Exception {
230 logger.info("-- testHttpAuthClient401() --");
232 final HttpClient client = HttpClient.factory.build(BusTopicParams.builder().clientName("testHttpAuthClient401")
233 .useHttps(true).allowSelfSignedCerts(true).hostname("localhost").port(6667).basePath("junit/echo")
234 .userName(null).password(null).managed(true).build());
235 final Response response = client.get("hello");
236 assertEquals(new Integer(response.getStatus()).toString(), response.getStatus(), 401);
240 public void testHttpAuthClientProps() throws Exception {
241 logger.info("-- testHttpAuthClientProps() --");
243 final Properties httpProperties = new Properties();
245 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES, "PAP,PDP");
246 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
247 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
248 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
249 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7777");
250 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
251 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpap");
252 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
253 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
254 httpProperties.setProperty(
255 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
256 + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
257 RestMockHealthCheck.class.getName());
258 httpProperties.setProperty(
259 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PAP"
260 + PolicyEndPointProperties.PROPERTY_HTTP_FILTER_CLASSES_SUFFIX,
261 TestFilter.class.getName());
262 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
263 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
265 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
266 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
267 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
268 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7778");
269 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
270 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpdp");
271 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
272 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
273 httpProperties.setProperty(
274 PolicyEndPointProperties.PROPERTY_HTTP_SERVER_SERVICES + "." + "PDP"
275 + PolicyEndPointProperties.PROPERTY_HTTP_REST_CLASSES_SUFFIX,
276 RestMockHealthCheck.class.getName());
277 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
278 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
280 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES, "PAP,PDP");
281 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
282 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
283 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
284 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7777");
285 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
286 + PolicyEndPointProperties.PROPERTY_HTTP_URL_SUFFIX, "pap/test");
287 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
288 + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
289 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
290 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpap");
291 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
292 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
293 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PAP"
294 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
296 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
297 + PolicyEndPointProperties.PROPERTY_HTTP_HOST_SUFFIX, "localhost");
298 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
299 + PolicyEndPointProperties.PROPERTY_HTTP_PORT_SUFFIX, "7778");
300 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
301 + PolicyEndPointProperties.PROPERTY_HTTP_URL_SUFFIX, "pdp");
302 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
303 + PolicyEndPointProperties.PROPERTY_HTTP_HTTPS_SUFFIX, "false");
304 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
305 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_USERNAME_SUFFIX, "testpdp");
306 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
307 + PolicyEndPointProperties.PROPERTY_HTTP_AUTH_PASSWORD_SUFFIX, "alpha123");
308 httpProperties.setProperty(PolicyEndPointProperties.PROPERTY_HTTP_CLIENT_SERVICES + "." + "PDP"
309 + PolicyEndPointProperties.PROPERTY_MANAGED_SUFFIX, "true");
311 final List<HttpServletServer> servers = HttpServletServer.factory.build(httpProperties);
312 assertTrue(servers.size() == 2);
314 final List<HttpClient> clients = HttpClient.factory.build(httpProperties);
315 assertTrue(clients.size() == 2);
317 for (final HttpServletServer server : servers) {
318 server.waitedStart(10000);
321 final HttpClient clientPap = HttpClient.factory.get("PAP");
322 final Response response = clientPap.get();
323 assertTrue(response.getStatus() == 200);
325 final HttpClient clientPdp = HttpClient.factory.get("PDP");
326 final Response response2 = clientPdp.get("test");
327 assertTrue(response2.getStatus() == 500);
332 private String myParameter;
334 public MyEntity(final String myParameter) {
335 this.myParameter = myParameter;
338 public void setMyParameter(final String myParameter) {
339 this.myParameter = myParameter;
342 public String getMyParameter() {