diff options
| author | Björn-Egil Dahlberg <[email protected]> | 2013-05-03 18:59:54 +0200 | 
|---|---|---|
| committer | Björn-Egil Dahlberg <[email protected]> | 2013-05-03 18:59:54 +0200 | 
| commit | dd88004c973eb582122e09e6cca1a4e7b3d4e4d8 (patch) | |
| tree | e43397d8807e753792787e7fd5771e491d27396e | |
| parent | fb4ef8fb27a0766e5dddf6cd35be50c4d35c05f4 (diff) | |
| download | otp-dd88004c973eb582122e09e6cca1a4e7b3d4e4d8.tar.gz otp-dd88004c973eb582122e09e6cca1a4e7b3d4e4d8.tar.bz2 otp-dd88004c973eb582122e09e6cca1a4e7b3d4e4d8.zip  | |
tools: Add testcase to eprof_SUITE
Test disabling of set_on_spawn
| -rw-r--r-- | lib/tools/test/eprof_SUITE.erl | 51 | ||||
| -rw-r--r-- | lib/tools/test/eprof_SUITE_data/eprof_test.erl | 15 | 
2 files changed, 63 insertions, 3 deletions
diff --git a/lib/tools/test/eprof_SUITE.erl b/lib/tools/test/eprof_SUITE.erl index c412a70f89..148622cf07 100644 --- a/lib/tools/test/eprof_SUITE.erl +++ b/lib/tools/test/eprof_SUITE.erl @@ -21,12 +21,14 @@  -include_lib("test_server/include/test_server.hrl").  -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,  -	 init_per_group/2,end_per_group/2,tiny/1,eed/1,basic/1]). +	init_per_group/2,end_per_group/2]). + +-export([tiny/1,eed/1,basic/1,basic_option/1]).  suite() -> [{ct_hooks,[ts_install_cth]}].  all() ->  -    [basic, tiny, eed]. +    [basic, basic_option, tiny, eed].  groups() ->       []. @@ -124,6 +126,51 @@ basic(Config) when is_list(Config) ->      stopped = eprof:stop(),      ok. +basic_option(Config) when is_list(Config) -> +    %% load eprof_test and change directory + +    {ok, OldCurDir} = file:get_cwd(), +    Datadir = ?config(data_dir, Config), +    Privdir = ?config(priv_dir, Config), +    {ok,eprof_test} = compile:file(filename:join(Datadir, "eprof_test"), +					       [trace,{outdir, Privdir}]), +    ok = file:set_cwd(Privdir), +    code:purge(eprof_test), +    {module,eprof_test} = code:load_file(eprof_test), + +    % vanilla +    {ok, _} = eprof:profile(fun() -> eprof_test:do(10) end, [{set_on_spawn, true}]), + +    [{_, MfasDo1},{_, MfasLists1}] = eprof:dump(), +    Mfas1 = MfasDo1 ++ MfasLists1, + +    {value, {_, {11, _}}} = lists:keysearch({eprof_test,dec,1},  1, Mfas1), +    {value, {_, { 1, _}}} = lists:keysearch({eprof_test, go,1},  1, Mfas1), +    {value, {_, { 9, _}}} = lists:keysearch({lists, split_2,5},  1, Mfas1), +    {value, {_, { 4, _}}} = lists:keysearch({lists, seq_loop,3}, 1, Mfas1), + +    {ok, _} = eprof:profile(fun() -> eprof_test:do(10) end, [set_on_spawn]), + +    [{_, MfasDo2},{_, MfasLists2}] = eprof:dump(), +    Mfas2 = MfasDo2 ++ MfasLists2, +    {value, {_, {11, _}}} = lists:keysearch({eprof_test,dec,1},  1, Mfas2), +    {value, {_, { 1, _}}} = lists:keysearch({eprof_test, go,1},  1, Mfas2), +    {value, {_, { 9, _}}} = lists:keysearch({lists, split_2,5},  1, Mfas2), +    {value, {_, { 4, _}}} = lists:keysearch({lists, seq_loop,3}, 1, Mfas2), + +    % disable trace set_on_spawn +    {ok, _} = eprof:profile(fun() -> eprof_test:do(10) end, []), +    [{_, Mfas3}] = eprof:dump(), +    {value, {_, {11, _}}} = lists:keysearch({eprof_test,dec,1}, 1, Mfas3), +    {value, {_, { 1, _}}} = lists:keysearch({eprof_test, go,1}, 1, Mfas3), +    false = lists:keysearch({lists, split_2,5},  1, Mfas3), +    false = lists:keysearch({lists, seq_loop,3}, 1, Mfas3), + +    %% change current working directory +    ok = file:set_cwd(OldCurDir), +    stopped = eprof:stop(), +    ok. +  tiny(suite) -> [];  tiny(Config) when is_list(Config) ->       ensure_eprof_stopped(), diff --git a/lib/tools/test/eprof_SUITE_data/eprof_test.erl b/lib/tools/test/eprof_SUITE_data/eprof_test.erl index 33c428e893..2d9e4c2945 100644 --- a/lib/tools/test/eprof_SUITE_data/eprof_test.erl +++ b/lib/tools/test/eprof_SUITE_data/eprof_test.erl @@ -1,5 +1,5 @@  -module(eprof_test). --export([go/1]). +-export([go/1, do/1]).  go(N) ->      0 = dec(N), @@ -7,3 +7,16 @@ go(N) ->  dec(0) -> 0;  dec(N) -> dec(N - 1). + + + +load(N, Pid) -> +    _ = lists:sort(lists:reverse(lists:seq(1, N))), +    Pid ! {self(), ok}. + + +do(N) -> +    Me  = self(), +    Pid = spawn_link(fun() -> load(N, Me) end), +    ok  = go(N), +    receive {Pid, ok} -> ok end.  | 
