From 7cc68fb4820f68e21867bb8f16172e8f72d04edc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Sun, 17 Apr 2016 08:03:09 +0200 Subject: int_SUITE: Fix interpretable/1 on cross-compiled platforms c7e82c6b406b teached the debugger to use the 'source' key in Mod:module_info/1 to help locate the source code corresponding to a BEAM file. The new test that was added at the same time will fail if the test suites were cross-compiled on another computer (i.e., the 'source' key would not point to the source file on the target computer). Avoid the problem by letting int_SUITE:init_per_suite/1 compile the BEAM files. That will ensure that 'source' keys points to the actual source file. --- lib/debugger/test/int_SUITE.erl | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'lib/debugger/test/int_SUITE.erl') diff --git a/lib/debugger/test/int_SUITE.erl b/lib/debugger/test/int_SUITE.erl index af8f5256cb..38b43bdcb0 100644 --- a/lib/debugger/test/int_SUITE.erl +++ b/lib/debugger/test/int_SUITE.erl @@ -71,6 +71,14 @@ groups() -> {append, [], [append_1, append_2]}]. init_per_suite(Config) -> + DataDir = proplists:get_value(data_dir, Config), + {ok,OldCwd} = file:get_cwd(), + try + ok = file:set_cwd(DataDir), + make:all() + after + file:set_cwd(OldCwd) + end, Config. end_per_suite(_Config) -> -- cgit v1.2.3 From 6c9822baad0ad7e0c535a023b45cee24619b301e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Sun, 17 Apr 2016 08:22:21 +0200 Subject: int_SUITE: Fix interpretable/1 in a non-installed system interpretable/1 tests (among other things) that we are not allowed to interpret modules in certain applications (such as kernel and stdlib). int:interpretable/1 as currently implement enforces the restriction only in an installed system (the applications must have versions, such as kernel-1.2.3). We could modify int:interpretable/1 to enforce the restriction, but it could sometimes be useful to be able to debug (for example) erl_lint or other library modules that can safely be reloaded without crashing the run-time system. Therefore, assume that anyone working in a non-installed system knows what they are doing and fix the test case so that it stop failing in a non-installed system. --- lib/debugger/test/int_SUITE.erl | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) (limited to 'lib/debugger/test/int_SUITE.erl') diff --git a/lib/debugger/test/int_SUITE.erl b/lib/debugger/test/int_SUITE.erl index 38b43bdcb0..31257d16e9 100644 --- a/lib/debugger/test/int_SUITE.erl +++ b/lib/debugger/test/int_SUITE.erl @@ -284,20 +284,29 @@ interpretable(Config) when is_list(Config) -> ?line {error, badarg} = int:interpretable("prejudice.erl"), %% {error, {app,App}} - ?line {error, {app,_}} = int:interpretable(file), - ?line {error, {app,_}} = int:interpretable(lists), - ?line case int:interpretable(dbg_ieval) of - {error, {app,_}} -> - ok; - {error, badarg} -> - case code:which(dbg_ieval) of - cover_compiled -> - ok; - Other1 -> - ?line ?t:fail({unexpected_result, Other1}) - end; - Other2 -> - ?line ?t:fail({unexpected_result, Other2}) - end, - + case filename:basename(code:lib_dir(kernel)) of + "kernel" -> + %% Development system (not installed). We are allowed + %% to interpret modules in kernel and stdlib + %% (at our own risk). + ok; + "kernel-" ++ _ -> + %% Installed system. Certain applications (including + %% kernel and stdlib) cannot be interpreted. + {error, {app,_}} = int:interpretable(file), + {error, {app,_}} = int:interpretable(lists), + case int:interpretable(dbg_ieval) of + {error, {app,_}} -> + ok; + {error, badarg} -> + case code:which(dbg_ieval) of + cover_compiled -> + ok; + Other1 -> + ct:fail({unexpected_result, Other1}) + end; + Other2 -> + ct:fail({unexpected_result, Other2}) + end + end, ok. -- cgit v1.2.3 From 87c18e235cbcce8edc19d3bb154bf0cfa51a7c62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Fri, 26 Feb 2016 06:47:38 +0100 Subject: Modernize use of timetraps Either rely on the default 30 minutes timetrap, or set the timeout using the supported methods in common_test. --- lib/debugger/test/int_SUITE.erl | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'lib/debugger/test/int_SUITE.erl') diff --git a/lib/debugger/test/int_SUITE.erl b/lib/debugger/test/int_SUITE.erl index 31257d16e9..4601e516b2 100644 --- a/lib/debugger/test/int_SUITE.erl +++ b/lib/debugger/test/int_SUITE.erl @@ -31,12 +31,8 @@ -export([interpret/1, guards/1, interpretable/1]). -export([ append_1/1, append_2/1, member/1, reverse/1]). -%% Default timetrap timeout (set in init_per_testcase) --define(default_timeout, ?t:minutes(1)). - init_per_testcase(interpretable, Config) -> - ?line Dog=test_server:timetrap(?default_timeout), - [{watchdog, Dog}|Config]; + Config; init_per_testcase(_Case, Config) -> %% Interpret some existing and non-existing modules @@ -44,12 +40,9 @@ init_per_testcase(_Case, Config) -> ?line {module, lists1} = int:i(filename:join([DataDir,lists1])), ?line {module, guards} = int:i(filename:join([DataDir,guards])), - ?line Dog=test_server:timetrap(?default_timeout), - [{watchdog, Dog}|Config]. + Config. -end_per_testcase(interpretable, Config) -> - ?line Dog=?config(watchdog, Config), - ?line test_server:timetrap_cancel(Dog), +end_per_testcase(interpretable, _Config) -> ok; end_per_testcase(_Case, Config) -> @@ -57,11 +50,11 @@ end_per_testcase(_Case, Config) -> ?line ok = int:n(lists1), ?line ok = int:n(guards), - ?line Dog=?config(watchdog, Config), - ?line test_server:timetrap_cancel(Dog), ?line ok. -suite() -> [{ct_hooks,[ts_install_cth]}]. +suite() -> + [{ct_hooks,[ts_install_cth]}, + {timetrap,{minutes,1}}]. all() -> [interpret, guards, {group, list_suite}, interpretable]. -- cgit v1.2.3 From 26c6f622ce12e865a229b51ff503f852df56d82d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Mon, 18 Apr 2016 08:11:59 +0200 Subject: Use proplists:get_value/2 instead of ?config() --- lib/debugger/test/int_SUITE.erl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'lib/debugger/test/int_SUITE.erl') diff --git a/lib/debugger/test/int_SUITE.erl b/lib/debugger/test/int_SUITE.erl index 4601e516b2..9d9211542c 100644 --- a/lib/debugger/test/int_SUITE.erl +++ b/lib/debugger/test/int_SUITE.erl @@ -36,7 +36,7 @@ init_per_testcase(interpretable, Config) -> init_per_testcase(_Case, Config) -> %% Interpret some existing and non-existing modules - ?line DataDir = ?config(data_dir, Config), + DataDir = proplists:get_value(data_dir, Config), ?line {module, lists1} = int:i(filename:join([DataDir,lists1])), ?line {module, guards} = int:i(filename:join([DataDir,guards])), @@ -92,7 +92,7 @@ interpret(Config) when is_list(Config) -> ?line int:n(int:interpreted()), %% Interpret some existing and non-existing modules - ?line DataDir = ?config(data_dir, Config), + DataDir = proplists:get_value(data_dir, Config), ?line {module, lists1} = int:i(filename:join([DataDir,lists1])), ?line {module, ordsets1} = int:i(filename:join([DataDir,ordsets1])), ?line error = int:i(non_existent_module), @@ -240,14 +240,14 @@ interpretable(Config) when is_list(Config) -> end, %% true - ?line DataDir = filename:dirname(?config(data_dir, Config)), + DataDir = filename:dirname(proplists:get_value(data_dir, Config)), ?line true = code:add_patha(DataDir), ?line true = int:interpretable(lists1), ?line true = int:interpretable(filename:join([DataDir,lists1])), ?line true = code:del_path(DataDir), %% true (from source) - PrivDir = filename:join(?config(priv_dir, Config), ""), + PrivDir = filename:join(proplists:get_value(priv_dir, Config), ""), {ok, _} = file:copy(filename:join([DataDir,"lists1.beam"]), filename:join([PrivDir,"lists1.beam"])), true = code:add_patha(PrivDir), -- cgit v1.2.3 From 55e875d6b507ab51dfc62f63fb40918e9275fbb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Mon, 18 Apr 2016 08:16:21 +0200 Subject: Eliminate use of test_server:format() --- lib/debugger/test/int_SUITE.erl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'lib/debugger/test/int_SUITE.erl') diff --git a/lib/debugger/test/int_SUITE.erl b/lib/debugger/test/int_SUITE.erl index 9d9211542c..4aae08810b 100644 --- a/lib/debugger/test/int_SUITE.erl +++ b/lib/debugger/test/int_SUITE.erl @@ -126,10 +126,10 @@ append_1(suite) -> append_1(doc) -> []; append_1(Config) when is_list(Config) -> - ?line test_server:format("In append_1~n"), - ?line test_server:format("code:which(lists1)=~p~n", + io:format("In append_1~n"), + io:format("code:which(lists1)=~p~n", [code:which(lists1)]), - ?line test_server:format("lists1:append([a],[b])=~p~n", + io:format("lists1:append([a],[b])=~p~n", [spawn_eval(lists1,append,[[a],[b]])]), ?line "abcdef"=spawn_eval(lists1,append,[["abc","def"]]), @@ -143,8 +143,8 @@ append_2(suite) -> append_2(doc) -> []; append_2(Config) when is_list(Config) -> - ?line test_server:format("In append_2~n"), - ?line test_server:format("code:which(lists1)=~p~n", + io:format("In append_2~n"), + io:format("code:which(lists1)=~p~n", [code:which(lists1)]), ?line "abcdef"=spawn_eval(lists1,append,["abc", "def"]), -- cgit v1.2.3 From e51364ed716fe373a0f4c6a02ed5d9740428265f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Mon, 18 Apr 2016 08:24:13 +0200 Subject: Eliminate doc and suite clauses --- lib/debugger/test/int_SUITE.erl | 43 ++++++++--------------------------------- 1 file changed, 8 insertions(+), 35 deletions(-) (limited to 'lib/debugger/test/int_SUITE.erl') diff --git a/lib/debugger/test/int_SUITE.erl b/lib/debugger/test/int_SUITE.erl index 4aae08810b..01bdc16b0a 100644 --- a/lib/debugger/test/int_SUITE.erl +++ b/lib/debugger/test/int_SUITE.erl @@ -84,10 +84,7 @@ end_per_group(_GroupName, Config) -> Config. -interpret(suite) -> - []; -interpret(doc) -> - ["Interpreting modules"]; +%% Interpreting modules. interpret(Config) when is_list(Config) -> ?line int:n(int:interpreted()), @@ -111,20 +108,10 @@ interpret(Config) when is_list(Config) -> ok. -guards(suite) -> - []; -guards(doc) -> - "Evaluate guards."; +%% Evaluate guards. guards(Config) when is_list(Config) -> ok = guards:guards(). - - - -append_1(suite) -> - []; -append_1(doc) -> - []; append_1(Config) when is_list(Config) -> io:format("In append_1~n"), io:format("code:which(lists1)=~p~n", @@ -138,10 +125,6 @@ append_1(Config) when is_list(Config) -> ?line [10, [elem]]=spawn_eval(lists1,append,[[[10], [[elem]]]]), ok. -append_2(suite) -> - []; -append_2(doc) -> - []; append_2(Config) when is_list(Config) -> io:format("In append_2~n"), io:format("code:which(lists1)=~p~n", @@ -152,10 +135,6 @@ append_2(Config) when is_list(Config) -> ?line [10, [elem]]=spawn_eval(lists1,append,[[10], [[elem]]]), ok. -reverse(suite) -> - []; -reverse(doc) -> - []; reverse(Config) when is_list(Config) -> ?line ok=reverse_test(0), ?line ok=reverse_test(1), @@ -180,14 +159,11 @@ reverse_test(Num) -> error end. -member(suite) -> - []; -member(doc) -> - ["Tests the lists1:member() implementation. The function " - "is `non-blocking', and only processes 2000 elements " - "at a time.", - "This test case depends on lists1:reverse() to work, " - "wich is tested in a separate test case."]; +%% Tests the lists1:member() implementation. The function +%% is `non-blocking', and only processes 2000 elements +%% at a time. +%% This test case depends on lists1:reverse() to work, +%% which is tested in a separate test case. member(Config) when list(Config) -> ?line ok=member_test(0), ?line ok=member_test(1), @@ -224,10 +200,7 @@ spawn_eval(M,F,A) -> evaluator(Pid, M,F,A) -> Pid ! (catch apply(M,F,A)). -interpretable(suite) -> - []; -interpretable(doc) -> - ["Test int:interpretable/1"]; +%% Test int:interpretable/1. interpretable(Config) when is_list(Config) -> %% First make sure that 'lists1' is not loaded -- cgit v1.2.3 From 5f91c7307220d629f76ef1a914a480ba2a3d018e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Wed, 2 Mar 2016 06:50:54 +0100 Subject: Remove ?line macros While we are it, also re-ident the files. --- lib/debugger/test/int_SUITE.erl | 104 ++++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 52 deletions(-) (limited to 'lib/debugger/test/int_SUITE.erl') diff --git a/lib/debugger/test/int_SUITE.erl b/lib/debugger/test/int_SUITE.erl index 01bdc16b0a..f697ace4e5 100644 --- a/lib/debugger/test/int_SUITE.erl +++ b/lib/debugger/test/int_SUITE.erl @@ -37,8 +37,8 @@ init_per_testcase(_Case, Config) -> %% Interpret some existing and non-existing modules DataDir = proplists:get_value(data_dir, Config), - ?line {module, lists1} = int:i(filename:join([DataDir,lists1])), - ?line {module, guards} = int:i(filename:join([DataDir,guards])), + {module, lists1} = int:i(filename:join([DataDir,lists1])), + {module, guards} = int:i(filename:join([DataDir,guards])), Config. @@ -47,10 +47,10 @@ end_per_testcase(interpretable, _Config) -> end_per_testcase(_Case, Config) -> %% Quit interpreting - ?line ok = int:n(lists1), - ?line ok = int:n(guards), + ok = int:n(lists1), + ok = int:n(guards), - ?line ok. + ok. suite() -> [{ct_hooks,[ts_install_cth]}, @@ -86,25 +86,25 @@ end_per_group(_GroupName, Config) -> %% Interpreting modules. interpret(Config) when is_list(Config) -> - ?line int:n(int:interpreted()), + int:n(int:interpreted()), %% Interpret some existing and non-existing modules DataDir = proplists:get_value(data_dir, Config), - ?line {module, lists1} = int:i(filename:join([DataDir,lists1])), - ?line {module, ordsets1} = int:i(filename:join([DataDir,ordsets1])), - ?line error = int:i(non_existent_module), + {module, lists1} = int:i(filename:join([DataDir,lists1])), + {module, ordsets1} = int:i(filename:join([DataDir,ordsets1])), + error = int:i(non_existent_module), %% Check that the interpreter has the right view. - ?line ExpectedResult = lists:sort([lists1, ordsets1]), - ?line Result = int:interpreted(), - ?line ExpectedResult = lists:sort(Result), + ExpectedResult = lists:sort([lists1, ordsets1]), + Result = int:interpreted(), + ExpectedResult = lists:sort(Result), %% Uniterpret the modules. - ?line ok = int:n(non_existent_module), - ?line ok = int:n(lists1), - ?line [ordsets1] = int:interpreted(), - ?line ok = int:n("ordsets1"), - ?line [] = int:interpreted(), + ok = int:n(non_existent_module), + ok = int:n(lists1), + [ordsets1] = int:interpreted(), + ok = int:n("ordsets1"), + [] = int:interpreted(), ok. @@ -115,31 +115,31 @@ guards(Config) when is_list(Config) -> append_1(Config) when is_list(Config) -> io:format("In append_1~n"), io:format("code:which(lists1)=~p~n", - [code:which(lists1)]), + [code:which(lists1)]), io:format("lists1:append([a],[b])=~p~n", - [spawn_eval(lists1,append,[[a],[b]])]), + [spawn_eval(lists1,append,[[a],[b]])]), - ?line "abcdef"=spawn_eval(lists1,append,[["abc","def"]]), - ?line [hej, du,[glade, [bagare]]]= + "abcdef"=spawn_eval(lists1,append,[["abc","def"]]), + [hej, du,[glade, [bagare]]]= spawn_eval(lists1,append,[[[hej], [du], [[glade, [bagare]]]]]), - ?line [10, [elem]]=spawn_eval(lists1,append,[[[10], [[elem]]]]), + [10, [elem]]=spawn_eval(lists1,append,[[[10], [[elem]]]]), ok. append_2(Config) when is_list(Config) -> io:format("In append_2~n"), io:format("code:which(lists1)=~p~n", - [code:which(lists1)]), + [code:which(lists1)]), - ?line "abcdef"=spawn_eval(lists1,append,["abc", "def"]), - ?line [hej, du]=spawn_eval(lists1,append,[[hej], [du]]), - ?line [10, [elem]]=spawn_eval(lists1,append,[[10], [[elem]]]), + "abcdef"=spawn_eval(lists1,append,["abc", "def"]), + [hej, du]=spawn_eval(lists1,append,[[hej], [du]]), + [10, [elem]]=spawn_eval(lists1,append,[[10], [[elem]]]), ok. reverse(Config) when is_list(Config) -> - ?line ok=reverse_test(0), - ?line ok=reverse_test(1), - ?line ok=reverse_test(2), - ?line ok=reverse_test(537), + ok=reverse_test(0), + ok=reverse_test(1), + ok=reverse_test(2), + ok=reverse_test(537), ok. reverse_test(0) -> @@ -165,10 +165,10 @@ reverse_test(Num) -> %% This test case depends on lists1:reverse() to work, %% which is tested in a separate test case. member(Config) when list(Config) -> - ?line ok=member_test(0), - ?line ok=member_test(1), - ?line ok=member_test(100), - ?line ok=member_test(537), + ok=member_test(0), + ok=member_test(1), + ok=member_test(100), + ok=member_test(537), ok. member_test(0) -> @@ -206,39 +206,39 @@ interpretable(Config) when is_list(Config) -> %% First make sure that 'lists1' is not loaded case code:is_loaded(lists1) of {file, _Loaded} -> - ?line code:purge(lists1), - ?line code:delete(lists1), - ?line code:purge(lists1); + code:purge(lists1), + code:delete(lists1), + code:purge(lists1); false -> ignore end, %% true DataDir = filename:dirname(proplists:get_value(data_dir, Config)), - ?line true = code:add_patha(DataDir), - ?line true = int:interpretable(lists1), - ?line true = int:interpretable(filename:join([DataDir,lists1])), - ?line true = code:del_path(DataDir), + true = code:add_patha(DataDir), + true = int:interpretable(lists1), + true = int:interpretable(filename:join([DataDir,lists1])), + true = code:del_path(DataDir), %% true (from source) PrivDir = filename:join(proplists:get_value(priv_dir, Config), ""), {ok, _} = file:copy(filename:join([DataDir,"lists1.beam"]), - filename:join([PrivDir,"lists1.beam"])), + filename:join([PrivDir,"lists1.beam"])), true = code:add_patha(PrivDir), true = int:interpretable(lists1), ok = file:delete(filename:join([PrivDir,"lists1.beam"])), %% {error, no_beam} Src = filename:join([PrivDir,"lists1.erl"]), - ?line {ok, _} = file:copy(filename:join([DataDir,"lists1.erl"]), - Src), - ?line {error, no_beam} = int:interpretable(Src), + {ok, _} = file:copy(filename:join([DataDir,"lists1.erl"]), + Src), + {error, no_beam} = int:interpretable(Src), %% {error, no_debug_info} - ?line {ok, _} = compile:file(Src, [{outdir,PrivDir}]), - ?line {error, no_debug_info} = int:interpretable(Src), - ?line {error, no_debug_info} = int:interpretable(lists1), - ?line ok = file:delete(Src), - ?line true = code:del_path(PrivDir), + {ok, _} = compile:file(Src, [{outdir,PrivDir}]), + {error, no_debug_info} = int:interpretable(Src), + {error, no_debug_info} = int:interpretable(lists1), + ok = file:delete(Src), + true = code:del_path(PrivDir), %% {error, no_src} {ok, lists2, Binary} = compile:forms([{attribute,1,module,lists2}], []), @@ -246,8 +246,8 @@ interpretable(Config) when is_list(Config) -> {error, no_src} = int:interpretable(lists2), %% {error, badarg} - ?line {error, badarg} = int:interpretable(pride), - ?line {error, badarg} = int:interpretable("prejudice.erl"), + {error, badarg} = int:interpretable(pride), + {error, badarg} = int:interpretable("prejudice.erl"), %% {error, {app,App}} case filename:basename(code:lib_dir(kernel)) of -- cgit v1.2.3