Current section

Files

Jump to
cloudi_service_http_client test cloudi_service_http_client_SUITE.erl
Raw

test/cloudi_service_http_client_SUITE.erl

%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod:
-module(cloudi_service_http_client_SUITE).
%% CT callbacks
-export([all/0,
groups/0,
suite/0,
init_per_suite/1,
end_per_suite/1,
group/1,
init_per_group/2,
end_per_group/2,
init_per_testcase/2,
end_per_testcase/2]).
%% test callbacks
-export([t_cowboy1_client_basic_1/1,
t_cowboy2_client_basic_1/1,
t_elli_client_basic_1/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("cloudi_core/include/cloudi_logger.hrl").
-ifndef(CLOUDI_TEST_TIMEOUT).
-define(CLOUDI_TEST_TIMEOUT, 10). % seconds
-endif.
-define(SERVICE_PREFIX1, "/client/").
%%%------------------------------------------------------------------------
%%% Callback functions from CT
%%%------------------------------------------------------------------------
all() ->
[{group, inets}].%,
%{group, hackney}].
groups() ->
[{inets, [xequence],
[t_cowboy1_client_basic_1,
t_cowboy2_client_basic_1,
t_elli_client_basic_1]}].%,
%{hackney, [sequence],
% [t_cowboy1_client_basic_1,
% t_cowboy2_client_basic_1,
% t_elli_client_basic_1]}].
suite() ->
[{ct_hooks, [cth_surefire]},
{timetrap, {seconds, ?CLOUDI_TEST_TIMEOUT}}].
init_per_suite(Config) ->
ok = reltool_util:application_start(cloudi_core,
[{configuration,
config_path()}],
infinity),
Config.
end_per_suite(_Config) ->
ok = reltool_util:application_stop(cloudi_core),
ok.
group(_GroupName) ->
[].
init_per_group(GroupName, Config) ->
Client = GroupName,
{ok, ServiceIds} = cloudi_service_api:services_add([
% using proplist configuration format, not the tuple/record format
[{prefix, ?SERVICE_PREFIX1},
{module, cloudi_service_http_client},
{args,
[{client, Client},
{debug, true}]}]
], infinity),
[{service_ids, ServiceIds} | Config].
end_per_group(_GroupName, Config0) ->
{value, {_, ServiceIds}, ConfigN} = lists:keytake(service_ids, 1, Config0),
ok = cloudi_service_api:services_remove(ServiceIds, infinity),
ConfigN.
init_per_testcase(TestCase, Config0)
when TestCase =:= t_cowboy1_client_basic_1;
TestCase =:= t_cowboy2_client_basic_1;
TestCase =:= t_elli_client_basic_1 ->
ConfigN = case cloudi_string:split("_", erlang:atom_to_list(TestCase)) of
[_, "cowboy2", _, _, _] ->
[{port, 6464} | Config0];
[_, "cowboy1", _, _, _] ->
[{port, 6465} | Config0];
[_, "elli", _, _, _] ->
[{port, 6466} | Config0]
end,
ConfigN.
end_per_testcase(_TestCase, Config) ->
lists:keydelete(port, 1, Config).
%%%------------------------------------------------------------------------
%%% test cases
%%%------------------------------------------------------------------------
t_cowboy1_client_basic_1(Config) ->
cowboy_client_basic_1(Config).
t_cowboy2_client_basic_1(Config) ->
cowboy_client_basic_1(Config).
t_elli_client_basic_1(Config) ->
elli_client_basic_1(Config).
%%%------------------------------------------------------------------------
%%% Private functions
%%%------------------------------------------------------------------------
config_path() ->
Path = [_ | _] = os:getenv("TEST_DIR"),
filename:join(Path, erlang:atom_to_list(?MODULE) ++ ".config").
cowboy_client_basic_1(Config) ->
{port, Port} = lists:keyfind(port, 1, Config),
Context0 = cloudi:new(),
CloudIConfigPath = config_path(),
{ok, CloudIConfigData} = file:read_file(CloudIConfigPath),
ContentLength0 = erlang:integer_to_binary(byte_size(CloudIConfigData)),
Host = cloudi_string:format_to_binary("127.0.0.1:~w", [Port]),
URLPath0 = <<"/ct_test_files/cloudi_service_http_client_SUITE.config">>,
{{ok,
[{<<"accept-ranges">>, <<"bytes">>},
{<<"content-length">>, ContentLength0},
{<<"content-type">>, <<"application/x-erlang">>},
{<<"date">>, _},
{<<"etag">>, _},
{<<"last-modified">>, _},
{<<"server">>, <<"Cowboy">>},
{<<"status">>, <<"200">>}],
Response0},
Context1} = cloudi_service_http_client:get(Context0,
?SERVICE_PREFIX1,
[{<<"host">>, Host},
{<<"url-path">>, URLPath0}],
<<>>),
CloudIConfigData = Response0,
{ok, CloudIConfig} = file:consult(CloudIConfigPath),
{_, ServicesConfigIn} = lists:keyfind(services, 1, CloudIConfig),
URLPath1 = <<"/cloudi/api/rpc/services.erl">>,
{{ok,
[{<<"content-length">>, ContentLength1},
{<<"content-type">>, <<"application/x-erlang">>},
{<<"date">>, _},
{<<"server">>, <<"Cowboy">>},
{<<"status">>, <<"200">>}],
Response1},
_} = cloudi_service_http_client:get(Context1,
?SERVICE_PREFIX1,
[{<<"host">>, Host},
{<<"url-path">>, URLPath1}],
<<>>),
true = (erlang:binary_to_integer(ContentLength1) ==
erlang:byte_size(Response1)),
ServicesConfigOut = [S ||
{_, S} <- cloudi_string:binary_to_term(Response1)],
5 = erlang:length(ServicesConfigIn),
6 = erlang:length(ServicesConfigOut),
ok.
elli_client_basic_1(Config) ->
{port, Port} = lists:keyfind(port, 1, Config),
Context0 = cloudi:new(),
CloudIConfigPath = config_path(),
{ok, CloudIConfigData} = file:read_file(CloudIConfigPath),
ContentLength0 = erlang:integer_to_binary(byte_size(CloudIConfigData)),
Host = cloudi_string:format_to_binary("127.0.0.1:~w", [Port]),
URLPath0 = <<"/ct_test_files/cloudi_service_http_client_SUITE.config">>,
{{ok,
[{<<"accept-ranges">>, <<"bytes">>},
{<<"connection">>, <<"Keep-Alive">>},
{<<"content-length">>, ContentLength0},
{<<"content-type">>, <<"application/x-erlang">>},
{<<"date">>, _},
{<<"etag">>, _},
{<<"last-modified">>, _},
{<<"status">>, <<"200">>}],
Response0},
Context1} = cloudi_service_http_client:get(Context0,
?SERVICE_PREFIX1,
[{<<"host">>, Host},
{<<"url-path">>, URLPath0}],
<<>>),
CloudIConfigData = Response0,
{ok, CloudIConfig} = file:consult(CloudIConfigPath),
{_, ServicesConfigIn} = lists:keyfind(services, 1, CloudIConfig),
URLPath1 = <<"/cloudi/api/rpc/services.erl">>,
{{ok,
[{<<"connection">>, <<"Keep-Alive">>},
{<<"content-length">>, ContentLength1},
{<<"content-type">>, <<"application/x-erlang">>},
{<<"status">>, <<"200">>}],
Response1},
_} = cloudi_service_http_client:get(Context1,
?SERVICE_PREFIX1,
[{<<"host">>, Host},
{<<"url-path">>, URLPath1}],
<<>>),
true = (erlang:binary_to_integer(ContentLength1) ==
erlang:byte_size(Response1)),
ServicesConfigOut = [S ||
{_, S} <- cloudi_string:binary_to_term(Response1)],
5 = erlang:length(ServicesConfigIn),
6 = erlang:length(ServicesConfigOut),
ok.