aboutsummaryrefslogtreecommitdiffstats
path: root/lib/test_server/src/things/random_kill_SUITE.erl
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/test_server/src/things/random_kill_SUITE.erl
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/test_server/src/things/random_kill_SUITE.erl')
-rw-r--r--lib/test_server/src/things/random_kill_SUITE.erl81
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).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+