mirror of
https://github.com/correl/rebar.git
synced 2024-11-23 19:19:54 +00:00
Add random_suite_order option to eunit command
Option takes either 'true' or a numeric seed value. If true is passed, a random seed is generated and used. The numeric seed value is for repeatability. The idea here is to root out test suites that are order dependant, or that fail in the presence of certain orderings.
This commit is contained in:
parent
fa679b4343
commit
03da5e0be0
1 changed files with 28 additions and 1 deletions
|
@ -150,7 +150,7 @@ run_eunit(Config, CodePath, SrcErls) ->
|
|||
AllBeamFiles),
|
||||
OtherBeamFiles = TestBeamFiles --
|
||||
[filename:rootname(N) ++ "_tests.beam" || N <- AllBeamFiles],
|
||||
ModuleBeamFiles = BeamFiles ++ OtherBeamFiles,
|
||||
ModuleBeamFiles = randomize_suites(Config, BeamFiles ++ OtherBeamFiles),
|
||||
|
||||
%% Get modules to be run in eunit
|
||||
AllModules = [rebar_utils:beam_to_mod(?EUNIT_DIR, N) || N <- AllBeamFiles],
|
||||
|
@ -233,6 +233,33 @@ get_suites(Config) ->
|
|||
Suites
|
||||
end.
|
||||
|
||||
%%
|
||||
%% == randomize suites ==
|
||||
%%
|
||||
|
||||
randomize_suites(Config, Modules) ->
|
||||
case rebar_config:get_global(Config, random_suite_order, undefined) of
|
||||
undefined ->
|
||||
Modules;
|
||||
"true" ->
|
||||
Seed = crypto:rand_uniform(1, 65535),
|
||||
randomize_suites1(Modules, Seed);
|
||||
String ->
|
||||
try list_to_integer(String) of
|
||||
Seed ->
|
||||
randomize_suites1(Modules, Seed)
|
||||
catch
|
||||
error:badarg ->
|
||||
?ERROR("Bad random seed provided: ~p~n", [String]),
|
||||
?FAIL
|
||||
end
|
||||
end.
|
||||
|
||||
randomize_suites1(Modules, Seed) ->
|
||||
random:seed(35, Seed, 1337),
|
||||
?CONSOLE("Randomizing suite order with seed ~b~n", [Seed]),
|
||||
[X||{_,X} <- lists:sort([{random:uniform(), M} || M <- Modules])].
|
||||
|
||||
%%
|
||||
%% == get matching tests ==
|
||||
%%
|
||||
|
|
Loading…
Reference in a new issue