diff options
| author | Tim Watson <tim.watson@gmail.com> | 2012-05-08 17:55:57 +0100 |
|---|---|---|
| committer | Tim Watson <tim.watson@gmail.com> | 2012-05-08 17:55:57 +0100 |
| commit | 5bb861fc86301fcf371e77831e15f79da44ab3d3 (patch) | |
| tree | 1d057b5d2bea997e99b87997488d313298fcaf8c | |
| parent | 742ba50b4cd079e599aaa03ba2d2518adf26124f (diff) | |
| download | rabbitmq-server-git-5bb861fc86301fcf371e77831e15f79da44ab3d3.tar.gz | |
for bug24362 - assert that worker name is unregistered by the time we get a 'DOWN' notification
| -rw-r--r-- | src/mirrored_supervisor_tests.erl | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/mirrored_supervisor_tests.erl b/src/mirrored_supervisor_tests.erl index e8baabe8ff..3608d68381 100644 --- a/src/mirrored_supervisor_tests.erl +++ b/src/mirrored_supervisor_tests.erl @@ -51,7 +51,7 @@ test_migrate() -> with_sups(fun([A, _]) -> ?MS:start_child(a, childspec(worker)), Pid1 = pid_of(worker), - kill(A, Pid1), + kill_registered(A, Pid1), Pid2 = pid_of(worker), false = (Pid1 =:= Pid2) end, [a, b]). @@ -61,10 +61,10 @@ test_migrate_twice() -> with_sups(fun([A, B]) -> ?MS:start_child(a, childspec(worker)), Pid1 = pid_of(worker), - kill(A, Pid1), + kill_registered(A, Pid1), {ok, C} = start_sup(c), Pid2 = pid_of(worker), - kill(B, Pid2), + kill_registered(B, Pid2), Pid3 = pid_of(worker), false = (Pid1 =:= Pid3), kill(C) @@ -124,7 +124,7 @@ test_large_group() -> with_sups(fun([A, _, _, _]) -> ?MS:start_child(a, childspec(worker)), Pid1 = pid_of(worker), - kill(A, Pid1), + kill_registered(A, Pid1), Pid2 = pid_of(worker), false = (Pid1 =:= Pid2) end, [a, b, c, d]). @@ -134,7 +134,7 @@ test_childspecs_at_init() -> S = childspec(worker), with_sups(fun([A, _]) -> Pid1 = pid_of(worker), - kill(A, Pid1), + kill_registered(A, Pid1), Pid2 = pid_of(worker), false = (Pid1 =:= Pid2) end, [{a, [S]}, {b, [S]}]). @@ -143,7 +143,7 @@ test_anonymous_supervisors() -> with_sups(fun([A, _B]) -> ?MS:start_child(A, childspec(worker)), Pid1 = pid_of(worker), - kill(A, Pid1), + kill_registered(A, Pid1), Pid2 = pid_of(worker), false = (Pid1 =:= Pid2) end, [anon, anon]). @@ -289,6 +289,19 @@ kill(Pid, Waits) -> kill_wait(Pid), [kill_wait(P) || P <- Waits]. +kill_registered(Pid, Child) -> + erlang:monitor(process, Pid), + erlang:monitor(process, Child), + {registered_name, Name} = erlang:process_info(Child, registered_name), + exit(Pid, kill), + kill_wait(Pid), + exit(Child, kill), + receive + {'DOWN', _Ref, process, Child, _Reason} -> + undefined = whereis(Name), + ok + end. + kill_wait(Pid) -> receive {'DOWN', _Ref, process, Pid, _Reason} -> |
