-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].
|