Рефакторинг обработчиков. Часть 3 #21
This commit is contained in:
143
test/api_admins_SUITE.erl
Normal file
143
test/api_admins_SUITE.erl
Normal file
@@ -0,0 +1,143 @@
|
||||
%%%-------------------------------------------------------------------
|
||||
%%% @doc Common Test Suite для административного API.
|
||||
%%%
|
||||
%%% Поддерживает два режима запуска:
|
||||
%%% - Локальный (CT_MODE=local или не задан): автоматически
|
||||
%%% стартует EventHub, выполняет тесты и останавливает приложение.
|
||||
%%% - Удалённый (CT_MODE=remote): подключается к уже работающему
|
||||
%%% кластеру по URL, определённым в переменных окружения
|
||||
%%% (API_HOST, ADMIN_API_HOST и т.д.).
|
||||
%%%
|
||||
%%% Запуск:
|
||||
%%% rebar3 ct --suite=api_admin_SUITE
|
||||
%%% или CT_MODE=remote rebar3 ct --suite=api_admin_SUITE
|
||||
%%% @end
|
||||
%%%-------------------------------------------------------------------
|
||||
-module(api_admins_SUITE).
|
||||
-compile(export_all).
|
||||
|
||||
-include_lib("common_test/include/ct.hrl").
|
||||
|
||||
%%%===================================================================
|
||||
%%% Common Test callbacks
|
||||
%%%===================================================================
|
||||
|
||||
%% @doc Возвращает список тестовых кейсов.
|
||||
all() ->
|
||||
[
|
||||
admin_test_events,
|
||||
admin_test_reviews,
|
||||
admin_test_users,
|
||||
admin_test_tickets,
|
||||
admin_test_reports,
|
||||
admin_test_subscriptions,
|
||||
admin_test_banned_words,
|
||||
admin_test_moderation,
|
||||
admin_test_audit,
|
||||
admin_test_stats,
|
||||
admin_test_me,
|
||||
admin_test_admins,
|
||||
admin_test_websocket
|
||||
].
|
||||
|
||||
%% @doc Инициализация сьюта.
|
||||
%% В локальном режиме запускает приложение EventHub.
|
||||
init_per_suite(Config) ->
|
||||
case os:getenv("CT_MODE", "local") of
|
||||
"remote" ->
|
||||
ct:pal("Remote mode: assuming application is already running"),
|
||||
wait_for_remote(),
|
||||
[{started_by_us, false} | Config];
|
||||
_ ->
|
||||
case lists:keymember(eventhub, 1, application:which_applications()) of
|
||||
true ->
|
||||
ct:pal("Local mode: application already running"),
|
||||
[{started_by_us, false} | Config];
|
||||
false ->
|
||||
ct:pal("Local mode: starting application..."),
|
||||
%% ok = application:load(eventhub),
|
||||
{ok, _} = application:ensure_all_started(eventhub),
|
||||
timer:sleep(1000),
|
||||
[{started_by_us, true} | Config]
|
||||
end
|
||||
end.
|
||||
|
||||
%% @doc Завершение сьюта. В локальном режиме останавливает приложение.
|
||||
end_per_suite(Config) ->
|
||||
case proplists:get_value(started_by_us, Config, false) andalso
|
||||
os:getenv("CT_MODE", "local") =/= "remote" of
|
||||
true ->
|
||||
application:stop(eventhub);
|
||||
false ->
|
||||
ok
|
||||
end,
|
||||
Config.
|
||||
|
||||
%%%===================================================================
|
||||
%%% Тестовые кейсы
|
||||
%%%===================================================================
|
||||
|
||||
%% @doc Тесты для событий.
|
||||
admin_test_events(_Config) ->
|
||||
admin_events_tests:test().
|
||||
|
||||
admin_test_reviews(_Config) ->
|
||||
admin_reviews_tests:test().
|
||||
|
||||
admin_test_users(_Config) ->
|
||||
admin_users_tests:test().
|
||||
|
||||
admin_test_tickets(_Config) ->
|
||||
admin_tickets_tests:test().
|
||||
|
||||
admin_test_reports(_Config) ->
|
||||
admin_reports_tests:test().
|
||||
|
||||
admin_test_subscriptions(_Config) ->
|
||||
admin_subscriptions_tests:test().
|
||||
|
||||
admin_test_banned_words(_Config) ->
|
||||
admin_banned_words_tests:test().
|
||||
|
||||
admin_test_moderation(_Config) ->
|
||||
admin_moderation_tests:test().
|
||||
|
||||
admin_test_audit(_Config) ->
|
||||
admin_audit_tests:test().
|
||||
|
||||
admin_test_stats(_Config) ->
|
||||
admin_stats_tests:test().
|
||||
|
||||
admin_test_me(_Config) ->
|
||||
admin_me_tests:test().
|
||||
|
||||
admin_test_admins(_Config) ->
|
||||
admin_admins_tests:test().
|
||||
|
||||
admin_test_websocket(_Config) ->
|
||||
admin_websocket_tests:test().
|
||||
|
||||
%%%===================================================================
|
||||
%%% Внутренние функции
|
||||
%%%===================================================================
|
||||
|
||||
-spec ct_mode() -> string().
|
||||
ct_mode() ->
|
||||
os:getenv("CT_MODE", "local").
|
||||
|
||||
%% @private Ожидание доступности удалённого API.
|
||||
-spec wait_for_remote() -> ok.
|
||||
wait_for_remote() ->
|
||||
URL = os:getenv("ADMIN_API_HOST", "http://localhost:8445") ++ "/admin/health",
|
||||
ct:pal("Waiting for remote API: ~s", [URL]),
|
||||
wait_for_health(URL, 30).
|
||||
|
||||
wait_for_health(_URL, 0) ->
|
||||
ct:fail("Remote API did not start within 30 seconds");
|
||||
wait_for_health(URL, Retries) ->
|
||||
case httpc:request(get, {URL, []}, [], []) of
|
||||
{ok, {{_, 200, _}, _, _}} -> ok;
|
||||
_ ->
|
||||
timer:sleep(1000),
|
||||
wait_for_health(URL, Retries - 1)
|
||||
end.
|
||||
Reference in New Issue
Block a user