2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2020 Nordix Foundation.
7 * Modifications Copyright (C) 2021 Bell Canada. All rights reserved.
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.policy.common.endpoints.http.server.test;
25 import static org.assertj.core.api.Assertions.assertThat;
26 import static org.assertj.core.api.Assertions.assertThatCode;
27 import static org.assertj.core.api.Assertions.assertThatThrownBy;
28 import static org.assertj.core.api.Assertions.catchThrowable;
29 import static org.junit.Assert.assertEquals;
30 import static org.junit.Assert.assertFalse;
31 import static org.junit.Assert.assertNotNull;
32 import static org.junit.Assert.assertTrue;
34 import com.google.gson.Gson;
35 import io.prometheus.client.exporter.MetricsServlet;
36 import java.io.IOException;
37 import java.io.InputStream;
38 import java.net.HttpURLConnection;
39 import java.net.MalformedURLException;
41 import java.net.URLConnection;
42 import java.nio.charset.StandardCharsets;
43 import java.util.UUID;
44 import org.apache.commons.io.IOUtils;
45 import org.junit.AfterClass;
46 import org.junit.Before;
47 import org.junit.Test;
48 import org.onap.policy.common.endpoints.http.server.HttpServletServer;
49 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
50 import org.onap.policy.common.endpoints.http.server.YamlMessageBodyHandler;
51 import org.onap.policy.common.utils.coder.StandardYamlCoder;
52 import org.onap.policy.common.utils.gson.GsonTestUtils;
53 import org.onap.policy.common.utils.network.NetworkUtil;
54 import org.slf4j.Logger;
55 import org.slf4j.LoggerFactory;
58 * HttpServletServer JUNIT tests.
60 public class HttpServerTest {
61 private static final String JVM_MEMORY_BYTES_USED = "jvm_memory_bytes_used";
62 private static final String METRICS_URI = "/metrics";
63 private static final String PROMETHEUS = "prometheus";
64 private static final String LOCALHOST = "localhost";
65 private static final String JSON_MEDIA = "application/json";
66 private static final String YAML_MEDIA = YamlMessageBodyHandler.APPLICATION_YAML;
67 private static final String SWAGGER_JSON = "/swagger.json";
68 private static final String JUNIT_ECHO_HELLO = "/junit/echo/hello";
69 private static final String JUNIT_ECHO_FULL_REQUEST = "/junit/echo/full/request";
70 private static final String SOME_TEXT = "some text";
71 private static final String HELLO = "hello";
76 private static Logger logger = LoggerFactory.getLogger(HttpServerTest.class);
78 private static final String LOCALHOST_PREFIX = "http://localhost:";
80 private static final Gson gson = new Gson();
83 * Server port. Incremented by 10 with each test.
85 private static int port = 5608;
87 private String portUrl;
90 * Increments the port number, clears the servers, and resets the providers.
95 portUrl = LOCALHOST_PREFIX + port;
97 HttpServletServerFactoryInstance.getServerFactory().destroy();
99 MyGsonProvider.resetSome();
100 MyYamlProvider.resetSome();
103 private static void incrementPort() {
108 * To delete temporary properties cadi_longitude,and cadi_latitude.
111 public static void tearDownAfterClass() {
112 HttpServletServerFactoryInstance.getServerFactory().destroy();
113 System.clearProperty("cadi_longitude");
114 System.clearProperty("cadi_latitude");
118 public void testDefaultPackageServer() throws Exception {
119 logger.info("-- testDefaultPackageServer() --");
121 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
122 .build("echo", LOCALHOST, port, "/", false, true);
123 server.addServletPackage("/*", this.getClass().getPackage().getName());
124 server.addFilterClass("/*", TestFilter.class.getName());
125 server.waitedStart(5000);
127 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
129 RestEchoReqResp request = new RestEchoReqResp();
130 request.setRequestId(100);
131 request.setText(SOME_TEXT);
132 String reqText = gson.toJson(request);
134 String response = http(portUrl + JUNIT_ECHO_FULL_REQUEST, JSON_MEDIA, reqText);
135 assertEquals(reqText, response);
139 public void testGsonPackageServer() throws Exception {
140 logger.info("-- testGsonPackageServer() --");
142 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
143 .build("echo", LOCALHOST, port, "/", false, true);
145 server.setSerializationProvider(MyGsonProvider.class.getName());
146 server.addServletPackage("/*", this.getClass().getPackage().getName());
147 server.addFilterClass("/*", TestFilter.class.getName());
148 server.waitedStart(5000);
150 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
152 RestEchoReqResp request = new RestEchoReqResp();
153 request.setRequestId(100);
154 request.setText(SOME_TEXT);
155 String reqText = gson.toJson(request);
157 String response = http(portUrl + JUNIT_ECHO_FULL_REQUEST, JSON_MEDIA, reqText);
158 assertEquals(reqText, response);
160 assertTrue(MyGsonProvider.hasReadSome());
161 assertTrue(MyGsonProvider.hasWrittenSome());
163 assertFalse(MyYamlProvider.hasReadSome());
164 assertFalse(MyYamlProvider.hasWrittenSome());
168 public void testYamlPackageServer() throws Exception {
169 logger.info("-- testYamlPackageServer() --");
171 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
172 .build("echo", LOCALHOST, port, "/", false, true);
174 server.setSerializationProvider(MyYamlProvider.class.getName());
175 server.addServletPackage("/*", this.getClass().getPackage().getName());
176 server.addFilterClass("/*", TestFilter.class.getName());
177 server.waitedStart(5000);
179 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
181 RestEchoReqResp request = new RestEchoReqResp();
182 request.setRequestId(100);
183 request.setText(SOME_TEXT);
184 String reqText = new StandardYamlCoder().encode(request);
186 String response = http(portUrl + JUNIT_ECHO_FULL_REQUEST, YAML_MEDIA, reqText);
188 // response reader strips newlines, so we should, too, before comparing
189 assertEquals(reqText.replace("\n", ""), response);
191 assertTrue(MyYamlProvider.hasReadSome());
192 assertTrue(MyYamlProvider.hasWrittenSome());
194 assertFalse(MyGsonProvider.hasReadSome());
195 assertFalse(MyGsonProvider.hasWrittenSome());
199 public void testDefaultClassServer() throws Exception {
200 logger.info("-- testDefaultClassServer() --");
202 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
203 .build("echo", LOCALHOST, port, "/", false, true);
204 server.addServletClass("/*", RestEchoService.class.getName());
205 server.addFilterClass("/*", TestFilter.class.getName());
206 server.waitedStart(5000);
208 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
210 RestEchoReqResp request = new RestEchoReqResp();
211 request.setRequestId(100);
212 request.setText(SOME_TEXT);
213 String reqText = gson.toJson(request);
215 String response = http(portUrl + JUNIT_ECHO_FULL_REQUEST, JSON_MEDIA, reqText);
216 assertEquals(reqText, response);
220 * This test checks a server from a plain java servlet (note it uses prometheus as the sample server).
223 public void testStdServletServer() throws Exception {
224 logger.info("-- testStdServletServer() --");
226 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
227 .build(PROMETHEUS, LOCALHOST, port, "/", false, true);
229 server.addStdServletClass("/prom-generic-servlet/metrics", MetricsServlet.class.getName());
230 server.waitedStart(5000);
232 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
233 assertTrue(server.isPrometheus());
235 String response = http(portUrl + "/prom-generic-servlet/metrics");
236 assertThat(response).contains(JVM_MEMORY_BYTES_USED);
240 * This test explicitly creates a prometheus server.
243 public void testExplicitPrometheusServer() throws Exception {
244 logger.info("-- testPrometheusServer() --");
246 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
247 .build(PROMETHEUS, LOCALHOST, port, "/", false, true);
248 server.setPrometheus(METRICS_URI);
249 server.waitedStart(5000);
251 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
252 assertTrue(server.isPrometheus());
254 String response = http(portUrl + METRICS_URI);
255 assertThat(response).contains(JVM_MEMORY_BYTES_USED);
259 * This test is an all-in-one for a single server: prometheus, jax-rs, servlet, swagger, and filters.
262 public void testPrometheusJaxRsFilterSwaggerServer() throws Exception {
263 logger.info("-- testPrometheusServer() --");
265 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
266 .build(PROMETHEUS, LOCALHOST, port, "/", true, true);
268 server.addServletClass("/*", RestEchoService.class.getName());
269 server.addFilterClass("/*", TestFilter.class.getName());
270 server.setPrometheus(METRICS_URI);
272 server.waitedStart(5000);
274 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
275 assertTrue(server.isPrometheus());
277 String response = http(portUrl + METRICS_URI);
278 assertThat(response).contains(JVM_MEMORY_BYTES_USED);
280 RestEchoReqResp request = new RestEchoReqResp();
281 request.setRequestId(100);
282 request.setText(SOME_TEXT);
283 String reqText = gson.toJson(request);
285 response = http(portUrl + JUNIT_ECHO_FULL_REQUEST, JSON_MEDIA, reqText);
286 assertEquals(reqText, response);
288 response = http(portUrl + SWAGGER_JSON);
289 assertThat(response).contains("Swagger Server");
293 public void testJacksonClassServer() throws Exception {
294 logger.info("-- testJacksonClassServer() --");
296 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
297 .build("echo", LOCALHOST, port, "/", false, true);
298 server.addServletClass("/*", RestEchoService.class.getName());
299 server.addFilterClass("/*", TestFilter.class.getName());
300 server.waitedStart(5000);
302 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
304 RestEchoReqResp request = new RestEchoReqResp();
305 request.setRequestId(100);
306 request.setText(SOME_TEXT);
307 String reqText = gson.toJson(request);
309 String response = http(portUrl + JUNIT_ECHO_FULL_REQUEST, JSON_MEDIA, reqText);
310 assertEquals(reqText, response);
312 assertFalse(MyGsonProvider.hasReadSome());
313 assertFalse(MyGsonProvider.hasWrittenSome());
315 assertFalse(MyYamlProvider.hasReadSome());
316 assertFalse(MyYamlProvider.hasWrittenSome());
320 public void testGsonClassServer() throws Exception {
321 logger.info("-- testGsonClassServer() --");
323 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
324 .build("echo", LOCALHOST, port, "/", false, true);
325 server.setSerializationProvider(MyGsonProvider.class.getName());
326 server.addServletClass("/*", RestEchoService.class.getName());
327 server.addFilterClass("/*", TestFilter.class.getName());
328 server.waitedStart(5000);
330 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
332 RestEchoReqResp request = new RestEchoReqResp();
333 request.setRequestId(100);
334 request.setText(SOME_TEXT);
335 String reqText = gson.toJson(request);
337 String response = http(portUrl + JUNIT_ECHO_FULL_REQUEST, JSON_MEDIA, reqText);
338 assertEquals(reqText, response);
340 assertTrue(MyGsonProvider.hasReadSome());
341 assertTrue(MyGsonProvider.hasWrittenSome());
343 assertFalse(MyYamlProvider.hasReadSome());
344 assertFalse(MyYamlProvider.hasWrittenSome());
348 public void testYamlClassServer() throws Exception {
349 logger.info("-- testYamlClassServer() --");
351 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
352 .build("echo", LOCALHOST, port, "/", false, true);
353 server.setSerializationProvider(MyYamlProvider.class.getName());
354 server.addServletClass("/*", RestEchoService.class.getName());
355 server.addFilterClass("/*", TestFilter.class.getName());
356 server.waitedStart(5000);
358 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
360 RestEchoReqResp request = new RestEchoReqResp();
361 request.setRequestId(100);
362 request.setText(SOME_TEXT);
363 String reqText = new StandardYamlCoder().encode(request);
365 String response = http(portUrl + JUNIT_ECHO_FULL_REQUEST, YAML_MEDIA, reqText);
367 // response reader strips newlines, so we should, too, before comparing
368 assertEquals(reqText.replace("\n", ""), response);
370 assertTrue(MyYamlProvider.hasReadSome());
371 assertTrue(MyYamlProvider.hasWrittenSome());
373 assertFalse(MyGsonProvider.hasReadSome());
374 assertFalse(MyGsonProvider.hasWrittenSome());
378 public void testSerialize() {
379 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
380 .build("echo", LOCALHOST, port, "/", false, true);
381 server.addServletPackage("/*", this.getClass().getPackage().getName());
382 server.addFilterClass("/*", TestFilter.class.getName());
384 // ensure we can serialize the server
385 assertThatCode(() -> new GsonTestUtils().compareGson(server, HttpServerTest.class)).doesNotThrowAnyException();
389 public void testSingleServer() throws Exception {
390 logger.info("-- testSingleServer() --");
392 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
393 .build("echo", LOCALHOST, port, "/", false, true);
394 server.addServletPackage("/*", this.getClass().getPackage().getName());
395 server.addFilterClass("/*", TestFilter.class.getName());
396 server.waitedStart(5000);
398 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
399 assertFalse(HttpServletServerFactoryInstance.getServerFactory().get(port).isAaf());
401 String response = http(portUrl + JUNIT_ECHO_HELLO);
402 assertEquals(HELLO, response);
404 assertThatThrownBy(() -> http(portUrl + SWAGGER_JSON)).isInstanceOf(IOException.class);
406 response = http(portUrl + "/junit/echo/hello?block=true");
407 assertEquals("FILTERED", response);
409 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
410 assertEquals(1, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
412 System.setProperty("cadi_longitude", "0.0");
413 System.setProperty("cadi_latitude", "0.0");
414 server.setAafAuthentication("/*");
415 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAaf());
417 HttpServletServerFactoryInstance.getServerFactory().destroy(port);
418 assertEquals(0, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
422 public void testMultipleServers() throws Exception {
423 logger.info("-- testMultipleServers() --");
425 HttpServletServer server1 = HttpServletServerFactoryInstance.getServerFactory()
426 .build("echo-1", false, LOCALHOST, port, "/", true, true);
427 server1.addServletPackage("/*", this.getClass().getPackage().getName());
428 server1.waitedStart(5000);
430 int port2 = port + 1;
432 HttpServletServer server2 = HttpServletServerFactoryInstance.getServerFactory()
433 .build("echo-2", LOCALHOST, port2, "/", false, true);
434 server2.addServletPackage("/*", this.getClass().getPackage().getName());
435 server2.waitedStart(5000);
437 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
438 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port2).isAlive());
440 String response = http(portUrl + JUNIT_ECHO_HELLO);
441 assertEquals(HELLO, response);
443 response = http(portUrl + SWAGGER_JSON);
444 assertNotNull(response);
446 response = http(LOCALHOST_PREFIX + port2 + JUNIT_ECHO_HELLO);
447 assertEquals(HELLO, response);
449 assertThatThrownBy(() -> http(LOCALHOST_PREFIX + port2 + SWAGGER_JSON)).isInstanceOf(IOException.class);
451 HttpServletServerFactoryInstance.getServerFactory().destroy();
452 assertTrue(HttpServletServerFactoryInstance.getServerFactory().inventory().isEmpty());
456 public void testMultiServicePackage() throws Exception {
457 logger.info("-- testMultiServicePackage() --");
459 String randomName = UUID.randomUUID().toString();
461 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
462 .build(randomName, LOCALHOST, port, "/", false, true);
463 server.addServletPackage("/*", this.getClass().getPackage().getName());
464 server.waitedStart(5000);
466 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
468 String response = http(portUrl + JUNIT_ECHO_HELLO);
469 assertEquals(HELLO, response);
471 response = http(portUrl + "/junit/endpoints/http/servers");
472 assertTrue(response.contains(randomName));
474 HttpServletServerFactoryInstance.getServerFactory().destroy();
475 assertTrue(HttpServletServerFactoryInstance.getServerFactory().inventory().isEmpty());
479 public void testServiceClass() throws Exception {
480 logger.info("-- testServiceClass() --");
481 String randomName = UUID.randomUUID().toString();
483 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
484 .build(randomName, LOCALHOST, port, "/", false, true);
485 server.addServletClass("/*", RestEchoService.class.getName());
486 server.waitedStart(5000);
488 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
490 String response = http(portUrl + JUNIT_ECHO_HELLO);
491 assertEquals(HELLO, response);
493 HttpServletServerFactoryInstance.getServerFactory().destroy();
494 assertTrue(HttpServletServerFactoryInstance.getServerFactory().inventory().isEmpty());
498 public void testMultiServiceClass() throws Exception {
499 logger.info("-- testMultiServiceClass() --");
501 String randomName = UUID.randomUUID().toString();
503 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
504 .build(randomName, LOCALHOST, port, "/", false, true);
505 server.addServletClass("/*", RestEchoService.class.getName());
506 server.addServletClass("/*", RestEndpoints.class.getName());
507 server.waitedStart(5000);
509 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
511 String response = http(portUrl + JUNIT_ECHO_HELLO);
512 assertEquals(HELLO, response);
514 response = http(portUrl + "/junit/endpoints/http/servers");
515 assertTrue(response.contains(randomName));
517 HttpServletServerFactoryInstance.getServerFactory().destroy();
518 assertTrue(HttpServletServerFactoryInstance.getServerFactory().inventory().isEmpty());
522 public void testSingleStaticResourceServer() throws Exception {
523 logger.info("-- testSingleStaticResourceServer() --");
525 HttpServletServer staticServer = HttpServletServerFactoryInstance.getServerFactory()
526 .buildStaticResourceServer("Static Resources Server", false, LOCALHOST, port, "/", true);
527 Throwable thrown = catchThrowable(() -> staticServer.addServletResource("/*", null));
528 assertThat(thrown).isInstanceOf(IllegalArgumentException.class)
529 .hasMessageContaining("No resourceBase provided");
531 staticServer.addServletResource(null,
532 HttpServerTest.class.getClassLoader().getResource("webapps/root").toExternalForm());
534 thrown = catchThrowable(() -> staticServer.addServletClass("/*", RestEchoService.class.getName()));
535 assertThat(thrown).isInstanceOf(UnsupportedOperationException.class)
536 .hasMessageContaining("is not supported on this type of jetty server");
538 thrown = catchThrowable(() -> staticServer.addServletPackage("/api/*", this.getClass().getPackage().getName()));
539 assertThat(thrown).isInstanceOf(UnsupportedOperationException.class)
540 .hasMessageContaining("is not supported on this type of jetty server");
542 thrown = catchThrowable(() -> staticServer.setSerializationProvider(MyGsonProvider.class.getName()));
543 assertThat(thrown).isInstanceOf(UnsupportedOperationException.class)
544 .hasMessageContaining("is not supported on this type of jetty server");
546 staticServer.waitedStart(5000);
548 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
549 assertEquals(1, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
551 String response = http(portUrl);
552 assertThat(response).contains("Test Jetty Static Resources Root");
554 HttpServletServerFactoryInstance.getServerFactory().destroy(port);
555 assertEquals(0, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
559 public void testMultiStaticResourceServer() throws Exception {
560 logger.info("-- testMultiStaticResourceServer() --");
562 HttpServletServer staticResourceServer = HttpServletServerFactoryInstance.getServerFactory()
563 .buildStaticResourceServer("Static Resources Server", false, LOCALHOST, port, "/", true);
564 staticResourceServer.addServletResource("/root/*",
565 HttpServerTest.class.getClassLoader().getResource("webapps/root").toExternalForm());
566 staticResourceServer.addServletResource("/alt-root/*",
567 HttpServerTest.class.getClassLoader().getResource("webapps/alt-root").toExternalForm());
568 staticResourceServer.waitedStart(5000);
570 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
571 assertEquals(1, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
573 String response = http(portUrl + "/root/");
574 assertThat(response).contains("Test Jetty Static Resources Root");
576 response = http(portUrl + "/alt-root/");
577 assertThat(response).contains("Test Jetty Static Resources Alt-Root");
579 HttpServletServerFactoryInstance.getServerFactory().destroy(port);
580 assertEquals(0, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
584 public void testMultiTypesServer() throws Exception {
585 logger.info("-- testMultiTypesServer() --");
587 HttpServletServer staticResourceServer = HttpServletServerFactoryInstance.getServerFactory()
588 .buildStaticResourceServer("Static Resources Server", false, LOCALHOST, port, "/", true);
589 staticResourceServer.addServletResource("/root/*",
590 HttpServerTest.class.getClassLoader().getResource("webapps/root").toExternalForm());
591 staticResourceServer.waitedStart(5000);
593 int port2 = port + 1;
594 HttpServletServer jerseyServer =
595 HttpServletServerFactoryInstance.getServerFactory().build("echo", LOCALHOST, port2, "/", false, true);
596 jerseyServer.addServletPackage("/api/*", this.getClass().getPackage().getName());
598 Throwable thrown = catchThrowable(() -> jerseyServer.addServletResource("/root/*",
599 HttpServerTest.class.getClassLoader().getResource("webapps/root").toExternalForm()));
600 assertThat(thrown).isInstanceOf(UnsupportedOperationException.class)
601 .hasMessageContaining("is not supported on this type of jetty server");
603 jerseyServer.waitedStart(5000);
605 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
606 assertEquals(2, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
608 String response = http(portUrl + "/root/");
609 assertThat(response).contains("Test Jetty Static Resources Root");
611 response = http(LOCALHOST_PREFIX + port2 + "/api" + JUNIT_ECHO_HELLO);
612 assertEquals(HELLO, response);
614 HttpServletServerFactoryInstance.getServerFactory().destroy();
615 assertEquals(0, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
619 * performs an http request.
621 * @throws MalformedURLException make sure URL is good
622 * @throws IOException thrown is IO exception occurs
623 * @throws InterruptedException thrown if thread interrupted occurs
625 private String http(String urlString)
626 throws IOException, InterruptedException {
627 URL url = new URL(urlString);
628 if (!NetworkUtil.isTcpPortOpen(url.getHost(), url.getPort(), 25, 100)) {
629 throw new IllegalStateException("port never opened: " + url);
631 return response(url.openConnection());
635 * Performs an http request.
637 * @throws MalformedURLException make sure URL is good
638 * @throws IOException thrown is IO exception occurs
639 * @throws InterruptedException thrown if thread interrupted occurs
641 private String http(String urlString, String mediaType, String post)
642 throws IOException, InterruptedException {
643 URL url = new URL(urlString);
644 if (!NetworkUtil.isTcpPortOpen(url.getHost(), url.getPort(), 25, 100)) {
645 throw new IllegalStateException("port never opened: " + url);
647 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
648 conn.setRequestMethod("POST");
649 conn.setDoOutput(true);
650 conn.setRequestProperty("Content-Type", mediaType);
651 conn.setRequestProperty("Accept", mediaType);
652 IOUtils.write(post, conn.getOutputStream(), StandardCharsets.UTF_8);
653 return response(conn);
657 * gets http response.
659 * @param conn connection from which to read
661 * @throws IOException if an I/O error occurs
663 private String response(URLConnection conn) throws IOException {
664 try (InputStream inpstr = conn.getInputStream()) {
665 return String.join("", IOUtils.readLines(inpstr, StandardCharsets.UTF_8));