aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/handlers/asterisk_h.erl2
-rw-r--r--test/rfc7230_SUITE.erl21
-rw-r--r--test/rfc7231_SUITE.erl24
3 files changed, 30 insertions, 17 deletions
diff --git a/test/handlers/asterisk_h.erl b/test/handlers/asterisk_h.erl
index 56b8bcb..563b488 100644
--- a/test/handlers/asterisk_h.erl
+++ b/test/handlers/asterisk_h.erl
@@ -7,6 +7,8 @@
init(Req, Opts) ->
echo(cowboy_req:header(<<"x-echo">>, Req), Req, Opts).
+echo(undefined, Req, Opts) ->
+ {ok, cowboy_req:reply(200, Req), Opts};
echo(What, Req, Opts) ->
F = binary_to_atom(What, latin1),
Value = case cowboy_req:F(Req) of
diff --git a/test/rfc7230_SUITE.erl b/test/rfc7230_SUITE.erl
index 9175fa9..d680d75 100644
--- a/test/rfc7230_SUITE.erl
+++ b/test/rfc7230_SUITE.erl
@@ -41,9 +41,8 @@ init_routes(_) -> [
{"/echo/:key[/:arg]", echo_h, []},
{"/length/echo/:key", echo_h, []},
{"/resp/:key[/:arg]", resp_h, []},
- {"/send_message", send_message_h, []}
-%% @todo Something is clearly wrong about routing * right now.
-%% {"*", asterisk_h, []}
+ {"/send_message", send_message_h, []},
+ {"*", asterisk_h, []}
]},
{"127.0.0.1", [{"/echo/:key", echo_h, []}]},
{"example.org", [{"/echo/:key", echo_h, []}]}
@@ -603,20 +602,12 @@ asterisk_form_reject_if_not_options(Config) ->
"\r\n"),
{error, closed} = raw_recv(Client, 0, 1000).
-asterisk_form_empty_path(Config) ->
- doc("The path is empty when using asterisk-form. (RFC7230 5.5)"),
- #{code := 200, body := <<>>} = do_raw(Config,
+asterisk_form_empty_path_query(Config) ->
+ doc("The path and query components are empty when using asterisk-form. (RFC7230 5.5)"),
+ #{code := 200, body := <<"http://localhost">>} = do_raw(Config,
"OPTIONS * HTTP/1.1\r\n"
"Host: localhost\r\n"
- "X-Echo: path\r\n"
- "\r\n").
-
-asterisk_form_empty_query(Config) ->
- doc("The query is empty when using asterisk-form. (RFC7230 5.5)"),
- #{code := 200, body := <<>>} = do_raw(Config,
- "OPTIONS * HTTP/1.1\r\n"
- "Host: localhost\r\n"
- "X-Echo: query\r\n"
+ "X-Echo: uri\r\n"
"\r\n").
%% Invalid request-target.
diff --git a/test/rfc7231_SUITE.erl b/test/rfc7231_SUITE.erl
index feb53b9..e0940ab 100644
--- a/test/rfc7231_SUITE.erl
+++ b/test/rfc7231_SUITE.erl
@@ -34,6 +34,7 @@ end_per_group(Name, _) ->
init_dispatch(_) ->
cowboy_router:compile([{"[...]", [
+ {"*", asterisk_h, []},
{"/", hello_h, []},
{"/echo/:key", echo_h, []},
{"/resp/:key[/:arg]", resp_h, []}
@@ -148,8 +149,27 @@ method_options(Config) ->
{ok, <<"OPTIONS">>} = gun:await_body(ConnPid, Ref),
ok.
-%method_options_asterisk(Config) ->
-%method_options_content_length_0(Config) ->
+method_options_asterisk(Config) ->
+ doc("The OPTIONS method is accepted with an asterisk. (RFC7231 4.3.7)"),
+ ConnPid = gun_open(Config),
+ Ref = gun:options(ConnPid, "*", [
+ {<<"accept-encoding">>, <<"gzip">>},
+ {<<"x-echo">>, <<"method">>}
+ ]),
+ {response, nofin, 200, _} = gun:await(ConnPid, Ref),
+ {ok, <<"OPTIONS">>} = gun:await_body(ConnPid, Ref),
+ ok.
+
+method_options_content_length_0(Config) ->
+ doc("The OPTIONS method must set the content-length header "
+ "to 0 when no body is returned. (RFC7231 4.3.7)"),
+ ConnPid = gun_open(Config),
+ Ref = gun:options(ConnPid, "*", [
+ {<<"accept-encoding">>, <<"gzip">>}
+ ]),
+ {response, fin, 200, Headers} = gun:await(ConnPid, Ref),
+ {_, <<"0">>} = lists:keyfind(<<"content-length">>, 1, Headers),
+ ok.
method_trace(Config) ->
doc("The TRACE method is currently not implemented. (RFC7231 4.3.8)"),