From f1d35f9d06e25f292f537217ce7f56034aabd432 Mon Sep 17 00:00:00 2001 From: DeadZen Date: Sat, 28 Jul 2012 17:43:56 -0400 Subject: [PATCH] Add ct_log_dir option, skip test dir with no SUITE When rebar ct executes with its default common test directory of "test", it will generate a hardcoded "logs" directory in every application with a test directory present, causing an overlap with eunit's test framework so even test directories with only eunit tests will be processed by ct. --- rebar.config.sample | 3 +++ src/rebar_ct.erl | 28 ++++++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/rebar.config.sample b/rebar.config.sample index a6f5bf7..4243924 100644 --- a/rebar.config.sample +++ b/rebar.config.sample @@ -86,6 +86,9 @@ %% Override the default "test" directory in which SUITEs are located {ct_dir, "itest"}. +%% Override the default "logs" directory in which SUITEs are logged +{ct_log_dir, "test/logs"}. + %% Option to pass extra parameters when launching Common Test {ct_extra_params, "-boot start_sasl -s myapp"}. diff --git a/src/rebar_ct.erl b/src/rebar_ct.erl index d2f45c3..50efeb1 100644 --- a/src/rebar_ct.erl +++ b/src/rebar_ct.erl @@ -47,23 +47,31 @@ ct(Config, File) -> TestDir = rebar_config:get_local(Config, ct_dir, "test"), - run_test_if_present(TestDir, Config, File). + LogDir = rebar_config:get_local(Config, ct_log_dir, "logs"), + run_test_if_present(TestDir, LogDir, Config, File). %% =================================================================== %% Internal functions %% =================================================================== -run_test_if_present(TestDir, Config, File) -> +run_test_if_present(TestDir, LogDir, Config, File) -> case filelib:is_dir(TestDir) of false -> ?WARN("~s directory not present - skipping\n", [TestDir]), ok; true -> - run_test(TestDir, Config, File) + case filelib:wildcard(TestDir ++ "/*_SUITE.erl") of + [] -> + ?WARN("~s directory present, but no common_test" + ++ " SUITES - skipping\n", [TestDir]), + ok; + _ -> + run_test(TestDir, LogDir, Config, File) + end end. -run_test(TestDir, Config, _File) -> - {Cmd, RawLog} = make_cmd(TestDir, Config), - clear_log(RawLog), +run_test(TestDir, LogDir, Config, _File) -> + {Cmd, RawLog} = make_cmd(TestDir, LogDir, Config), + clear_log(LogDir, RawLog), case rebar_config:is_verbose(Config) of false -> Output = " >> " ++ RawLog ++ " 2>&1"; @@ -75,8 +83,8 @@ run_test(TestDir, Config, _File) -> check_log(Config, RawLog). -clear_log(RawLog) -> - case filelib:ensure_dir("logs/index.html") of +clear_log(LogDir, RawLog) -> + case filelib:ensure_dir(filename:join(LogDir, "index.html")) of ok -> NowStr = rebar_utils:now_str(), LogHeader = "--- Test run on " ++ NowStr ++ " ---\n", @@ -120,9 +128,9 @@ show_log(Config, RawLog) -> ok end. -make_cmd(TestDir, Config) -> +make_cmd(TestDir, RawLogDir, Config) -> Cwd = rebar_utils:get_cwd(), - LogDir = filename:join(Cwd, "logs"), + LogDir = filename:join(Cwd, RawLogDir), EbinDir = filename:absname(filename:join(Cwd, "ebin")), IncludeDir = filename:join(Cwd, "include"), Include = case filelib:is_dir(IncludeDir) of