@Test(expected = IOException.class) public void shouldCloseSocketAfterCloseConnectionRequest() throws IOException, InterruptedException { String requestBody = RequestBuilder.defaultBuilder() .get("/example/Index") .withHost(HOST + ":" + PORT) .withCloseConnection() .toString(); OutputStream out = null; try { Socket socket = getSocket(); out = socket.getOutputStream(); out.write(requestBody.getBytes()); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); while (in.readLine() != null) { // Simulate reading } } catch (IOException e) { fail("The test failed too early due IOException" + e.getMessage()); } int i = 0; while (i++ < 10) { // The following code will cause error on a closed socket Thread.sleep(100); out.write("X" .getBytes()); out.flush(); } }
@Test public void shouldPrintHeadersFirstWhenWritingToOutputStream() throws IOException { String requestBody = RequestBuilder.defaultBuilder() .get("/example/Streaming") .withCloseConnection() .toString(); Socket socket = getSocket(); OutputStream out = socket.getOutputStream(); out.write(requestBody.getBytes()); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line; int numberOfLinesRead = 0; while ((line = in.readLine()) != null) { if (++numberOfLinesRead == 1) { assertThat(line, startsWith("HTTP/1.1 200")); } } if (numberOfLinesRead == 0) { fail("No server response was read"); } socket.close(); } }
@Test public void shouldHangSilentlyOnClosingSocket() throws IOException { String requestBody = RequestBuilder.defaultBuilder() .get("/43524938257493852435/SOMEUNKNOWNURL.html") .withCloseConnection() .toString(); Socket socket = getSocket(); OutputStream out = socket.getOutputStream(); out.write(requestBody.getBytes()); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line; int numberOfLinesRead = 0; while ((line = in.readLine()) != null) { if (++numberOfLinesRead == 1) { assertThat(line, startsWith("HTTP/1.1 404")); socket.close(); break; } } if (numberOfLinesRead == 0) { fail("No server response was read"); } }
@Test public void shouldReturn403ForbiddenOnBlockedByFilter() throws IOException { RequestBuilder requestBuilder = RequestBuilder.defaultBuilder() .get("/example/secured/ForbiddenByFilter") .withCloseConnection(); assertResponsesWithHttpCode(requestBuilder, 403); }
@Test public void shouldReturn403ForbiddenOnIllegalPath() throws IOException { RequestBuilder requestBuilder = RequestBuilder.defaultBuilder() .get("../../../index.html") .withCloseConnection(); assertResponsesWithHttpCode(requestBuilder, 403); }
@Test public void shouldReturn400OnMalformedStatus() throws IOException { RequestBuilder requestBuilder = RequestBuilder.defaultBuilder() .get(null) .withCloseConnection(); assertResponsesWithHttpCode(requestBuilder, 400); }
@Test public void shouldReturn414StatusTooLong() throws IOException { RequestBuilder requestBuilder = RequestBuilder.defaultBuilder() .get(getTooLongUri(2047)) .withCloseConnection() .withProtocol("HTTTTTTTTTTTTTP/4.4"); assertResponsesWithHttpCode(requestBuilder, 414); }
@Test public void shouldReturn505HTTPVersionNotSupported() throws IOException { RequestBuilder requestBuilder = RequestBuilder.defaultBuilder() .get("SomeUrl.html") .withHost(HOST + ":" + PORT) .withProtocol("HTTP/9.0") .withCloseConnection(); assertResponsesWithHttpCode(requestBuilder, 505); }