From 40b8d0befcd8b310a7a48e07df7d629153903cca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 11 Feb 2013 09:03:13 +0100 Subject: Better handle socket closing with loop handlers We now read from the socket to be able to detect errors or TCP close events, and buffer the data if any. Once the data receive goes over a certain limit, which defaults to 5000 bytes, we simply close the connection with an {error, overflow} reason. --- test/http_SUITE.erl | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'test/http_SUITE.erl') diff --git a/test/http_SUITE.erl b/test/http_SUITE.erl index afe62c3..209be7e 100644 --- a/test/http_SUITE.erl +++ b/test/http_SUITE.erl @@ -49,6 +49,7 @@ -export([onresponse_crash/1]). -export([onresponse_reply/1]). -export([pipeline/1]). +-export([pipeline_long_polling/1]). -export([rest_bad_accept/1]). -export([rest_created_path/1]). -export([rest_expires/1]). @@ -112,6 +113,7 @@ groups() -> nc_rand, nc_zero, pipeline, + pipeline_long_polling, rest_bad_accept, rest_created_path, rest_expires, @@ -432,6 +434,8 @@ The document has moved here. ", Tests = [ + {102, <<"GET /long_polling HTTP/1.1\r\nHost: localhost\r\n" + "Content-Length: 5000\r\n\r\n", 0:5000/unit:8 >>}, {200, ["GET / HTTP/1.0\r\nHost: localhost\r\n" "Set-Cookie: ", HugeCookie, "\r\n\r\n"]}, {200, "\r\n\r\n\r\n\r\n\r\nGET / HTTP/1.1\r\nHost: localhost\r\n\r\n"}, @@ -449,6 +453,8 @@ The document has moved {408, "GET / HTTP/1.1\r\nHost: localhost\r\n\r"}, {414, Huge}, {400, "GET / HTTP/1.1\r\n" ++ Huge}, + {500, <<"GET /long_polling HTTP/1.1\r\nHost: localhost\r\n" + "Content-Length: 100000\r\n\r\n", 0:100000/unit:8 >>}, {505, "GET / HTTP/1.2\r\nHost: localhost\r\n\r\n"}, {closed, ""}, {closed, "\r\n"}, @@ -758,6 +764,16 @@ pipeline(Config) -> {ok, 200, _, Client11} = cowboy_client:response(Client10), {error, closed} = cowboy_client:response(Client11). +pipeline_long_polling(Config) -> + Client = ?config(client, Config), + {ok, Client2} = cowboy_client:request(<<"GET">>, + build_url("/long_polling", Config), Client), + {ok, Client3} = cowboy_client:request(<<"GET">>, + build_url("/long_polling", Config), Client2), + {ok, 102, _, Client4} = cowboy_client:response(Client3), + {ok, 102, _, Client5} = cowboy_client:response(Client4), + {error, closed} = cowboy_client:response(Client5). + rest_bad_accept(Config) -> Client = ?config(client, Config), {ok, Client2} = cowboy_client:request(<<"GET">>, -- cgit v1.2.3