diff options
author | Raimo Niskanen <[email protected]> | 2018-11-09 16:01:58 +0100 |
---|---|---|
committer | Raimo Niskanen <[email protected]> | 2018-11-14 15:37:13 +0100 |
commit | 0727fa2e5c1ce8633096d4ad7c7f5f40e81d2264 (patch) | |
tree | 928d9333c7675b658fba54418f83be6ae5d32cc7 /lib/crypto | |
parent | a4ab1f1026bdefa2f7434b288e2894f2efe81acb (diff) | |
download | otp-0727fa2e5c1ce8633096d4ad7c7f5f40e81d2264.tar.gz otp-0727fa2e5c1ce8633096d4ad7c7f5f40e81d2264.tar.bz2 otp-0727fa2e5c1ce8633096d4ad7c7f5f40e81d2264.zip |
Parallel stress test strong_rand_bytes
Diffstat (limited to 'lib/crypto')
-rw-r--r-- | lib/crypto/test/crypto_SUITE.erl | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/crypto/test/crypto_SUITE.erl b/lib/crypto/test/crypto_SUITE.erl index 025c46aab0..6b7ed06797 100644 --- a/lib/crypto/test/crypto_SUITE.erl +++ b/lib/crypto/test/crypto_SUITE.erl @@ -38,6 +38,7 @@ all() -> mod_pow, exor, rand_uniform, + rand_threads, rand_plugin, rand_plugin_s ]. @@ -605,6 +606,25 @@ rand_uniform(Config) when is_list(Config) -> 10 = byte_size(crypto:strong_rand_bytes(10)). %%-------------------------------------------------------------------- +rand_threads() -> + [{doc, "strong_rand_bytes in parallel threads"}]. +rand_threads(Config) when is_list(Config) -> + %% This will crash the emulator on at least one version of libcrypto + %% with buggy multithreading in RAND_bytes(). + %% The test needs to run at least a few minutes... + NofThreads = 4, + Fun = fun F() -> crypto:strong_rand_bytes(16), F() end, + PidRefs = [spawn_monitor(Fun) || _ <- lists:seq(1, NofThreads)], +%%% The test case takes too much time to run. +%%% Keep it around for reference by setting it down to just 10 seconds. +%%% receive after 10 * 60 * 1000 -> ok end, % 10 minutes + receive after 10 * 1000 -> ok end, % 10 seconds + spawn_link(fun () -> receive after 5000 -> exit(timeout) end end), + [exit(Pid, stop) || {Pid,_Ref} <- PidRefs], + [receive {'DOWN',Ref,_,_,stop} -> ok end || {_Pid,Ref} <- PidRefs], + ok. + +%%-------------------------------------------------------------------- rand_plugin() -> [{doc, "crypto rand plugin testing (implicit state / process dictionary)"}]. rand_plugin(Config) when is_list(Config) -> |