You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

102 rivejä
3.5 KiB

-module(elli_middleware_tests).
-include_lib("eunit/include/eunit.hrl").
-include("elli_test.hrl").
elli_test_() ->
{setup,
fun setup/0, fun teardown/1,
[
?_test(hello_world()),
?_test(short_circuit()),
?_test(compress()),
?_test(no_callbacks())
]}.
%%
%% TESTS
%%
short_circuit() ->
URL = "http://localhost:3002/middleware/short-circuit",
Response = hackney:get(URL),
?assertMatch(<<"short circuit!">>, body(Response)).
hello_world() ->
URL = "http://localhost:3002/hello/world",
Response = hackney:get(URL),
?assertMatch(<<"Hello World!">>, body(Response)).
compress() ->
Url = "http://localhost:3002/compressed",
Headers = [{<<"Accept-Encoding">>, <<"gzip">>}],
Response = hackney:get(Url, Headers),
?assertHeadersEqual([{<<"Connection">>, <<"Keep-Alive">>},
{<<"Content-Encoding">>, <<"gzip">>},
{<<"Content-Length">>, <<"41">>}],
headers(Response)),
?assertEqual(binary:copy(<<"Hello World!">>, 86),
zlib:gunzip(body(Response))),
Response1 = hackney:get("http://localhost:3002/compressed"),
?assertHeadersEqual([{<<"Connection">>, <<"Keep-Alive">>},
{<<"Content-Length">>, <<"1032">>}],
headers(Response1)),
?assertEqual(iolist_to_binary(lists:duplicate(86, "Hello World!")),
body(Response1)),
Url2 = "http://localhost:3002/compressed-io_list",
Headers2 = [{<<"Accept-Encoding">>, <<"gzip">>}],
Response2 = hackney:get(Url2, Headers2),
?assertMatch(200, status(Response2)),
?assertHeadersEqual([{<<"Connection">>, <<"Keep-Alive">>},
{<<"Content-Encoding">>, <<"gzip">>},
{<<"Content-Length">>, <<"41">>}],
headers(Response2)),
?assertEqual(binary:copy(<<"Hello World!">>, 86),
zlib:gunzip(body(Response2))),
Response3 = hackney:request("http://localhost:3002/compressed-io_list"),
?assertMatch(200, status(Response3)),
?assertHeadersEqual([{<<"Connection">>, <<"Keep-Alive">>},
{<<"Content-Length">>, <<"1032">>}],
headers(Response3)),
?assertEqual(iolist_to_binary(lists:duplicate(86, "Hello World!")),
body(Response3)).
no_callbacks() ->
Response = hackney:get("http://localhost:3004/whatever"),
?assertMatch(404, status(Response)),
?assertMatch(<<"Not Found">>, body(Response)).
%%
%% HELPERS
%%
setup() ->
application:start(crypto),
application:start(public_key),
application:start(ssl),
{ok, _} = application:ensure_all_started(hackney),
Config = [
{mods, [
{elli_access_log, [{name, elli_syslog},
{ip, "127.0.0.1"},
{port, 514}]},
{elli_example_middleware, []},
{elli_middleware_compress, []},
{elli_example_callback, []}
]}
],
{ok, P1} = elli:start_link([{callback, elli_middleware},
{callback_args, Config},
{port, 3002}]),
unlink(P1),
{ok, P2} = elli:start_link([{callback, elli_middleware},
{callback_args, [{mods, []}]},
{port, 3004}]),
unlink(P2),
[P1, P2].
teardown(Pids) ->
[elli:stop(P) || P <- Pids].