diff options
Diffstat (limited to 'lib/test_server/src/things/random_kill_SUITE.erl')
-rw-r--r-- | lib/test_server/src/things/random_kill_SUITE.erl | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/lib/test_server/src/things/random_kill_SUITE.erl b/lib/test_server/src/things/random_kill_SUITE.erl new file mode 100644 index 0000000000..4fcd63e3af --- /dev/null +++ b/lib/test_server/src/things/random_kill_SUITE.erl @@ -0,0 +1,81 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1996-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +-module(random_kill_SUITE). +-compile([export_all]). +%%-define(line_trace,1). +-include("test_server.hrl"). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +all(suite) -> [run]. + +-define(iterations,25). %% Kill this many processes, + %% possibly with reboots in between + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +run(suite) -> []; +run(Config) -> + registered(?iterations). + +registered(0) -> + ok; +registered(N) -> + random:seed(3461*N,1159*N,351*N), + Pid = select_victim(registered), + test_server:resume_point(?MODULE,registered,[N-1]), + test_server:format("About to kill pid ~p (~p)\n~p", + [Pid,process_info(Pid,registered_name),info(Pid)]), + %%exit(Pid,kill), + registered(N-1). + +info(Pid) -> + Rest0 = tl(pid_to_list(Pid)), + {P1,Rest1} = get_until($.,Rest0), + {P2,Rest2} = get_until($.,Rest1), + {P3,_} = get_until($>,Rest2), + c:i(list_to_integer(P1),list_to_integer(P2),list_to_integer(P3)). + +get_until(Ch,L) -> + get_until(Ch,L,[]). +get_until(Ch,[],Acc) -> + {lists:reverse(Acc),[]}; +get_until(Ch,[Ch|T],Acc) -> + {lists:reverse(Acc),T}; +get_until(Ch,[H|T],Acc) -> + get_until(Ch,T,[H|Acc]). + +select_victim(registered) -> + Pids = + lists:map(fun(Server)-> whereis(Server) end,registered()), + ImmunePids = + [self()|lists:map(fun(Job)-> element(2,Job) end,test_server:jobs())], + SuitablePids = + lists:filter(fun(Pid)-> case lists:member(Pid,ImmunePids) of + true -> false; + false -> true + end + end, Pids), + Selected = random:uniform(length(SuitablePids)), + io:format("Selected ~p if ~p",[Selected,length(SuitablePids)]), + lists:nth(Selected,SuitablePids). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + |