From f6539a9a68a6eb2c3a23906282e1b7582249f9be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Sun, 19 Nov 2017 22:04:48 +0100 Subject: Move tests from old http suite to rfc7230 suite --- test/handlers/input_crash_h.erl | 10 ---------- test/http_SUITE.erl | 2 -- test/rfc7230_SUITE.erl | 39 ++++++++++++++++++++++++++++++++------- 3 files changed, 32 insertions(+), 19 deletions(-) delete mode 100644 test/handlers/input_crash_h.erl diff --git a/test/handlers/input_crash_h.erl b/test/handlers/input_crash_h.erl deleted file mode 100644 index 8cb7cbc..0000000 --- a/test/handlers/input_crash_h.erl +++ /dev/null @@ -1,10 +0,0 @@ -%% This module crashes on request input data -%% depending on the given option. - --module(input_crash_h). - --export([init/2]). - -init(Req, content_length) -> - ct_helper_error_h:ignore(erlang, binary_to_integer, 1), - cowboy_req:parse_header(<<"content-length">>, Req). diff --git a/test/http_SUITE.erl b/test/http_SUITE.erl index a01bb5a..2b5219d 100644 --- a/test/http_SUITE.erl +++ b/test/http_SUITE.erl @@ -105,7 +105,6 @@ init_dispatch(Config) -> [{body, <<"A flameless dance does not equal a cycle">>}]}, {"/handler_errors", http_errors, []}, {"/echo/body", http_echo_body, []}, - {"/crash/content-length", input_crash_h, content_length}, {"/param_all", rest_param_all, []}, {"/bad_accept", rest_simple_resource, []}, {"/bad_content_type", rest_patch_resource, []}, @@ -181,7 +180,6 @@ The document has moved {400, "GET / HTTP/1.1\r\nHost: ninenines.eu\r\n\r\n"}, {400, "GET http://proxy/ HTTP/1.1\r\n\r\n"}, {400, "GET / HTTP/1.1\r\nHost: localhost:bad_port\r\n\r\n"}, - {400, ["POST /crash/content-length HTTP/1.1\r\nHost: localhost\r\nContent-Length: 5000,5000\r\n\r\n", Huge]}, {400, ResponsePacket}, {408, "GET / HTTP/1.1\r\n"}, {408, "GET / HTTP/1.1\r\nHost: localhost"}, diff --git a/test/rfc7230_SUITE.erl b/test/rfc7230_SUITE.erl index 5199795..d14cc38 100644 --- a/test/rfc7230_SUITE.erl +++ b/test/rfc7230_SUITE.erl @@ -764,8 +764,19 @@ limit_header_value(Config) -> %@todo %The normal procedure for parsing headers is to read each header %field into a hash table by field name until the empty line. (RFC7230 3) -% -%reject_duplicate_content_length_header(Config) -> + +reject_duplicate_content_length_header(Config) -> + doc("Requests with duplicate content-length headers must be rejected " + "with a 400 status code and the closing of the connection. (RFC7230 3.3.2)"), + #{code := 400, client := Client} = do_raw(Config, [ + "POST / HTTP/1.1\r\n" + "Host: localhost\r\n" + "Content-length: 12\r\n" + "Content-length: 12\r\n" + "\r\n" + "Hello world!"]), + {error, closed} = raw_recv(Client, 0, 1000). + %reject_duplicate_host_header(Config) -> %Requests with duplicate content-length or host headers must be rejected %with a 400 status code and the closing of the connection. (RFC7230 3.3.2) @@ -854,11 +865,25 @@ limit_header_value(Config) -> %``` %Content-Length = 1*DIGIT %``` -% -%reject_invalid_content_length(Config) -> -%A request with an invalid content-length header must be rejected -%with a 400 status code and the closing of the connection. (RFC7230 3.3.3) -% + +reject_invalid_content_length(Config) -> + doc("A request with an invalid content-length header must be rejected " + "with a 400 status code and the closing of the connection. (RFC7230 3.3.3)"), + #{code := 400, client := Client1} = do_raw(Config, [ + "POST / HTTP/1.1\r\n" + "Host: localhost\r\n" + "Content-length: 12,12\r\n" + "\r\n" + "Hello world!"]), + {error, closed} = raw_recv(Client1, 0, 1000), + #{code := 400, client := Client2} = do_raw(Config, [ + "POST / HTTP/1.1\r\n" + "Host: localhost\r\n" + "Content-length: NaN\r\n" + "\r\n" + "Hello world!"]), + {error, closed} = raw_recv(Client2, 0, 1000). + %@todo %The content-length header ranges from 0 to infinity. Requests %with a message body too large must be rejected with a 413 status -- cgit v1.2.3