summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2011-07-18 16:32:21 +0100
committerSimon MacMullen <simon@rabbitmq.com>2011-07-18 16:32:21 +0100
commit6fb861f85e1774ef3f7c329add0db72bb1c9a15d (patch)
tree8e085709eeba249162ed6828bc79a80667e6932a
parentb40f7f55cd0e6d9ba4f7f5a918916fa5d0df986b (diff)
downloadrabbitmq-server-6fb861f85e1774ef3f7c329add0db72bb1c9a15d.tar.gz
I spent a long time trying to get the teardown of the complete supervision hierarchy associated with each test to be completely synchronous and failing. It's much easier to create a new group for each test.
-rw-r--r--src/mirrored_supervisor_tests.erl25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/mirrored_supervisor_tests.erl b/src/mirrored_supervisor_tests.erl
index d5c2ceed..6d9ea0a0 100644
--- a/src/mirrored_supervisor_tests.erl
+++ b/src/mirrored_supervisor_tests.erl
@@ -58,12 +58,12 @@ test_migrate_twice() ->
?MS:start_child(a, childspec(worker)),
Pid1 = pid_of(worker),
kill(A, Pid1),
- with_sups(fun([_]) ->
- Pid2 = pid_of(worker),
- kill(B, Pid2),
- Pid3 = pid_of(worker),
- false = (Pid1 =:= Pid3)
- end, [c])
+ {ok, C} = start_sup(c),
+ Pid2 = pid_of(worker),
+ kill(B, Pid2),
+ Pid3 = pid_of(worker),
+ false = (Pid1 =:= Pid3),
+ kill(C)
end, [a, b]).
%% Can't start the same child twice
@@ -144,6 +144,7 @@ test_start_idempotence() ->
%% ---------------------------------------------------------------------------
with_sups(Fun, Sups) ->
+ inc_group(),
Pids = [begin {ok, Pid} = start_sup(Sup), Pid end || Sup <- Sups],
Fun(Pids),
[kill(Pid) || Pid <- Pids, is_process_alive(Pid)],
@@ -153,7 +154,7 @@ start_sup(Spec) ->
start_sup(Spec, group).
start_sup({Name, ChildSpecs}, Group) ->
- {ok, Pid} = start_sup0(Name, Group, ChildSpecs),
+ {ok, Pid} = start_sup0(Name, get_group(Group), ChildSpecs),
%% We are not a supervisor, when we kill the supervisor we do not
%% want to die!
unlink(Pid),
@@ -178,6 +179,16 @@ pid_of(Id) ->
{received, Pid, ping} = call(Id, ping),
Pid.
+inc_group() ->
+ Count = case get(counter) of
+ undefined -> 0;
+ C -> C
+ end + 1,
+ put(counter, Count).
+
+get_group(Group) ->
+ {Group, get(counter)}.
+
call(Id, Msg) -> call(Id, Msg, 100, 10).
call(Id, Msg, 0, _Decr) ->