diff options
author | Luis Rascão <luis.rascao@gmail.com> | 2016-02-12 13:15:30 +0000 |
---|---|---|
committer | Luis Rascão <luis.rascao@gmail.com> | 2016-03-14 12:06:28 +0000 |
commit | 4802c0a6cac1aae2a6fc43a57d6cbd5c09fc4050 (patch) | |
tree | b54fc2a2a59f99095cd1b15c069408c26190b079 | |
parent | 13a570ed93220564460562e07fda9d90a0dd18dd (diff) | |
download | rebar-4802c0a6cac1aae2a6fc43a57d6cbd5c09fc4050.tar.gz |
Optionally look for ct .spec files in the ct_dir that was specified
Allow to change existing behaviour which is to find all .spec
files recursively in the current working directory through a new
rebar.config option: {ct_search_specs_from_test_dir, true}
This is confusing since the user explicitly stated the
location for his spec files and negates the possibility
to have different spec'ed suites for different environment.
Also fix the node name generation on the ct test run, append
a random number that will reduce chances of name collisions
on epmd.
-rw-r--r-- | inttest/ct4/ct4_rt.erl | 44 | ||||
-rw-r--r-- | inttest/ct4/deps/bar.test.spec | 1 | ||||
-rw-r--r-- | inttest/ct4/foo.test.spec | 1 | ||||
-rw-r--r-- | inttest/ct4/foo_SUITE.erl | 11 | ||||
-rw-r--r-- | inttest/ct4/rebar.config | 2 | ||||
-rw-r--r-- | rebar.config.sample | 4 | ||||
-rw-r--r-- | src/rebar_ct.erl | 20 |
7 files changed, 79 insertions, 4 deletions
diff --git a/inttest/ct4/ct4_rt.erl b/inttest/ct4/ct4_rt.erl new file mode 100644 index 0000000..bc010e8 --- /dev/null +++ b/inttest/ct4/ct4_rt.erl @@ -0,0 +1,44 @@ +%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*- +%% ex: ts=4 sw=4 et +-module(ct4_rt). + +-compile(export_all). + +setup([Target]) -> + retest_utils:load_module(filename:join(Target, "inttest_utils.erl")), + ok. + +files() -> + [ + {create, "ebin/foo.app", app(foo)}, + {copy, "rebar.config", "rebar.config"}, + {copy, "foo.test.spec", "test/foo.test.spec"}, + {copy, "deps/bar.test.spec", "deps/bar.test.spec"}, + {copy, "deps/bar.test.spec", "baz.test.spec"}, + {copy, "foo_SUITE.erl", "test/foo_SUITE.erl"} + ] ++ inttest_utils:rebar_setup(). + +run(_Dir) -> + Ref = retest:sh("./rebar compile ct -vvv", [async]), + {ok, [[CTRunCmd]]} = retest:sh_expect(Ref, "^\"ct_run.*", + [global, {capture, first, binary}]), + {match, _} = re:run(CTRunCmd, "foo.test.spec", [global]), + %% deps/bar.test.spec should be ignored by rebar_ct:collect_glob/3 + nomatch = re:run(CTRunCmd, "bar.test.spec", [global]), + %% baz.test.spec should be also ignored by rebar_ct:collect_glob/3 + %% since we specified in rebar.config that we want to search for + %% ct specs from the test dir + nomatch = re:run(CTRunCmd, "baz.test.spec", [global]), + ok. + +%% +%% Generate the contents of a simple .app file +%% +app(Name) -> + App = {application, Name, + [{description, atom_to_list(Name)}, + {vsn, "1"}, + {modules, []}, + {registered, []}, + {applications, [kernel, stdlib]}]}, + io_lib:format("~p.\n", [App]). diff --git a/inttest/ct4/deps/bar.test.spec b/inttest/ct4/deps/bar.test.spec new file mode 100644 index 0000000..a16610c --- /dev/null +++ b/inttest/ct4/deps/bar.test.spec @@ -0,0 +1 @@ +%% this test spec should be ignored diff --git a/inttest/ct4/foo.test.spec b/inttest/ct4/foo.test.spec new file mode 100644 index 0000000..1850410 --- /dev/null +++ b/inttest/ct4/foo.test.spec @@ -0,0 +1 @@ +{suites, "../", [foo_SUITE]}. diff --git a/inttest/ct4/foo_SUITE.erl b/inttest/ct4/foo_SUITE.erl new file mode 100644 index 0000000..fb4f56a --- /dev/null +++ b/inttest/ct4/foo_SUITE.erl @@ -0,0 +1,11 @@ +-module(foo_SUITE). + +-include_lib("common_test/include/ct.hrl"). + +-compile(export_all). + +all() -> [simple]. + +simple(Config) -> + io:format("Test: ~p\n", [Config]), + ok. diff --git a/inttest/ct4/rebar.config b/inttest/ct4/rebar.config new file mode 100644 index 0000000..387f8c3 --- /dev/null +++ b/inttest/ct4/rebar.config @@ -0,0 +1,2 @@ +{ct_dir, "test"}. +{ct_search_specs_from_test_dir, true}. diff --git a/rebar.config.sample b/rebar.config.sample index 916e47c..224c85c 100644 --- a/rebar.config.sample +++ b/rebar.config.sample @@ -148,6 +148,10 @@ %% Option to use short names (i.e., -sname test) when starting ct {ct_use_short_names, true}. +%% Recursively search for .spec files from the test dir, default +%% is false (ie. the search will be from the current working directory) +{ct_search_specs_from_test_dir, true}. + %% == QuickCheck == %% If qc_mod is unspecified, rebar tries to detect Triq or EQC diff --git a/src/rebar_ct.erl b/src/rebar_ct.erl index cf2059e..b27f661 100644 --- a/src/rebar_ct.erl +++ b/src/rebar_ct.erl @@ -66,6 +66,7 @@ info(help, ct) -> " ~p~n" " ~p~n" " ~p~n" + " ~p~n" "Valid command line options:~n" " suites=Suite1,Suite2,...,SuiteN~n" " - run Suite1_SUITE, Suite2_SUITE, ..., SuiteN_SUITE~n" @@ -81,7 +82,8 @@ info(help, ct) -> {ct_dir, "itest"}, {ct_log_dir, "test/logs"}, {ct_extra_params, "-boot start_sasl -s myapp"}, - {ct_use_short_names, true} + {ct_use_short_names, true}, + {ct_search_specs_from_test_dir, false} ]). run_test_if_present(TestDir, LogDir, Config, File) -> @@ -235,7 +237,7 @@ make_cmd(TestDir, RawLogDir, Config) -> CodeDirs = [io_lib:format("\"~s\"", [Dir]) || Dir <- [EbinDir|NonLibCodeDirs]], CodePathString = string:join(CodeDirs, " "), - Cmd = case get_ct_specs(Config, Cwd) of + Cmd = case get_ct_specs(Config, search_ct_specs_from(Cwd, TestDir, Config)) of undefined -> ?FMT("~s" " -pa ~s" @@ -276,10 +278,20 @@ make_cmd(TestDir, RawLogDir, Config) -> RawLog = filename:join(LogDir, "raw.log"), {Cmd, RawLog}. +search_ct_specs_from(Cwd, TestDir, Config) -> + case rebar_config:get_local(Config, ct_search_specs_from_test_dir, false) of + true -> filename:join(Cwd, TestDir); + false -> + Cwd + end. + build_name(Config) -> + %% generate a unique name for our test node, we want + %% to make sure the odds of name clashing are low + Random = integer_to_list(crypto:rand_uniform(0, 10000)), case rebar_config:get_local(Config, ct_use_short_names, false) of - true -> "-sname test"; - false -> " -name test@" ++ net_adm:localhost() + true -> "-sname test" ++ Random; + false -> " -name test" ++ Random ++ "@" ++ net_adm:localhost() end. get_extra_params(Config) -> |