12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- -module(epgsql_ct).
- -include_lib("common_test/include/ct.hrl").
- -include_lib("eunit/include/eunit.hrl").
- -export([
- connection_data/1,
- connect_only/2,
- with_connection/2,
- with_connection/3,
- with_connection/4,
- with_rollback/2,
- with_min_version/4,
- flush/0
- ]).
- connection_data(Config) ->
- PgConfig = ?config(pg_config, Config),
- Host = ?config(host, PgConfig),
- Port = ?config(port, PgConfig),
- {Host, Port}.
- connect_only(Config, Args) ->
- {Host, Port} = connection_data(Config),
- Module = ?config(module, Config),
- TestOpts = [{port, Port}],
- case Args of
- [User, Opts] -> Args2 = [User, TestOpts ++ Opts];
- [User, Pass, Opts] -> Args2 = [User, Pass, TestOpts ++ Opts];
- Opts -> Args2 = [TestOpts ++ Opts]
- end,
- {ok, C} = apply(Module, connect, [Host | Args2]),
- Module:close(C),
- flush().
- with_connection(Config, F) ->
- with_connection(Config, F, "epgsql_test", []).
- with_connection(Config, F, Args) ->
- with_connection(Config, F, "epgsql_test", Args).
- with_connection(Config, F, Username, Args) ->
- {Host, Port} = connection_data(Config),
- Module = ?config(module, Config),
- Args2 = [{port, Port}, {database, "epgsql_test_db1"} | Args],
- {ok, C} = Module:connect(Host, Username, Args2),
- try
- F(C)
- after
- Module:close(C)
- end,
- flush().
- with_rollback(Config, F) ->
- Module = ?config(module, Config),
- with_connection(
- Config,
- fun(C) ->
- try
- Module:squery(C, "begin"),
- F(C)
- after
- Module:squery(C, "rollback")
- end
- end).
- with_min_version(Config, Min, F, Args) ->
- PgConf = ?config(pg_config, Config),
- Ver = ?config(version, PgConf),
- case Ver >= Min of
- true ->
- epgsql_ct:with_connection(Config, F, Args);
- false ->
- ?debugFmt("skipping test requiring PostgreSQL >= ~p, but we have ~p ~p",
- [Min, Ver, Config])
- end.
- %% flush mailbox
- flush() ->
- ?assertEqual([], flush([])).
- flush(Acc) ->
- receive
- {'EXIT', _Pid, normal} -> flush(Acc);
- M -> flush([M | Acc])
- after
- 0 -> lists:reverse(Acc)
- end.
|