diff options
Diffstat (limited to 'test/rfc7230_SUITE.erl')
-rw-r--r-- | test/rfc7230_SUITE.erl | 66 |
1 files changed, 63 insertions, 3 deletions
diff --git a/test/rfc7230_SUITE.erl b/test/rfc7230_SUITE.erl index 3e06d6c..6887d27 100644 --- a/test/rfc7230_SUITE.erl +++ b/test/rfc7230_SUITE.erl @@ -1745,9 +1745,55 @@ no_body_in_head_response(Config) -> %no_body_in_100_response(Config) -> %no_body_in_101_response(Config) -> %no_body_in_102_response(Config) -> -%no_body_in_204_response(Config) -> -%no_body_in_304_response(Config) -> -%1xx, 204 and 304 responses never include a message body. (RFC7230 3.3) +%1xx responses never include a message body. (RFC7230 3.3) + +no_body_in_204_response(Config) -> + doc("204 responses never include a message body. (RFC7230 3.3)"), + Client = raw_open(Config), + ok = raw_send(Client, [ + "GET /resp/reply2/204 HTTP/1.1\r\n" + "Host: localhost\r\n" + "\r\n"]), + {_, 204, _, Rest} = cow_http:parse_status_line(raw_recv_head(Client)), + {_, <<>>} = cow_http:parse_headers(Rest), + {error, timeout} = raw_recv(Client, 1, 1000), + ok. + +no_body_in_204_response_stream(Config) -> + doc("204 responses never include a message body. (RFC7230 3.3)"), + Client = raw_open(Config), + ok = raw_send(Client, [ + "GET /resp/stream_reply2/204 HTTP/1.1\r\n" + "Host: localhost\r\n" + "\r\n"]), + {_, 204, _, Rest} = cow_http:parse_status_line(raw_recv_head(Client)), + {_, <<>>} = cow_http:parse_headers(Rest), + {error, timeout} = raw_recv(Client, 1, 1000), + ok. + +no_body_in_304_response(Config) -> + doc("304 responses never include a message body. (RFC7230 3.3)"), + Client = raw_open(Config), + ok = raw_send(Client, [ + "GET /resp/reply2/304 HTTP/1.1\r\n" + "Host: localhost\r\n" + "\r\n"]), + {_, 304, _, Rest} = cow_http:parse_status_line(raw_recv_head(Client)), + {_, <<>>} = cow_http:parse_headers(Rest), + {error, timeout} = raw_recv(Client, 1, 1000), + ok. + +no_body_in_304_response_stream(Config) -> + doc("304 responses never include a message body. (RFC7230 3.3)"), + Client = raw_open(Config), + ok = raw_send(Client, [ + "GET /resp/stream_reply2/304 HTTP/1.1\r\n" + "Host: localhost\r\n" + "\r\n"]), + {_, 304, _, Rest} = cow_http:parse_status_line(raw_recv_head(Client)), + {_, <<>>} = cow_http:parse_headers(Rest), + {error, timeout} = raw_recv(Client, 1, 1000), + ok. same_content_length_as_get_in_head_response(Config) -> doc("Responses to HEAD requests can include a content-length header. " @@ -1802,6 +1848,20 @@ no_content_length_in_204_response(Config) -> false = lists:keyfind(<<"content-length">>, 1, Headers), ok. +no_content_length_in_empty_304_response(Config) -> + doc("304 responses should not include a content-length header, " + "unless it matches the resource's and was therefore set " + "explicitly by the user. (RFC7230 3.3.1, RFC7230 3.3.2)"), + Client = raw_open(Config), + ok = raw_send(Client, [ + "GET /resp/reply3/304 HTTP/1.1\r\n" + "Host: localhost\r\n" + "\r\n"]), + {_, 304, _, Rest} = cow_http:parse_status_line(raw_recv_head(Client)), + {Headers, <<>>} = cow_http:parse_headers(Rest), + false = lists:keyfind(<<"content-length">>, 1, Headers), + ok. + %%% @todo CONNECT no_content_length_in_2xx_response_to_connect_request(Config) -> %no_transfer_encoding_in_100_response(Config) -> %no_transfer_encoding_in_101_response(Config) -> |