|
@@ -11,7 +11,8 @@
|
|
|
|
|
|
-export([all/0,
|
|
|
init_per_suite/1, end_per_suite/1, init_per_testcase/2, end_per_testcase/2,
|
|
|
- query_test/1, transaction_test/1, reconnect_test/1, timeout_test/1, validate_connection_params_test/1
|
|
|
+ query_test/1, transaction_test/1, reconnect_test/1, timeout_test/1,
|
|
|
+ validate_connection_params_test/1, monitoring_callback_test/1
|
|
|
]).
|
|
|
|
|
|
-define(SELECT_ITEMS_QUERY, "SELECT id, category_id, title, num FROM item ORDER by id ASC").
|
|
@@ -22,7 +23,8 @@ all() ->
|
|
|
transaction_test,
|
|
|
reconnect_test,
|
|
|
timeout_test,
|
|
|
- validate_connection_params_test
|
|
|
+ validate_connection_params_test,
|
|
|
+ monitoring_callback_test
|
|
|
].
|
|
|
|
|
|
|
|
@@ -177,19 +179,53 @@ timeout_test(_Config) ->
|
|
|
|
|
|
|
|
|
validate_connection_params_test(_Config) ->
|
|
|
- Params1 = #epgsql_connection_params{host = "localhost", port = 5432, username = "test", password = "test", database = "testdb"},
|
|
|
+ Params1 = #epgsql_connection_params{host = "localhost", port = 5432,
|
|
|
+ username = "test", password = "test", database = "testdb"},
|
|
|
Res1 = epgsql_pool:validate_connection_params(Params1),
|
|
|
ct:pal("Res1: ~p", [Res1]),
|
|
|
?assertEqual(ok, Res1),
|
|
|
|
|
|
- Params2 = #epgsql_connection_params{host = "localhost", port = 5432, username = "test", password = "some", database = "testdb"},
|
|
|
+ Params2 = #epgsql_connection_params{host = "localhost", port = 5432,
|
|
|
+ username = "test", password = "some", database = "testdb"},
|
|
|
Res2 = epgsql_pool:validate_connection_params(Params2),
|
|
|
ct:pal("Res2: ~p", [Res2]),
|
|
|
?assertEqual({error,invalid_password}, Res2),
|
|
|
|
|
|
- Params3 = #epgsql_connection_params{host = "localhost", port = 5432, username = "test", password = "test", database = "some"},
|
|
|
+ Params3 = #epgsql_connection_params{host = "localhost", port = 5432,
|
|
|
+ username = "test", password = "test", database = "some"},
|
|
|
Res3 = epgsql_pool:validate_connection_params(Params3),
|
|
|
ct:pal("Res3: ~p", [Res3]),
|
|
|
?assertEqual({error,{error,fatal,<<"3D000">>,<<"database \"some\" does not exist">>, []}}, Res3),
|
|
|
|
|
|
ok.
|
|
|
+
|
|
|
+
|
|
|
+monitoring_callback_test(_Config) ->
|
|
|
+ Callback = fun({db_query_time, Time}) ->
|
|
|
+ ct:pal("db_query_time ~p", [Time]),
|
|
|
+ put(db_query_time, true); % use process dictionary
|
|
|
+ ({db_query_error, _Stmt, _Params, Error}) ->
|
|
|
+ ct:pal("db_query_error ~p", [Error]),
|
|
|
+ put(db_query_error, true);
|
|
|
+ ({db_query_timeout, _Stmt, _Params}) ->
|
|
|
+ ct:pal("db_query_timeout"),
|
|
|
+ put(db_query_timeout, true)
|
|
|
+ end,
|
|
|
+ epgsql_pool:set_monitoring_callback(Callback),
|
|
|
+
|
|
|
+ Res1 = epgsql_pool:query(my_pool, ?SELECT_ITEMS_QUERY),
|
|
|
+ ct:pal("Res1:~p", [Res1]),
|
|
|
+ ?assertMatch({ok, _, _}, Res1),
|
|
|
+ ?assertEqual(true, get(db_query_time)),
|
|
|
+
|
|
|
+ Res2 = epgsql_pool:query(my_pool, "SELECT * FROM blablabla"),
|
|
|
+ ct:pal("Res2:~p", [Res2]),
|
|
|
+ ?assertMatch({error, #error{}}, Res2),
|
|
|
+ ?assertEqual(true, get(db_query_error)),
|
|
|
+
|
|
|
+ Res3 = epgsql_pool:query(my_pool, "SELECT pg_sleep(1)", [], [{timeout, 500}]),
|
|
|
+ ct:pal("Res3:~p", [Res3]),
|
|
|
+ ?assertEqual({error, timeout}, Res3),
|
|
|
+ ?assertEqual(true, get(db_query_timeout)),
|
|
|
+
|
|
|
+ ok.
|