Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
6581-Ensure-testsuites-only-write-to-temporary-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 6581-Ensure-testsuites-only-write-to-temporary-directory.patch of Package erlang
From 4daaa84cf99f26647ffa66f100c788eae533897d Mon Sep 17 00:00:00 2001 From: Anders Svensson <anders@erlang.org> Date: Fri, 18 Mar 2022 14:24:52 +0100 Subject: [PATCH] Ensure testsuites only write to temporary directory The compiler, codec, and examples testsuites wrote to pwd, which common_test changes to its priv_dir, but that isn't ideal without common_test. Write to a created temporary directory in this case. --- lib/diameter/test/diameter_app_SUITE.erl | 2 +- lib/diameter/test/diameter_codec_SUITE.erl | 29 ++++---- lib/diameter/test/diameter_compiler_SUITE.erl | 61 +++++++++------- lib/diameter/test/diameter_examples_SUITE.erl | 69 ++++++++++++------- lib/diameter/test/diameter_tls_SUITE.erl | 2 +- lib/diameter/test/diameter_util.erl | 2 +- 6 files changed, 98 insertions(+), 67 deletions(-) diff --git a/lib/diameter/test/diameter_app_SUITE.erl b/lib/diameter/test/diameter_app_SUITE.erl index 561d4283a2..adcc7114a1 100644 --- a/lib/diameter/test/diameter_app_SUITE.erl +++ b/lib/diameter/test/diameter_app_SUITE.erl @@ -76,7 +76,7 @@ run() -> run(all()). run(List) -> - Tmp = ?util:mktemp(filename:join(?util:tmpdir(), "diameter_app")), + Tmp = ?util:mktemp("diameter_app"), try run([{priv_dir, Tmp}], List) after diff --git a/lib/diameter/test/diameter_codec_SUITE.erl b/lib/diameter/test/diameter_codec_SUITE.erl index ff8a031460..f92b360dab 100644 --- a/lib/diameter/test/diameter_codec_SUITE.erl +++ b/lib/diameter/test/diameter_codec_SUITE.erl @@ -97,7 +97,7 @@ run(lib) -> %% Have a separate AVP dictionary just to exercise more code. run(unknown) -> - PD = ?util:mktemp(filename:join(?util:tmpdir(), "diameter_codec")), + PD = ?util:mktemp("diameter_codec"), DD = filename:join([code:lib_dir(diameter), "test", "diameter_codec_SUITE_data"]), @@ -132,24 +132,25 @@ run(List) -> %% =========================================================================== unknown(Priv, Data) -> - ok = make(Data, "recv.dia"), - ok = make(Data, "avps.dia"), - {ok, _, _} = compile("diameter_test_avps.erl"), - ok = make(Data, "send.dia"), - {ok, _, _} = compile("diameter_test_send.erl"), - {ok, _, _} = compile("diameter_test_recv.erl"), - {ok, _, _} = compile(filename:join([Data, "diameter_test_unknown.erl"]), + ok = make(Data, "recv.dia", Priv), + ok = make(Data, "avps.dia", Priv), + {ok, _, _} = compile(Priv, "diameter_test_avps.erl"), + ok = make(Data, "send.dia", Priv), + {ok, _, _} = compile(Priv, "diameter_test_send.erl"), + {ok, _, _} = compile(Priv, "diameter_test_recv.erl"), + {ok, _, _} = compile(Priv, + filename:join([Data, "diameter_test_unknown.erl"]), [{i, Priv}]), diameter_test_unknown:run(). -make(Dir, File) -> - diameter_make:codec(filename:join([Dir, File])). +make(Dir, File, Out) -> + diameter_make:codec(filename:join(Dir, File), [{outdir, Out}]). -compile(File) -> - compile(File, []). +compile(Dir, File) -> + compile(Dir, File, []). -compile(File, Opts) -> - compile:file(File, [return | Opts]). +compile(Dir, File, Opts) -> + compile:file(filename:join(Dir, File), [return | Opts]). %% =========================================================================== diff --git a/lib/diameter/test/diameter_compiler_SUITE.erl b/lib/diameter/test/diameter_compiler_SUITE.erl index 071ab26d08..cd886d4e8e 100644 --- a/lib/diameter/test/diameter_compiler_SUITE.erl +++ b/lib/diameter/test/diameter_compiler_SUITE.erl @@ -383,31 +383,46 @@ run() -> %% run/1 -run(List) -> +run(List) + when is_list(List) -> + Tmp = ?util:mktemp("diameter_compiler"), + try + run(List, Tmp) + after + file:del_dir_r(Tmp) + end. + +%% run/2 + +run(List, Dir) + when is_list(List) -> Path = filename:join([code:lib_dir(diameter, src), "dict", ?base]), {ok, Bin} = file:read_file(Path), - ?util:run([{{?MODULE, F, [Bin]}, 180000} || F <- List]). + ?util:run([{{?MODULE, F, [{Bin, Dir}]}, 180000} || F <- List]); + +run(F, Config) -> + run([F], proplists:get_value(priv_dir, Config)). %% =========================================================================== %% format/1 %% %% Ensure that parse o format is the identity map. -format(<<_/binary>> = Bin) -> +format({<<_/binary>> = Bin, _Dir}) -> ?util:run([{?MODULE, format, [{M, Bin}]} || E <- ?REPLACE, {ok, M} <- [norm(E)]]); format({Mods, Bin}) -> B = modify(Bin, Mods), - {ok, Dict} = parse(B, []), - {ok, D} = parse(diameter_make:format(Dict), []), + {ok, Dict} = parse(B), + {ok, D} = parse(diameter_make:format(Dict)), {Dict, Dict} = {Dict, D}; -format(_Config) -> - run([format]). +format(Config) -> + run(format, Config). -parse(File, Opts) -> - case diameter_make:codec(File, [parse, hrl, return | Opts]) of +parse(File) -> + case diameter_make:codec(File, [parse, hrl, return]) of {ok, [Dict, _]} -> {ok, Dict}; {error, _} = E -> @@ -420,21 +435,21 @@ parse(File, Opts) -> %% Ensure the expected success/error when parsing a morphed common %% dictionary. -replace(<<_/binary>> = Bin) -> +replace({<<_/binary>> = Bin, _Dir}) -> ?util:run([{?MODULE, replace, [{N, Bin}]} || E <- ?REPLACE, N <- [norm(E)]]); replace({{E, Mods}, Bin}) -> B = modify(Bin, Mods), - case {E, parse(B, [{include, here()}]), Mods} of + case {E, parse(B), Mods} of {ok, {ok, Dict}, _} -> Dict; {_, {error, {E,_} = T}, _} when E /= ok -> diameter_make:format_error(T) end; -replace(_Config) -> - run([replace]). +replace(Config) -> + run(replace, Config). re({RE, Repl}, Bin) -> re:replace(Bin, RE, Repl, [multiline]). @@ -444,25 +459,26 @@ re({RE, Repl}, Bin) -> %% %% Ensure success when generating code and compiling. -generate(<<_/binary>> = Bin) -> +generate({<<_/binary>> = Bin, Dir}) -> Rs = lists:zip(?REPLACE, lists:seq(1, length(?REPLACE))), - ?util:run([{?MODULE, generate, [{M, Bin, N, T}]} + ?util:run([{?MODULE, generate, [{M, Bin, N, T, Dir}]} || {E,N} <- Rs, {ok, M} <- [norm(E)], T <- [erl, hrl, parse, forms]]); -generate({Mods, Bin, N, Mode}) -> +generate({Mods, Bin, N, Mode, Dir}) -> B = modify(Bin, Mods ++ [{"@name .*", "@name dict" ++ ?L(N)}]), - {ok, Dict} = parse(B, []), + {ok, Dict} = parse(B), File = "dict" ++ integer_to_list(N), {_, ok} = {Dict, diameter_make:codec(Dict, [{name, File}, {prefix, "base"}, + {outdir, Dir}, Mode])}, - generate(Mode, File, Dict); + generate(Mode, filename:join(Dir, File), Dict); -generate(_Config) -> - run([generate]). +generate(Config) -> + run(generate, Config). generate(erl, File, _) -> {ok, _} = compile:file(File ++ ".erl", [return_errors]); @@ -487,7 +503,7 @@ flatten1({Key, BaseD, FlatD}) -> flatten1(_) -> [Vsn | BaseD] = diameter_gen_base_rfc6733:dict(), - {ok, I} = parse("@inherits diameter_gen_base_rfc6733\n", []), + {ok, I} = parse("@inherits diameter_gen_base_rfc6733\n"), [Vsn | FlatD] = diameter_make:flatten(I), ?util:run([{?MODULE, flatten1, [{K, BaseD, FlatD}]} || K <- [avp_types, grouped, enum]]). @@ -584,8 +600,5 @@ norm({E, RE, Repl}) -> norm({_,_} = T) -> T. -here() -> - filename:dirname(code:which(?MODULE)). - dict() -> [0 | orddict:new()]. diff --git a/lib/diameter/test/diameter_tls_SUITE.erl b/lib/diameter/test/diameter_tls_SUITE.erl index 4e8cde95d3..1e7f7ed50a 100644 --- a/lib/diameter/test/diameter_tls_SUITE.erl +++ b/lib/diameter/test/diameter_tls_SUITE.erl @@ -149,7 +149,7 @@ dir(Config) -> %% =========================================================================== run() -> - Tmp = ?util:mktemp(filename:join(?util:tmpdir(), "diameter_tls")), + Tmp = ?util:mktemp("diameter_tls"), try run(Tmp, true) after diff --git a/lib/diameter/test/diameter_util.erl b/lib/diameter/test/diameter_util.erl index feb8a74e5f..ab5f5d10a3 100644 --- a/lib/diameter/test/diameter_util.erl +++ b/lib/diameter/test/diameter_util.erl @@ -208,7 +208,7 @@ tmpdir() -> mktemp(Prefix) -> Suf = integer_to_list(erlang:monotonic_time()), - Tmp = Prefix ++ "." ++ Suf, + Tmp = filename:join(tmpdir(), Prefix ++ "." ++ Suf), ok = file:make_dir(Tmp), Tmp. -- 2.34.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor