From bb79416b6ef536c1b64876d8c9fe5e596dd1320a Mon Sep 17 00:00:00 2001 From: Tuncer Ayaz Date: Fri, 18 Aug 2017 19:01:54 +0000 Subject: Drop crypto app reliance By doing this, we fix two issues at once. First, there's no need to have crypto available anymore. While not having crypto in your Erlang installation is a questionable packaging decision, it tends to happen in the wild with users installing Erlang and missing crypto. Sometimes this is not due to a distro's package but users building Erlang without the needed OpenSSL dependencies. Second, this resolves the Erlang 20 rng deprecation warnings. --- ebin/rebar.app | 1 - rebar.config | 3 ++- src/rebar.erl | 6 ------ src/rebar_ct.erl | 2 +- src/rebar_eunit.erl | 2 +- 5 files changed, 4 insertions(+), 10 deletions(-) diff --git a/ebin/rebar.app b/ebin/rebar.app index 9449e1e..b4c8b5a 100644 --- a/ebin/rebar.app +++ b/ebin/rebar.app @@ -55,7 +55,6 @@ stdlib, sasl, compiler, - crypto, syntax_tools, tools, eunit, diff --git a/rebar.config b/rebar.config index eda5a2c..6765415 100644 --- a/rebar.config +++ b/rebar.config @@ -32,7 +32,8 @@ - (\"diameter_dict_util\":\"parse\"/\"2\") - (\"erlang\":\"timestamp\"/\"0\") - (\"rebar_rnd\":\"seed\"/\"1\") - - (\"rebar_rnd\":\"uniform\"/\"0\"))", + - (\"rebar_rnd\":\"uniform\"/\"0\") + - (\"rebar_rnd\":\"uniform\"/\"1\"))", []}]}. {dialyzer, diff --git a/src/rebar.erl b/src/rebar.erl index 6f78fe6..fa7d060 100644 --- a/src/rebar.erl +++ b/src/rebar.erl @@ -208,12 +208,6 @@ profile(_Config, _Commands, Profiler) -> ?ABORT("Unsupported profiler: ~s~n", [Profiler]). run_aux(BaseConfig, Commands) -> - %% Make sure crypto is running - case crypto:start() of - ok -> ok; - {error,{already_started,crypto}} -> ok - end, - %% Make sure memoization server is running case rmemo:start() of {ok, _} -> ok; diff --git a/src/rebar_ct.erl b/src/rebar_ct.erl index b27f661..7c0f9d9 100644 --- a/src/rebar_ct.erl +++ b/src/rebar_ct.erl @@ -288,7 +288,7 @@ search_ct_specs_from(Cwd, TestDir, Config) -> 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)), + Random = integer_to_list(rebar_rnd:uniform(10000)), case rebar_config:get_local(Config, ct_use_short_names, false) of true -> "-sname test" ++ Random; false -> " -name test" ++ Random ++ "@" ++ net_adm:localhost() diff --git a/src/rebar_eunit.erl b/src/rebar_eunit.erl index ebf76bc..538f88b 100644 --- a/src/rebar_eunit.erl +++ b/src/rebar_eunit.erl @@ -279,7 +279,7 @@ randomize_suites(Config, Modules) -> undefined -> Modules; "true" -> - Seed = crypto:rand_uniform(1, 65535), + Seed = rebar_rnd:uniform(65535), randomize_suites1(Modules, Seed); String -> try list_to_integer(String) of -- cgit v1.2.1 From 13a865edcaa6959410747f805208a09781482e7b Mon Sep 17 00:00:00 2001 From: Tuncer Ayaz Date: Fri, 18 Aug 2017 21:02:55 +0000 Subject: Improve pseudo-unique ct_run node name Replacing crypto:rand_uniform(0, 10000) with rebar_rnd:uniform(10000) (which is either rand:uniform or random:uniform dependent on what otp version it runs on) fails in rebar_ct. One might assume it's because the old call requests a number >= 0 while the new call has no way to ask for anything but >= 1. However, the way the value is used doesn't rely on it to include 0, so the bug lies elsewhere. Actually, generating a random number to choose a pseudo-unique ct_run node name isn't a reliable method to avoid naming clashes. I cannot reproduce it locally and also cannot see the actual error in the CI logs. Mirroring what rebar_eunit does and using a bigger rng range seems to be enough to avoid node name clashes on Travis-CI. --- src/rebar_ct.erl | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/rebar_ct.erl b/src/rebar_ct.erl index 7c0f9d9..892ae03 100644 --- a/src/rebar_ct.erl +++ b/src/rebar_ct.erl @@ -237,6 +237,7 @@ make_cmd(TestDir, RawLogDir, Config) -> CodeDirs = [io_lib:format("\"~s\"", [Dir]) || Dir <- [EbinDir|NonLibCodeDirs]], CodePathString = string:join(CodeDirs, " "), + _ = rebar_rnd:seed({55, seconds(), 7331}), Cmd = case get_ct_specs(Config, search_ct_specs_from(Cwd, TestDir, Config)) of undefined -> ?FMT("~s" @@ -285,13 +286,18 @@ search_ct_specs_from(Cwd, TestDir, Config) -> Cwd end. +seconds() -> + calendar:datetime_to_gregorian_seconds(calendar:universal_time()). + 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(rebar_rnd:uniform(10000)), + Secs = integer_to_list(seconds()), + Random = integer_to_list(rebar_rnd:uniform(1000000)), + PseudoUnique = Random ++ "N" ++ Secs, case rebar_config:get_local(Config, ct_use_short_names, false) of - true -> "-sname test" ++ Random; - false -> " -name test" ++ Random ++ "@" ++ net_adm:localhost() + true -> "-sname test" ++ PseudoUnique; + false -> " -name test" ++ PseudoUnique ++ "@" ++ net_adm:localhost() end. get_extra_params(Config) -> -- cgit v1.2.1