Packages

Emysql - Erlang MySQL driver

Current section

Files

Jump to
emysql test pool_SUITE.erl
Raw

test/pool_SUITE.erl

%%%-------------------------------------------------------------------
%%% File : Emysql/test/pool_SUITE.erl
%%% Descr : Suite #4 - testing connection pools.
%%% Author : H. Diedrich
%%% Created : 01/02/2012 hd
%%% Requires : Erlang 14B (prior may not have ct_run)
%%%-------------------------------------------------------------------
%%%
%%% Run from Emysql/:
%%% make test2
%%%
%%% Results see:
%%% test/index.html
%%%
%%%-------------------------------------------------------------------
-module(pool_SUITE).
-compile(export_all).
-include_lib("common_test/include/ct.hrl").
-include_lib("../include/emysql.hrl").
% List of test cases.
% Test cases have self explanatory names.
%%--------------------------------------------------------------------
all() ->
[three_pools].
%%--------------------------------------------------------------------
init_per_suite(Config) ->
% if this fails, focus on environment_SUITE to fix test setup.
crypto:start(),
application:start(emysql),
Config.
% clean up
%%--------------------------------------------------------------------
end_per_suite(_) ->
ok.
%% Test Case: Test if three pools work ok.
%% Test for Issue 20, Bart van Deenen, 1 Feb 2012.
%% The bug was a missing check of what pool a queued execution was waiting for.
%% The fix included introducing wait queues per pool, instead of a global one.
%%--------------------------------------------------------------------
three_pools(_) ->
try emysql:remove_pool(test1) catch _:_ -> ok end,
try emysql:remove_pool(test2) catch _:_ -> ok end,
try emysql:remove_pool(test3) catch _:_ -> ok end,
emysql:add_pool(test1, 1, "test", "test", "localhost", 3306, "test1", utf8),
emysql:add_pool(test2, 1, "test", "test", "localhost", 3306, "test2", utf8),
emysql:add_pool(test3, 1, "test", "test", "localhost", 3306, "test1", utf8),
#result_packet{} = emysql:execute(test1, "select a from test"),
#result_packet{} = emysql:execute(test2, "select b from test"),
#result_packet{} = emysql:execute(test3, "select A from test"),
F=fun() ->
timer:sleep(100+random:uniform(500)),
#result_packet{} = emysql:execute(test2, "select b from test"),
#result_packet{} = emysql:execute(test3, "select A from test"),
ok
end,
[spawn(F) || _ <- lists:seq(1,5)],
emysql:remove_pool(test1),
emysql:remove_pool(test2),
emysql:remove_pool(test3),
ok.