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