diff options
author | Matthew Sackman <matthew@rabbitmq.com> | 2011-03-14 12:05:04 +0000 |
---|---|---|
committer | Matthew Sackman <matthew@rabbitmq.com> | 2011-03-14 12:05:04 +0000 |
commit | dc873bed6f3634945a8881a88d0d52091018b33d (patch) | |
tree | 1dfa22b869483f65431da57fac603df4fda642af | |
parent | 1d60ab309f7de265a4e8cc6ca905685e5ac04af9 (diff) | |
download | rabbitmq-server-dc873bed6f3634945a8881a88d0d52091018b33d.tar.gz |
Adjusted test to hit code path
-rw-r--r-- | src/rabbit_tests.erl | 41 |
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. |