summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Rascão <luis.rascao@gmail.com>2016-02-12 13:15:30 +0000
committerLuis Rascão <luis.rascao@gmail.com>2016-03-14 12:06:28 +0000
commit4802c0a6cac1aae2a6fc43a57d6cbd5c09fc4050 (patch)
treeb54fc2a2a59f99095cd1b15c069408c26190b079
parent13a570ed93220564460562e07fda9d90a0dd18dd (diff)
downloadrebar-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.erl44
-rw-r--r--inttest/ct4/deps/bar.test.spec1
-rw-r--r--inttest/ct4/foo.test.spec1
-rw-r--r--inttest/ct4/foo_SUITE.erl11
-rw-r--r--inttest/ct4/rebar.config2
-rw-r--r--rebar.config.sample4
-rw-r--r--src/rebar_ct.erl20
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) ->