Skip to content

Commit 2bde4e7

Browse files
authored
Merge pull request #4403 from esl/rerun-failed-tests
Enable 'rerun failed tests' for big tests in CircleCI
2 parents 96818b2 + 6c1acd8 commit 2bde4e7

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

tools/select_suites_to_run.erl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
%% Escript used to filter the test spec according to a list of allowed suites
2+
%% This is used to rerun failed tests on CircleCI
3+
%%
4+
%% Arguments: TEST_SPEC SUITE1 SUITE2 ..
5+
%% Example arguments: default.spec muc_SUITE rdbms_SUITE
6+
7+
-module(select_suites_to_run).
8+
-export([main/1]).
9+
10+
main([SpecFile | SuiteStrings]) ->
11+
Suites = [list_to_atom(Str) || Str <- SuiteStrings],
12+
io:format("Allowed suites: ~p~n", [Suites]),
13+
{ok, OldTerms} = file:consult(SpecFile),
14+
NewTerms = lists:filter(fun(Term) -> filter_term(Term, Suites) end, OldTerms),
15+
write_terms(SpecFile, NewTerms),
16+
ok.
17+
18+
filter_term(Term, Suites) when element(1, Term) == suites;
19+
element(1, Term) == groups;
20+
element(1, Term) == cases ->
21+
lists:member(element(3, Term), Suites);
22+
filter_term(_Term, _Suites) ->
23+
true.
24+
25+
write_terms(Filename, List) ->
26+
Format = fun(Term) -> io_lib:format("~tp.~n", [Term]) end,
27+
Text = lists:map(Format, List),
28+
file:write_file(Filename, Text).

tools/test.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ run_test_preset() {
145145
cd ${BASE}/big_tests
146146
local MAKE_RESULT=0
147147
TESTSPEC=${TESTSPEC:-default.spec}
148+
maybe_select_suites
148149
if [ "$COVER_ENABLED" = "true" ]; then
149150
make cover_test_preset TESTSPEC=$TESTSPEC PRESET=$PRESET CT_HOOKS=$CT_HOOKS
150151
MAKE_RESULT=$?
@@ -157,6 +158,14 @@ run_test_preset() {
157158
return ${MAKE_RESULT}
158159
}
159160

161+
maybe_select_suites() {
162+
if command -v circleci; then
163+
circleci tests glob tests/*_SUITE.erl | \
164+
circleci tests run --command=">selected_suites xargs -d' ' -I {} basename {} .erl"
165+
escript ../tools/select_suites_to_run.erl $TESTSPEC $(<selected_suites)
166+
fi
167+
}
168+
160169
print_running_nodes() {
161170
echo "Running nodes:"
162171
# Expand wildcard into a bash array

0 commit comments

Comments
 (0)