From 78d1d9eb8dfe7ceb569d45dd85ab38defc4dc9bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chrz=C4=85szcz?= Date: Fri, 30 Apr 2021 12:33:13 +0200 Subject: [PATCH 1/7] Support multiple *.config files in big tests - Common test allows this and looks up the option in subsequent files until it is found. - This will be used in tests for dynamic domains Also: - Do not read the properties multiple times in a row - Do not assume that 'mim' and 'reg' clusters are always present (reg will be disabled for multi-tenancy tests) --- big_tests/run_common_test.erl | 82 ++++++++++++++++------------------- 1 file changed, 37 insertions(+), 45 deletions(-) diff --git a/big_tests/run_common_test.erl b/big_tests/run_common_test.erl index 360d794550..1171ea2fa6 100644 --- a/big_tests/run_common_test.erl +++ b/big_tests/run_common_test.erl @@ -162,9 +162,9 @@ save_count(Test, Configs) -> file:write_file("/tmp/ct_count", integer_to_list(Repeat*Times)). run_test(Test, PresetsToRun, CoverOpts) -> - prepare_cover(Test, CoverOpts), + {ConfigFiles, Props} = get_ct_config(Test), + prepare_cover(Props, CoverOpts), error_logger:info_msg("Presets to run ~p", [PresetsToRun]), - {ConfigFile, Props} = get_ct_config(Test), case get_presets(Props) of {ok, Presets} -> Presets1 = case PresetsToRun of @@ -183,15 +183,15 @@ run_test(Test, PresetsToRun, CoverOpts) -> error_logger:info_msg("Starting test of ~p configurations: ~n~p~n", [Length, Names]), Zip = lists:zip(lists:seq(1, Length), Presets1), - R = [ run_config_test(Preset, Test, N, Length) || {N, Preset} <- Zip ], + R = [ run_config_test(Props, Preset, Test, N, Length) || {N, Preset} <- Zip ], save_count(Test, Presets1), - analyze_coverage(Test, CoverOpts), + analyze_coverage(Props, CoverOpts), R; {error, not_found} -> - error_logger:info_msg("Presets were not found in the config file ~ts", - [ConfigFile]), + error_logger:info_msg("Presets were not found in the config files ~ts", + [ConfigFiles]), R = do_run_quick_test(Test, CoverOpts), - analyze_coverage(Test, CoverOpts), + analyze_coverage(Props, CoverOpts), R end. @@ -211,12 +211,10 @@ get_presets(Props) -> get_ct_config(Opts) -> Spec = proplists:get_value(spec, Opts), Props = read_file(Spec), - ConfigFile = case proplists:lookup(config, Props) of - {config, [Config]} -> Config; - _ -> "test.config" - end, - {ok, ConfigProps} = handle_file_error(ConfigFile, file:consult(ConfigFile)), - {ConfigFile, ConfigProps}. + ConfigFiles = proplists:get_value(config, Props, ["test.config"]), + % Apply the files in reverse, like ct will do when running the tests + ConfigProps = merge_vars([read_file(File) || File <- lists:reverse(ConfigFiles)]), + {ConfigFiles, ConfigProps}. preset_names(Presets) -> [Preset||{Preset, _} <- Presets]. @@ -234,8 +232,8 @@ do_run_quick_test(Test, CoverOpts) -> [{ok, {Ok, Failed, UserSkipped, AutoSkipped}}] end. -run_config_test({Name, Variables}, Test, N, Tests) -> - enable_preset(Name, Variables, Test, N, Tests), +run_config_test(Props, {Name, Variables}, Test, N, Tests) -> + enable_preset(Props, Name, Variables, N, Tests), load_test_modules(Test), Result = ct:run_test([{label, Name} | Test]), case Result of @@ -245,12 +243,12 @@ run_config_test({Name, Variables}, Test, N, Tests) -> {ok, {Ok, Failed, UserSkipped, AutoSkipped}} end. -enable_preset(Name, PresetVars, Test, N, Tests) -> +enable_preset(Props, Name, PresetVars, N, Tests) -> %% TODO: Do this with a multicall, otherwise it's not as fast as possible (not parallelized). %% A multicall requires the function to be defined on the other side, though. Rs = [ maybe_enable_preset_on_node(host_node(H), PresetVars, host_vars(H), host_name(H)) - || H <- get_hosts_to_enable_preset(Test) ], + || H <- get_hosts_to_enable_preset(Props) ], [ok] = lists:usort(Rs), error_logger:info_msg("Configuration ~p of ~p: ~p started.~n", [N, Tests, Name]). @@ -324,21 +322,21 @@ call(Node, M, F, A) -> Result end. -prepare_cover(Test, true) -> +prepare_cover(Props, true) -> io:format("Preparing cover~n"), - prepare(Test); + prepare(Props); prepare_cover(_, _) -> ok. -analyze_coverage(Test, true) -> - analyze(Test, true); -analyze_coverage(Test, ModuleList) when is_list(ModuleList) -> - analyze(Test, ModuleList); +analyze_coverage(Props, true) -> + analyze(Props, true); +analyze_coverage(Props, ModuleList) when is_list(ModuleList) -> + analyze(Props, ModuleList); analyze_coverage(_, _) -> ok. -prepare(Test) -> - Nodes = get_mongoose_nodes(Test), +prepare(Props) -> + Nodes = get_mongoose_nodes(Props), maybe_compile_cover(Nodes). maybe_compile_cover([]) -> @@ -364,14 +362,14 @@ maybe_compile_cover(Nodes) -> report_progress("~nCover compilation took ~ts~n", [microseconds_to_string(Time)]), ok. -analyze(Test, CoverOpts) -> +analyze(Props, CoverOpts) -> io:format("Coverage analyzing~n"), - Nodes = get_mongoose_nodes(Test), - analyze(Test, CoverOpts, Nodes). + Nodes = get_mongoose_nodes(Props), + analyze(Props, CoverOpts, Nodes). -analyze(_Test, _CoverOpts, []) -> +analyze(_Props, _CoverOpts, []) -> ok; -analyze(_Test, CoverOpts, Nodes) -> +analyze(_Props, CoverOpts, Nodes) -> deduplicate_cover_server_console_prints(), %% Import small tests cover Files = filelib:wildcard(repo_dir() ++ "/_build/**/cover/*.coverdata"), @@ -433,19 +431,19 @@ make_html(Modules) -> file:write(File, row("Summary", CSum, NCSum, percent(CSum, NCSum), "#")), file:close(File). -get_hosts_to_enable_preset(Test) -> - Hosts = get_all_hosts(Test), - %% We apply preset options to `mim` and `reg` clusters - Clusters = group_by(fun host_cluster/1, Hosts), - dict:fetch(mim, Clusters) ++ dict:fetch(reg, Clusters). +get_hosts_to_enable_preset(Props) -> + [Host || Host <- get_all_hosts(Props), should_enable_preset(host_cluster(Host))]. + +should_enable_preset(mim) -> true; +should_enable_preset(reg) -> true; +should_enable_preset(_) -> false. -get_all_hosts(Test) -> - {_File, Props} = get_ct_config(Test), +get_all_hosts(Props) -> {hosts, Hosts} = lists:keyfind(hosts, 1, Props), Hosts. -get_mongoose_nodes(Test) -> - [ host_node(H) || H <- get_all_hosts(Test), is_test_host_enabled(host_name(H)) ]. +get_mongoose_nodes(Props) -> + [ host_node(H) || H <- get_all_hosts(Props), is_test_host_enabled(host_name(H)) ]. percent(0, _) -> 0; percent(C, NC) when C /= 0; NC /= 0 -> round(C / (NC+C) * 100); @@ -545,12 +543,6 @@ exit_code({_, _, _, _}) -> print(Handle, Fmt, Args) -> io:format(Handle, Fmt, Args). -%% Source: https://gist.github.com/jbpotonnier/1310406 -group_by(F, L) -> - lists:foldr(fun ({K, V}, D) -> dict:append(K, V, D) end, - dict:new(), - [ {F(X), X} || X <- L ]). - host_cluster(Host) -> host_param(cluster, Host). host_node(Host) -> host_param(node, Host). host_vars(Host) -> host_param(vars, Host). From 72778bae337e938aa01a36478329a71ae92420f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chrz=C4=85szcz?= Date: Fri, 30 Apr 2021 12:38:05 +0200 Subject: [PATCH 2/7] Add 'spec' option to test-runner --- tools/test-runner.sh | 11 +++++++++++ tools/test_runner/selected-tests-to-test-spec.sh | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/tools/test-runner.sh b/tools/test-runner.sh index efa58b48a5..02d49a63f0 100755 --- a/tools/test-runner.sh +++ b/tools/test-runner.sh @@ -18,6 +18,7 @@ This script runs small and big tests for MongooseIM Options: --db [DB] -- a list of databases to setup for big tests --preset [PRESET] -- a list of presets to run during big tests +--spec [SPEC] -- test spec to use instead of 'default.spec' --dev-nodes [NODE] -- a list of release nodes to build and start --test-hosts [HOST] -- a list of test hosts to apply preset to and collect cover info from --one-node -- the same as "--dev-nodes mim1 --test-hosts mim --" @@ -255,6 +256,8 @@ PRESETS_ARRAY=( $( ./tools/test_runner/list_presets.sh ) ) +SRC_TESTSPEC="default.spec" + DBS_ARRAY=( mysql pgsql @@ -361,6 +364,12 @@ case $key in done ;; + --spec) + shift # consume argument + SRC_TESTSPEC="$1" + shift # consume value + ;; + --dev-nodes) shift # past argument unset DEV_NODES @@ -603,6 +612,7 @@ if [[ -f "auto_small_tests.spec" ]]; then else export REBAR_CT_EXTRA_ARGS="" fi +export SRC_TESTSPEC="$SRC_TESTSPEC" export TESTSPEC="auto_big_tests.spec" export START_NODES="$START_NODES" export STOP_NODES="$STOP_NODES" @@ -620,6 +630,7 @@ echo " PRESET_ENABLED=$PRESET_ENABLED" echo " BUILD_TESTS=$BUILD_TESTS" echo " BUILD_MIM=$BUILD_MIM" echo " REBAR_CT_EXTRA_ARGS=$REBAR_CT_EXTRA_ARGS" +echo " SRC_TESTSPEC=$SRC_TESTSPEC" echo " TESTSPEC=$TESTSPEC" echo " TLS_DIST=$TLS_DIST" echo " START_NODES=$START_NODES" diff --git a/tools/test_runner/selected-tests-to-test-spec.sh b/tools/test_runner/selected-tests-to-test-spec.sh index 7d75ec9bba..7897b58fff 100755 --- a/tools/test_runner/selected-tests-to-test-spec.sh +++ b/tools/test_runner/selected-tests-to-test-spec.sh @@ -15,7 +15,7 @@ rm -f auto_small_tests.spec big_tests/auto_big_tests.spec rm -f _build/test/lib/mongooseim/auto_small_tests.spec # Fill default specs -cp big_tests/default.spec big_tests/auto_big_tests.spec +cp big_tests/"$SRC_TESTSPEC" big_tests/auto_big_tests.spec # If there are arguments if [ "$#" -ne 0 ]; then From 8d2fef60b86597b840facdfa6865265c78a5762c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chrz=C4=85szcz?= Date: Fri, 30 Apr 2021 13:53:39 +0200 Subject: [PATCH 3/7] Insert and delete dynamic domains automatically This is done in ct_mongoose_hook to be automatic and not require changing all test suites. --- big_tests/src/ct_mongoose_hook.erl | 2 ++ big_tests/tests/domain_helper.erl | 28 ++++++++++++++++++++ big_tests/tests/dynamic_domains_pm_SUITE.erl | 7 ++--- 3 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 big_tests/tests/domain_helper.erl diff --git a/big_tests/src/ct_mongoose_hook.erl b/big_tests/src/ct_mongoose_hook.erl index 63e06d5e74..cf06563524 100644 --- a/big_tests/src/ct_mongoose_hook.erl +++ b/big_tests/src/ct_mongoose_hook.erl @@ -42,6 +42,7 @@ init(_Id, Opts) -> Unfolded = proplists:unfold(Opts), PrintGroup = proplists:get_value(print_group, Unfolded, false), PrintCase = proplists:get_value(print_case, Unfolded, false), + domain_helper:insert_configured_domains(), {ok, #state{print_group = PrintGroup, print_case = PrintCase }}. %% @doc Called before init_per_suite is called. @@ -108,6 +109,7 @@ on_tc_skip(_TC, _Reason, State) -> %% @doc Called when the scope of the CTH is done terminate(_State) -> + domain_helper:delete_configured_domains(), ok. maybe_print_on_server(false, _, _, _) -> diff --git a/big_tests/tests/domain_helper.erl b/big_tests/tests/domain_helper.erl new file mode 100644 index 0000000000..916ad7647f --- /dev/null +++ b/big_tests/tests/domain_helper.erl @@ -0,0 +1,28 @@ +-module(domain_helper). + +-export([insert_configured_domains/0, + delete_configured_domains/0, + insert_domain/2, + delete_domain/2]). + +-import(distributed_helper, [get_or_fail/1, rpc/4]). + +insert_configured_domains() -> + for_each_configured_domain(fun insert_domain/2). + +delete_configured_domains() -> + for_each_configured_domain(fun delete_domain/2). + +insert_domain(Node, Domain) -> + ok = rpc(Node, mongoose_domain_core, insert, [Domain, host_type(), dummy_source]). + +delete_domain(Node, Domain) -> + ok = rpc(Node, mongoose_domain_core, delete, [Domain]). + +for_each_configured_domain(F) -> + [F(#{node => proplists:get_value(node, Opts)}, Domain) || + {_, Opts} <- ct:get_config(hosts), + Domain <- proplists:get_value(dynamic_domains, Opts, [])]. + +host_type() -> + <<"test type">>. %% preconfigured in the toml file diff --git a/big_tests/tests/dynamic_domains_pm_SUITE.erl b/big_tests/tests/dynamic_domains_pm_SUITE.erl index 21de549818..ba049a1ab2 100644 --- a/big_tests/tests/dynamic_domains_pm_SUITE.erl +++ b/big_tests/tests/dynamic_domains_pm_SUITE.erl @@ -71,13 +71,10 @@ auth_domain_removal_is_triggered_on_hook(_Config) -> %% helper functions insert_domains(Nodes, Domains) -> - Source = dummy_source, %% can be anything, we don't care about it - [ok = rpc(Node, mongoose_domain_core, insert, [Domain, ?HOST_TYPE, Source]) || - Node <- Nodes, Domain <- Domains]. + [domain_helper:insert_domain(Node, Domain) || Node <- Nodes, Domain <- Domains]. remove_domains(Nodes, Domains) -> - [ok = rpc(Node, mongoose_domain_core, delete, [Domain]) || - Node <- Nodes, Domain <- Domains]. + [domain_helper:delete_domain(Node, Domain) || Node <- Nodes, Domain <- Domains]. cluster_nodes([], Config) -> Config; cluster_nodes([Node | T], Config) -> From ee1aec72d9bd7cad68a8f6e5f86639eaef4b7212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chrz=C4=85szcz?= Date: Fri, 30 Apr 2021 13:56:03 +0200 Subject: [PATCH 4/7] Add initial spec for dynamic domains Run one suite for now, this will be extended in subsequent commits. --- big_tests/dynamic_domains.config | 41 ++++++++++++++++++++++++++++++++ big_tests/dynamic_domains.spec | 30 +++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 big_tests/dynamic_domains.config create mode 100644 big_tests/dynamic_domains.spec diff --git a/big_tests/dynamic_domains.config b/big_tests/dynamic_domains.config new file mode 100644 index 0000000000..ab4d0eb254 --- /dev/null +++ b/big_tests/dynamic_domains.config @@ -0,0 +1,41 @@ +%% Options defined here are used when testing dynamic domains, see 'dynamic_domains.spec' +%% They take precedence over 'test.config' + +{hosts, [{mim, [{node, mongooseim@localhost}, + {domain, <<"domain.example.com">>}, + {secondary_domain, <<"domain.example.org">>}, + {dynamic_domains, [<<"domain.example.com">>, <<"domain.example.org">>]}, + {vars, "mim1"}, + {cluster, mim}, + {s2s_port, 5269}, + {incoming_s2s_port, 5269}, + {metrics_rest_port, 5288}, + {c2s_port, 5222}, + {c2s_tls_port, 5223}, + {cowboy_port, 5280}, + {cowboy_secure_port, 5285}, + {http_api_client_endpoint_port, 8089}, + {service_port, 8888}, + {kicking_service_port, 8666}, + {hidden_service_port, 8189}, + {gd_endpoint_port, 5555}, + {http_notifications_port, 8000}]} + ]}. + +{escalus_users, [ + {alice, [ + {username, <<"alicE">>}, + {server, <<"domain.example.com">>}, + {host, <<"localhost">>}, + {password, <<"matygrysa">>}]}, + {alice_bis, [ + {username, <<"alicE">>}, + {server, <<"domain.example.org">>}, + {host, <<"localhost">>}, + {password, <<"matygrysa">>}]}, + {bob, [ + {username, <<"bOb">>}, + {server, <<"domain.example.com">>}, + {host, <<"localhost">>}, + {password, <<"makrolika">>}]} +]}. diff --git a/big_tests/dynamic_domains.spec b/big_tests/dynamic_domains.spec new file mode 100644 index 0000000000..2b696a1328 --- /dev/null +++ b/big_tests/dynamic_domains.spec @@ -0,0 +1,30 @@ +%% Spec examples: +%% +%% {suites, "tests", amp_SUITE}. +%% {groups, "tests", amp_SUITE, [discovery]}. +%% {groups, "tests", amp_SUITE, [discovery], {cases, [stream_feature_test]}}. +%% {cases, "tests", amp_SUITE, [stream_feature_test]}. +%% +%% For more info see: +%% http://www.erlang.org/doc/apps/common_test/run_test_chapter.html#test_specifications +{include, "tests"}. + +{suites, "tests", domain_isolation_SUITE}. + +{config, ["dynamic_domains.config", "test.config"]}. +{logdir, "ct_report"}. + +%% ct_tty_hook will log CT failures to TTY verbosely +%% ct_mongoose_hook will: +%% * log suite start/end events in the MongooseIM console +%% * ensure preset value is passed to ct Config +%% * check server's purity after SUITE +{ct_hooks, [ct_groups_summary_hook, ct_tty_hook, ct_mongoose_hook, ct_progress_hook, + ct_mim_config_hook, + ct_markdown_errors_hook, + {ct_mongoose_log_hook, [ejabberd_node, ejabberd_cookie]}, + {ct_mongoose_log_hook, [ejabberd2_node, ejabberd_cookie]} + ]}. + +%% To enable printing group and case enters on server side +%%{ct_hooks, [{ct_mongoose_hook, [print_group, print_case]}]}. From fcd11e143326d8824f66a2ab8e3e31568c61ef4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chrz=C4=85szcz?= Date: Fri, 30 Apr 2021 14:04:41 +0200 Subject: [PATCH 5/7] Test dynamic domains with pgsql on CircleCI --- .circleci/config.yml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 49c2881642..5db5b2e6a1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -202,6 +202,10 @@ orbs: type: boolean description: Erlang distribution with TLS enabled default: false + spec: + type: string + description: Test spec file to use + default: default.spec environment: MIX_ENV: test PRESET: <> @@ -209,7 +213,7 @@ orbs: TLS_DIST: <> ELASTICSEARCH_VERSION: 5.6.9 CASSANDRA_VERSION: 3.9 - TEST_SPEC: mam.spec + TESTSPEC: <> REDIS_VERSION: 3.2.10 steps: - checkout @@ -466,6 +470,17 @@ workflows: requires: - otp_23 filters: *all_tags + # ============= DYNAMIC DOMAINS ============= + - mim/big_tests: + name: dynamic_domains + otp_package: 23.0.3-1 + spec: dynamic_domains.spec + preset: pgsql_mnesia + db: pgsql + context: mongooseim-org + requires: + - otp_23 + filters: *all_tags # ============= 1 VERSION OLDER TESTS ============= - mim/big_tests: name: ldap_mnesia_22 From f35f42b9fe3af2c0606a852569942987fbb03be3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chrz=C4=85szcz?= Date: Tue, 4 May 2021 10:13:46 +0200 Subject: [PATCH 6/7] List and auto-complete specs in test runner --- tools/test-runner-complete.sh | 11 +++++++++-- tools/test-runner.sh | 4 ++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/tools/test-runner-complete.sh b/tools/test-runner-complete.sh index 3939ede055..d0ac1ffd10 100644 --- a/tools/test-runner-complete.sh +++ b/tools/test-runner-complete.sh @@ -37,7 +37,7 @@ fi try_to_load_bash_completion_using_brew _run_all_tests() { - printf "%s\n" "${COMP_WORDS[@]}" > /tmp/test-runner-last-competion + printf "%s\n" "${COMP_WORDS[@]}" > /tmp/test-runner-last-completion # Make COMP_WORDS, without using colon as a breaker # To see all breakers, check COMP_WORDBREAKS variable # It's needed for bash only, not zsh @@ -57,7 +57,9 @@ _run_all_tests() { done cur=${COMP_WORDS[$COMP_CWORD]} - opt=${COMP_WORDS[$pos]} + + # Last option and its arguments before 'cur' + opt=${COMP_WORDS[@]:$pos:$(($COMP_CWORD-$pos))} # If current is an option - we don't care about option expansion case "$cur" in @@ -79,6 +81,10 @@ _run_all_tests() { ARRAY=( $(./tools/test-runner.sh --list-presets) ) COMPREPLY=( $( compgen -W "${ARRAY[*]} --" -- $cur ) );; + --spec) # no '*' here because only one spec is allowed + ARRAY=( $(./tools/test-runner.sh --list-specs) ) + COMPREPLY=( $( compgen -W "${ARRAY[*]} --" -- $cur ) );; + --dev-nodes*) ARRAY=( $(./tools/test-runner.sh --list-dev-nodes) ) COMPREPLY=( $( compgen -W "${ARRAY[*]} --" -- $cur ) );; @@ -103,6 +109,7 @@ _run_all_tests() { SUITES=$(./tools/test_runner/list_suites.sh $LIST_SUITES_ARGS) COMPREPLY=( $( compgen -W '--db --preset \ + --spec \ --dev-nodes \ --test-hosts \ --one-node \ diff --git a/tools/test-runner.sh b/tools/test-runner.sh index 02d49a63f0..5d2d6f1c39 100755 --- a/tools/test-runner.sh +++ b/tools/test-runner.sh @@ -474,6 +474,10 @@ case $key in ( IFS=$'\n'; echo "${PRESETS_ARRAY[*]}" ) exit 0 ;; + --list-specs) + ( cd big_tests && ls -1 *.spec ) + exit 0 + ;; --list-dev-nodes) ( IFS=$'\n'; echo "${DEV_NODES_ARRAY[*]}" ) exit 0 From 5a108830903c4ef2bddfee6985bfb6c92918adc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chrz=C4=85szcz?= Date: Tue, 4 May 2021 10:23:08 +0200 Subject: [PATCH 7/7] Update test runner examples --- tools/test-runner.sh | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tools/test-runner.sh b/tools/test-runner.sh index 5d2d6f1c39..158194b9d5 100755 --- a/tools/test-runner.sh +++ b/tools/test-runner.sh @@ -61,7 +61,7 @@ EXAMPLES=$(cat <<-END Script examples: ./tools/test-runner.sh --db redis mysql --preset mysql_redis -- rdbms mam - Setups Redis and MySQL databases + Sets up Redis and MySQL databases Runs mam_SUITE and rdbms_SUITE -- is used to separate test suites from databases @@ -77,29 +77,32 @@ Script examples: Disables big tests and cover ./tools/test-runner.sh --skip-big-tests - Travis build job with small tests + CI build job with small tests ./tools/test-runner.sh --skip-small-tests --db redis --tls-dist --preset internal_mnesia - Travis build job with internal_mnesia + CI build job with internal_mnesia ./tools/test-runner.sh --skip-small-tests --db redis mysql --preset mysql_redis - Travis build job with mysql_redis + CI build job with mysql_redis ./tools/test-runner.sh --skip-small-tests --db redis mssql --preset odbc_mssql_mnesia - Travis build job with odbc_mssql_mnesia + CI build job with odbc_mssql_mnesia ./tools/test-runner.sh --skip-small-tests --db redis ldap --preset ldap_mnesia - Travis build job with ldap_mnesia + CI build job with ldap_mnesia ./tools/test-runner.sh --skip-small-tests --db redis elasticsearch cassandra --preset elasticsearch_and_cassandra_mnesia -- mam mongoose_cassandra mongoose_elasticsearch - Travis MAM-only build job with elasticsearch_and_cassandra_mnesia + CI MAM-only build job with elasticsearch_and_cassandra_mnesia Separator -- between presets and suites ./tools/test-runner.sh --db redis pgsql --preset pgsql_mnesia - Travis build job with pgsql_mnesia + CI build job with pgsql_mnesia + +./tools/test-runner.sh --db redis pgsql --preset pgsql_mnesia --spec dynamic_domains.spec + CI multi-tenancy build job with pgsql_mnesia ./tools/test-runner.sh --db redis riak --preset riak_mnesia - Travis build job with riak_mnesia + CI build job with riak_mnesia ./tools/test-runner.sh --skip-small-tests --db mysql --preset mysql_mnesia --skip-stop-nodes -- mam Runs mam_SUITE with MySQL