2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2020,2023 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 new GsonTestUtils().compareGson(server, HttpServerTest.class);
386 assertThatCode(() -> new GsonTestUtils().compareGson(server, HttpServerTest.class)).doesNotThrowAnyException();
390 public void testSingleServer() throws Exception {
391 logger.info("-- testSingleServer() --");
393 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
394 .build("echo", LOCALHOST, port, "/", false, true);
395 server.addServletPackage("/*", this.getClass().getPackage().getName());
396 server.addFilterClass("/*", TestFilter.class.getName());
397 server.waitedStart(5000);
399 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
400 assertFalse(HttpServletServerFactoryInstance.getServerFactory().get(port).isAaf());
402 String response = http(portUrl + JUNIT_ECHO_HELLO);
403 assertEquals(HELLO, response);
405 assertThatThrownBy(() -> http(portUrl + SWAGGER_JSON)).isInstanceOf(IOException.class);
407 response = http(portUrl + "/junit/echo/hello?block=true");
408 assertEquals("FILTERED", response);
410 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
411 assertEquals(1, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
413 System.setProperty("cadi_longitude", "0.0");
414 System.setProperty("cadi_latitude", "0.0");
415 server.setAafAuthentication("/*");
416 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAaf());
418 HttpServletServerFactoryInstance.getServerFactory().destroy(port);
419 assertEquals(0, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
423 public void testMultipleServers() throws Exception {
424 logger.info("-- testMultipleServers() --");
426 HttpServletServer server1 = HttpServletServerFactoryInstance.getServerFactory()
427 .build("echo-1", false, LOCALHOST, port, false, "/", true, true);
428 server1.addServletPackage("/*", this.getClass().getPackage().getName());
429 server1.waitedStart(5000);
431 int port2 = port + 1;
433 HttpServletServer server2 = HttpServletServerFactoryInstance.getServerFactory()
434 .build("echo-2", LOCALHOST, port2, "/", false, true);
435 server2.addServletPackage("/*", this.getClass().getPackage().getName());
436 server2.waitedStart(5000);
438 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
439 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port2).isAlive());
441 String response = http(portUrl + JUNIT_ECHO_HELLO);
442 assertEquals(HELLO, response);
444 response = http(portUrl + SWAGGER_JSON);
445 assertNotNull(response);
447 response = http(LOCALHOST_PREFIX + port2 + JUNIT_ECHO_HELLO);
448 assertEquals(HELLO, response);
450 assertThatThrownBy(() -> http(LOCALHOST_PREFIX + port2 + SWAGGER_JSON)).isInstanceOf(IOException.class);
452 HttpServletServerFactoryInstance.getServerFactory().destroy();
453 assertTrue(HttpServletServerFactoryInstance.getServerFactory().inventory().isEmpty());
457 public void testMultiServicePackage() throws Exception {
458 logger.info("-- testMultiServicePackage() --");
460 String randomName = UUID.randomUUID().toString();
462 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
463 .build(randomName, LOCALHOST, port, "/", false, true);
464 server.addServletPackage("/*", this.getClass().getPackage().getName());
465 server.waitedStart(5000);
467 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
469 String response = http(portUrl + JUNIT_ECHO_HELLO);
470 assertEquals(HELLO, response);
472 response = http(portUrl + "/junit/endpoints/http/servers");
473 assertTrue(response.contains(randomName));
475 HttpServletServerFactoryInstance.getServerFactory().destroy();
476 assertTrue(HttpServletServerFactoryInstance.getServerFactory().inventory().isEmpty());
480 public void testServiceClass() throws Exception {
481 logger.info("-- testServiceClass() --");
482 String randomName = UUID.randomUUID().toString();
484 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
485 .build(randomName, LOCALHOST, port, "/", false, true);
486 server.addServletClass("/*", RestEchoService.class.getName());
487 server.waitedStart(5000);
489 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
491 String response = http(portUrl + JUNIT_ECHO_HELLO);
492 assertEquals(HELLO, response);
494 HttpServletServerFactoryInstance.getServerFactory().destroy();
495 assertTrue(HttpServletServerFactoryInstance.getServerFactory().inventory().isEmpty());
499 public void testMultiServiceClass() throws Exception {
500 logger.info("-- testMultiServiceClass() --");
502 String randomName = UUID.randomUUID().toString();
504 HttpServletServer server = HttpServletServerFactoryInstance.getServerFactory()
505 .build(randomName, LOCALHOST, port, "/", false, true);
506 server.addServletClass("/*", RestEchoService.class.getName());
507 server.addServletClass("/*", RestEndpoints.class.getName());
508 server.waitedStart(5000);
510 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
512 String response = http(portUrl + JUNIT_ECHO_HELLO);
513 assertEquals(HELLO, response);
515 response = http(portUrl + "/junit/endpoints/http/servers");
516 assertTrue(response.contains(randomName));
518 HttpServletServerFactoryInstance.getServerFactory().destroy();
519 assertTrue(HttpServletServerFactoryInstance.getServerFactory().inventory().isEmpty());
523 public void testSingleStaticResourceServer() throws Exception {
524 logger.info("-- testSingleStaticResourceServer() --");
526 HttpServletServer staticServer = HttpServletServerFactoryInstance.getServerFactory()
527 .buildStaticResourceServer("Static Resources Server", false, LOCALHOST, port, false, "/", true);
528 Throwable thrown = catchThrowable(() -> staticServer.addServletResource("/*", null));
529 assertThat(thrown).isInstanceOf(IllegalArgumentException.class)
530 .hasMessageContaining("No resourceBase provided");
532 staticServer.addServletResource(null,
533 HttpServerTest.class.getClassLoader().getResource("webapps/root").toExternalForm());
535 thrown = catchThrowable(() -> staticServer.addServletClass("/*", RestEchoService.class.getName()));
536 assertThat(thrown).isInstanceOf(UnsupportedOperationException.class)
537 .hasMessageContaining("is not supported on this type of jetty server");
539 thrown = catchThrowable(() -> staticServer.addServletPackage("/api/*", this.getClass().getPackage().getName()));
540 assertThat(thrown).isInstanceOf(UnsupportedOperationException.class)
541 .hasMessageContaining("is not supported on this type of jetty server");
543 thrown = catchThrowable(() -> staticServer.setSerializationProvider(MyGsonProvider.class.getName()));
544 assertThat(thrown).isInstanceOf(UnsupportedOperationException.class)
545 .hasMessageContaining("is not supported on this type of jetty server");
547 staticServer.waitedStart(5000);
549 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
550 assertEquals(1, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
552 String response = http(portUrl);
553 assertThat(response).contains("Test Jetty Static Resources Root");
555 HttpServletServerFactoryInstance.getServerFactory().destroy(port);
556 assertEquals(0, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
560 public void testMultiStaticResourceServer() throws Exception {
561 logger.info("-- testMultiStaticResourceServer() --");
563 HttpServletServer staticResourceServer = HttpServletServerFactoryInstance.getServerFactory()
564 .buildStaticResourceServer("Static Resources Server", false, LOCALHOST, port, false, "/", true);
565 staticResourceServer.addServletResource("/root/*",
566 HttpServerTest.class.getClassLoader().getResource("webapps/root").toExternalForm());
567 staticResourceServer.addServletResource("/alt-root/*",
568 HttpServerTest.class.getClassLoader().getResource("webapps/alt-root").toExternalForm());
569 staticResourceServer.waitedStart(5000);
571 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
572 assertEquals(1, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
574 String response = http(portUrl + "/root/");
575 assertThat(response).contains("Test Jetty Static Resources Root");
577 response = http(portUrl + "/alt-root/");
578 assertThat(response).contains("Test Jetty Static Resources Alt-Root");
580 HttpServletServerFactoryInstance.getServerFactory().destroy(port);
581 assertEquals(0, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
585 public void testMultiTypesServer() throws Exception {
586 logger.info("-- testMultiTypesServer() --");
588 HttpServletServer staticResourceServer = HttpServletServerFactoryInstance.getServerFactory()
589 .buildStaticResourceServer("Static Resources Server", false, LOCALHOST, port, false, "/", true);
590 staticResourceServer.addServletResource("/root/*",
591 HttpServerTest.class.getClassLoader().getResource("webapps/root").toExternalForm());
592 staticResourceServer.waitedStart(5000);
594 int port2 = port + 1;
595 HttpServletServer jerseyServer =
596 HttpServletServerFactoryInstance.getServerFactory().build("echo", LOCALHOST, port2, "/", false, true);
597 jerseyServer.addServletPackage("/api/*", this.getClass().getPackage().getName());
599 Throwable thrown = catchThrowable(() -> jerseyServer.addServletResource("/root/*",
600 HttpServerTest.class.getClassLoader().getResource("webapps/root").toExternalForm()));
601 assertThat(thrown).isInstanceOf(UnsupportedOperationException.class)
602 .hasMessageContaining("is not supported on this type of jetty server");
604 jerseyServer.waitedStart(5000);
606 assertTrue(HttpServletServerFactoryInstance.getServerFactory().get(port).isAlive());
607 assertEquals(2, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
609 String response = http(portUrl + "/root/");
610 assertThat(response).contains("Test Jetty Static Resources Root");
612 response = http(LOCALHOST_PREFIX + port2 + "/api" + JUNIT_ECHO_HELLO);
613 assertEquals(HELLO, response);
615 HttpServletServerFactoryInstance.getServerFactory().destroy();
616 assertEquals(0, HttpServletServerFactoryInstance.getServerFactory().inventory().size());
620 * performs an http request.
622 * @throws MalformedURLException make sure URL is good
623 * @throws IOException thrown is IO exception occurs
624 * @throws InterruptedException thrown if thread interrupted occurs
626 private String http(String urlString)
627 throws IOException, InterruptedException {
628 URL url = new URL(urlString);
629 if (!NetworkUtil.isTcpPortOpen(url.getHost(), url.getPort(), 25, 100)) {
630 throw new IllegalStateException("port never opened: " + url);
632 return response(url.openConnection());
636 * Performs an http request.
638 * @throws MalformedURLException make sure URL is good
639 * @throws IOException thrown is IO exception occurs
640 * @throws InterruptedException thrown if thread interrupted occurs
642 private String http(String urlString, String mediaType, String post)
643 throws IOException, InterruptedException {
644 URL url = new URL(urlString);
645 if (!NetworkUtil.isTcpPortOpen(url.getHost(), url.getPort(), 25, 100)) {
646 throw new IllegalStateException("port never opened: " + url);
648 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
649 conn.setRequestMethod("POST");
650 conn.setDoOutput(true);
651 conn.setRequestProperty("Content-Type", mediaType);
652 conn.setRequestProperty("Accept", mediaType);
653 IOUtils.write(post, conn.getOutputStream(), StandardCharsets.UTF_8);
654 return response(conn);
658 * gets http response.
660 * @param conn connection from which to read
662 * @throws IOException if an I/O error occurs
664 private String response(URLConnection conn) throws IOException {
665 try (InputStream inpstr = conn.getInputStream()) {
666 return String.join("", IOUtils.readLines(inpstr, StandardCharsets.UTF_8));