summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2011-03-14 12:05:04 +0000
committerMatthew Sackman <matthew@rabbitmq.com>2011-03-14 12:05:04 +0000
commitdc873bed6f3634945a8881a88d0d52091018b33d (patch)
tree1dfa22b869483f65431da57fac603df4fda642af
parent1d60ab309f7de265a4e8cc6ca905685e5ac04af9 (diff)
downloadrabbitmq-server-dc873bed6f3634945a8881a88d0d52091018b33d.tar.gz
Adjusted test to hit code path
-rw-r--r--src/rabbit_tests.erl41
1 files changed, 28 insertions, 13 deletions
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index 9547cae5..c2ed3fb0 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -1628,23 +1628,38 @@ test_file_handle_cache() ->
ok = file_handle_cache:set_limit(5), %% 1 or 2 sockets, 2 msg_stores
TmpDir = filename:join(rabbit_mnesia:dir(), "tmp"),
ok = filelib:ensure_dir(filename:join(TmpDir, "nothing")),
+ Src = filename:join(TmpDir, "file1"),
+ Dst = filename:join(TmpDir, "file2"),
+ Content = <<"foo">>,
+ CopyFun = fun () ->
+ ok = file:write_file(Src, Content),
+ {ok, SrcHdl} = file_handle_cache:open(Src, [read], []),
+ {ok, DstHdl} = file_handle_cache:open(Dst, [write], []),
+ Size = size(Content),
+ {ok, Size} = file_handle_cache:copy(SrcHdl, DstHdl, Size),
+ ok = file_handle_cache:delete(SrcHdl),
+ ok = file_handle_cache:delete(DstHdl)
+ end,
Pid = spawn(fun () -> {ok, Hdl} = file_handle_cache:open(
filename:join(TmpDir, "file3"),
[write], []),
- receive close -> ok end,
- file_handle_cache:delete(Hdl)
+ receive {next, Pid1} -> Pid1 ! {next, self()} end,
+ file_handle_cache:delete(Hdl),
+ %% This will block and never return, so we
+ %% exercise the fhc tidying up the pending
+ %% queue on the death of a process.
+ ok = CopyFun()
end),
- Src = filename:join(TmpDir, "file1"),
- Dst = filename:join(TmpDir, "file2"),
- Content = <<"foo">>,
- ok = file:write_file(Src, Content),
- {ok, SrcHdl} = file_handle_cache:open(Src, [read], []),
- {ok, DstHdl} = file_handle_cache:open(Dst, [write], []),
- Size = size(Content),
- {ok, Size} = file_handle_cache:copy(SrcHdl, DstHdl, Size),
- ok = file_handle_cache:delete(SrcHdl),
- file_handle_cache:delete(DstHdl),
- Pid ! close,
+ ok = CopyFun(),
+ ok = file_handle_cache:set_limit(3),
+ Pid ! {next, self()},
+ receive {next, Pid} -> ok end,
+ erlang:monitor(process, Pid),
+ timer:sleep(500),
+ exit(Pid, kill),
+ receive {'DOWN', _MRef, process, Pid, _Reason} -> ok end,
+ file:delete(Src),
+ file:delete(Dst),
ok = file_handle_cache:set_limit(Limit),
passed.