unit test
This commit is contained in:
parent
b2a7dffccc
commit
a8c8908851
|
@ -1,3 +1,25 @@
|
||||||
|
%%% Copyright (c) 2015 eMQTT.IO, All Rights Reserved.
|
||||||
|
%%%
|
||||||
|
%%% Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
%%% of this software and associated documentation files (the "Software"), to deal
|
||||||
|
%%% in the Software without restriction, including without limitation the rights
|
||||||
|
%%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
%%% copies of the Software, and to permit persons to whom the Software is
|
||||||
|
%%% furnished to do so, subject to the following conditions:
|
||||||
|
%%%
|
||||||
|
%%% The above copyright notice and this permission notice shall be included in all
|
||||||
|
%%% copies or substantial portions of the Software.
|
||||||
|
%%%
|
||||||
|
%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
%%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
%%% SOFTWARE.
|
||||||
|
%%%
|
||||||
|
%%% @author Feng Lee <feng@emqtt.io>
|
||||||
|
%%%
|
||||||
|
|
||||||
-module(ecpool_test).
|
-module(ecpool_test).
|
||||||
|
|
||||||
|
@ -5,6 +27,8 @@
|
||||||
|
|
||||||
-include_lib("eunit/include/eunit.hrl").
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
|
|
||||||
|
-define(POOL, test_pool).
|
||||||
|
|
||||||
-define(POOL_OPTS, [
|
-define(POOL_OPTS, [
|
||||||
%% schedulers number
|
%% schedulers number
|
||||||
{pool_size, 10},
|
{pool_size, 10},
|
||||||
|
@ -13,6 +37,7 @@
|
||||||
%% false | pos_integer()
|
%% false | pos_integer()
|
||||||
{auto_reconnect, false},
|
{auto_reconnect, false},
|
||||||
|
|
||||||
|
%% DB Parameters
|
||||||
{host, "localhost"},
|
{host, "localhost"},
|
||||||
{port, 5432},
|
{port, 5432},
|
||||||
{username, "feng"},
|
{username, "feng"},
|
||||||
|
@ -20,13 +45,64 @@
|
||||||
{database, "mqtt"},
|
{database, "mqtt"},
|
||||||
{encoding, utf8}]).
|
{encoding, utf8}]).
|
||||||
|
|
||||||
pool_test() ->
|
pool_test_() ->
|
||||||
application:start(gproc),
|
{foreach,
|
||||||
application:start(ecpool),
|
fun() ->
|
||||||
ecpool:start_pool(test_pool, test_client, ?POOL_OPTS).
|
application:start(gproc),
|
||||||
%%ecpool:stop_pool(test_pool),
|
application:start(ecpool)
|
||||||
%%application:stop(ecpool),
|
end,
|
||||||
%%application:stop(gproc).
|
fun(_) ->
|
||||||
|
application:stop(ecpool),
|
||||||
|
application:stop(gproc)
|
||||||
|
end,
|
||||||
|
[?_test(t_start_pool()),
|
||||||
|
?_test(t_start_sup_pool()),
|
||||||
|
?_test(t_restart_client()),
|
||||||
|
?_test(t_reconnect_client())]}.
|
||||||
|
|
||||||
|
t_start_pool() ->
|
||||||
|
ecpool:start_pool(?POOL, test_client, ?POOL_OPTS),
|
||||||
|
?assertEqual(10, length(ecpool:workers(test_pool))),
|
||||||
|
?debugFmt("~p~n", [ecpool:workers(test_pool)]),
|
||||||
|
lists:foreach(fun(I) ->
|
||||||
|
ecpool:with_client(?POOL, fun(Client) ->
|
||||||
|
?debugFmt("Call ~p: ~p~n", [I, Client])
|
||||||
|
end)
|
||||||
|
end, lists:seq(1, 10)).
|
||||||
|
|
||||||
|
t_start_sup_pool() ->
|
||||||
|
{ok, Pid1} = ecpool:start_sup_pool(xpool, test_client, ?POOL_OPTS),
|
||||||
|
{ok, Pid2} = ecpool:start_sup_pool(ypool, test_client, ?POOL_OPTS),
|
||||||
|
?assertEqual([{xpool, Pid1}, {ypool, Pid2}], lists:sort(ecpool_sup:pools())),
|
||||||
|
ecpool:stop_sup_pool(ypool),
|
||||||
|
ecpool:stop_sup_pool(xpool),
|
||||||
|
?assertEqual([], ecpool_sup:pools()).
|
||||||
|
|
||||||
|
t_restart_client() ->
|
||||||
|
ecpool:start_pool(?POOL, test_client, [{pool_size, 4}]),
|
||||||
|
?assertEqual(4, length(ecpool:workers(?POOL))),
|
||||||
|
ecpool:with_client(?POOL, fun(Client) -> test_client:stop(Client, normal) end),
|
||||||
|
?debugFmt("~n~p~n", [ecpool:workers(?POOL)]),
|
||||||
|
?assertEqual(3, length(ecpool:workers(?POOL))),
|
||||||
|
ecpool:with_client(?POOL, fun(Client) -> test_client:stop(Client, {shutdown, x}) end),
|
||||||
|
?debugFmt("~n~p~n", [ecpool:workers(?POOL)]),
|
||||||
|
?assertEqual(2, length(ecpool:workers(?POOL))),
|
||||||
|
ecpool:with_client(?POOL, fun(Client) -> test_client:stop(Client, badarg) end),
|
||||||
|
timer:sleep(100),
|
||||||
|
?debugFmt("~n~p~n", [ecpool:workers(?POOL)]),
|
||||||
|
?assertEqual(2, length(ecpool:workers(?POOL))).
|
||||||
|
|
||||||
|
t_reconnect_client() ->
|
||||||
|
ecpool:start_pool(?POOL, test_client, [{pool_size, 4}, {auto_reconnect, 1}]),
|
||||||
|
?assertEqual(4, length(ecpool:workers(?POOL))),
|
||||||
|
ecpool:with_client(?POOL, fun(Client) -> test_client:stop(Client, normal) end),
|
||||||
|
?assert(lists:member(false, [ecpool_worker:is_connected(Pid) || {_, Pid} <- ecpool:workers(?POOL)])),
|
||||||
|
timer:sleep(1100),
|
||||||
|
?assertNot(lists:member(false, [ecpool_worker:is_connected(Pid) || {_, Pid} <- ecpool:workers(?POOL)])),
|
||||||
|
ecpool:with_client(?POOL, fun(Client) -> test_client:stop(Client, badarg) end),
|
||||||
|
?assert(lists:member(false, [ecpool_worker:is_connected(Pid) || {_, Pid} <- ecpool:workers(?POOL)])),
|
||||||
|
timer:sleep(1100),
|
||||||
|
?assertEqual(4, length(ecpool:workers(?POOL))).
|
||||||
|
|
||||||
-endif.
|
-endif.
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
%% API Function Exports
|
%% API Function Exports
|
||||||
%% ------------------------------------------------------------------
|
%% ------------------------------------------------------------------
|
||||||
|
|
||||||
-export([connect/1]).
|
-export([connect/1, stop/2]).
|
||||||
|
|
||||||
%% ------------------------------------------------------------------
|
%% ------------------------------------------------------------------
|
||||||
%% gen_server Function Exports
|
%% gen_server Function Exports
|
||||||
|
@ -26,6 +26,9 @@
|
||||||
connect(Opts) ->
|
connect(Opts) ->
|
||||||
gen_server:start_link(?MODULE, [Opts], []).
|
gen_server:start_link(?MODULE, [Opts], []).
|
||||||
|
|
||||||
|
stop(Pid, Reason) ->
|
||||||
|
gen_server:call(Pid, {stop, Reason}).
|
||||||
|
|
||||||
%% ------------------------------------------------------------------
|
%% ------------------------------------------------------------------
|
||||||
%% gen_server Function Definitions
|
%% gen_server Function Definitions
|
||||||
%% ------------------------------------------------------------------
|
%% ------------------------------------------------------------------
|
||||||
|
@ -33,6 +36,9 @@ connect(Opts) ->
|
||||||
init(Args) ->
|
init(Args) ->
|
||||||
{ok, Args}.
|
{ok, Args}.
|
||||||
|
|
||||||
|
handle_call({stop, Reason}, _From, State) ->
|
||||||
|
{stop, Reason, ok, State};
|
||||||
|
|
||||||
handle_call(_Request, _From, State) ->
|
handle_call(_Request, _From, State) ->
|
||||||
{reply, ok, State}.
|
{reply, ok, State}.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue