From d25eee4ac6c32a6f73a7c94a5abe9f3434099c49 Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Fri, 2 Aug 2019 14:23:57 -0700 Subject: [PATCH] Skip more tests that will fail on win32 --- src/lager_crash_log.erl | 90 ++++++++++++++++++++++---------------- src/lager_file_backend.erl | 51 +++++++++++---------- 2 files changed, 81 insertions(+), 60 deletions(-) diff --git a/src/lager_crash_log.erl b/src/lager_crash_log.erl index ffacc69..e3fdf7c 100644 --- a/src/lager_crash_log.erl +++ b/src/lager_crash_log.erl @@ -298,27 +298,34 @@ filesystem_test_() -> fun(CrashLog) -> {"file that becomes unavailable at runtime should trigger an error message", fun() -> - {ok, _} = ?MODULE:start_link(CrashLog, 65535, 0, undefined, 0, lager_rotator_default), - ?assertEqual(0, lager_test_backend:count()), - sync_error_logger:error_msg("Test message\n"), - _ = gen_event:which_handlers(error_logger), - ?assertEqual(1, lager_test_backend:count()), - ?assertEqual(ok, file:delete(CrashLog)), - ?assertEqual(ok, lager_util:safe_write_file(CrashLog, "")), - {ok, FInfo0} = file:read_file_info(CrashLog, [raw]), - FInfo1 = FInfo0#file_info{mode = 0}, - ?assertEqual(ok, file:write_file_info(CrashLog, FInfo1)), - sync_error_logger:error_msg("Test message\n"), - _ = gen_event:which_handlers(error_logger), - % Note: required on win32, do this early to prevent subsequent failures - % from preventing cleanup - ?assertEqual(ok, file:write_file_info(CrashLog, FInfo0)), - ?assertEqual(3, lager_test_backend:count()), - lager_test_backend:pop(), - {_Level, _Time, Message,_Metadata} = lager_test_backend:pop(), - ?assertEqual( - "Failed to reopen crash log " ++ CrashLog ++ " with error: permission denied", - lists:flatten(Message)) + case os:type() of + {win32, _} -> + % Note: test is skipped on win32 due to the fact that a file can't be deleted or renamed + % while a process has an open file handle referencing it + ok; + _ -> + {ok, _} = ?MODULE:start_link(CrashLog, 65535, 0, undefined, 0, lager_rotator_default), + ?assertEqual(0, lager_test_backend:count()), + sync_error_logger:error_msg("Test message\n"), + _ = gen_event:which_handlers(error_logger), + ?assertEqual(1, lager_test_backend:count()), + ?assertEqual(ok, file:delete(CrashLog)), + ?assertEqual(ok, lager_util:safe_write_file(CrashLog, "")), + {ok, FInfo0} = file:read_file_info(CrashLog, [raw]), + FInfo1 = FInfo0#file_info{mode = 0}, + ?assertEqual(ok, file:write_file_info(CrashLog, FInfo1)), + sync_error_logger:error_msg("Test message\n"), + _ = gen_event:which_handlers(error_logger), + % Note: required on win32, do this early to prevent subsequent failures + % from preventing cleanup + ?assertEqual(ok, file:write_file_info(CrashLog, FInfo0)), + ?assertEqual(3, lager_test_backend:count()), + lager_test_backend:pop(), + {_Level, _Time, Message,_Metadata} = lager_test_backend:pop(), + ?assertEqual( + "Failed to reopen crash log " ++ CrashLog ++ " with error: permission denied", + lists:flatten(Message)) + end end} end, fun(CrashLog) -> @@ -343,23 +350,30 @@ filesystem_test_() -> fun(CrashLog) -> {"external logfile rotation/deletion should be handled", fun() -> - {ok, _} = ?MODULE:start_link(CrashLog, 65535, 0, undefined, 0, lager_rotator_default), - ?assertEqual(0, lager_test_backend:count()), - sync_error_logger:error_msg("Test message~n"), - _ = gen_event:which_handlers(error_logger), - {ok, Bin} = file:read_file(CrashLog), - ?assertMatch([_, "Test message\n"], re:split(Bin, "\n", [{return, list}, {parts, 2}])), - ?assertEqual(ok, file:delete(CrashLog)), - ?assertEqual(ok, lager_util:safe_write_file(CrashLog, "")), - sync_error_logger:error_msg("Test message1~n"), - _ = gen_event:which_handlers(error_logger), - {ok, Bin1} = file:read_file(CrashLog), - ?assertMatch([_, "Test message1\n"], re:split(Bin1, "\n", [{return, list}, {parts, 2}])), - file:rename(CrashLog, CrashLog ++ ".0"), - sync_error_logger:error_msg("Test message2~n"), - _ = gen_event:which_handlers(error_logger), - {ok, Bin2} = file:read_file(CrashLog), - ?assertMatch([_, "Test message2\n"], re:split(Bin2, "\n", [{return, list}, {parts, 2}])) + case os:type() of + {win32, _} -> + % Note: test is skipped on win32 due to the fact that a file can't be deleted or renamed + % while a process has an open file handle referencing it + ok; + _ -> + {ok, _} = ?MODULE:start_link(CrashLog, 65535, 0, undefined, 0, lager_rotator_default), + ?assertEqual(0, lager_test_backend:count()), + sync_error_logger:error_msg("Test message~n"), + _ = gen_event:which_handlers(error_logger), + {ok, Bin} = file:read_file(CrashLog), + ?assertMatch([_, "Test message\n"], re:split(Bin, "\n", [{return, list}, {parts, 2}])), + ?assertEqual(ok, file:delete(CrashLog)), + ?assertEqual(ok, lager_util:safe_write_file(CrashLog, "")), + sync_error_logger:error_msg("Test message1~n"), + _ = gen_event:which_handlers(error_logger), + {ok, Bin1} = file:read_file(CrashLog), + ?assertMatch([_, "Test message1\n"], re:split(Bin1, "\n", [{return, list}, {parts, 2}])), + file:rename(CrashLog, CrashLog ++ ".0"), + sync_error_logger:error_msg("Test message2~n"), + _ = gen_event:which_handlers(error_logger), + {ok, Bin2} = file:read_file(CrashLog), + ?assertMatch([_, "Test message2\n"], re:split(Bin2, "\n", [{return, list}, {parts, 2}])) + end end} end ]}. diff --git a/src/lager_file_backend.erl b/src/lager_file_backend.erl index 8a115d1..61a895a 100644 --- a/src/lager_file_backend.erl +++ b/src/lager_file_backend.erl @@ -747,29 +747,36 @@ filesystem_test_() -> end}, {"external logfile rotation/deletion should be handled", fun() -> - {ok, TestDir} = lager_util:get_test_dir(), - TestLog = filename:join(TestDir, "test.log"), - TestLog0 = TestLog ++ ".0", + case os:type() of + {win32, _} -> + % Note: test is skipped on win32 due to the fact that a file can't be deleted or renamed + % while a process has an open file handle referencing it + ok; + _ -> + {ok, TestDir} = lager_util:get_test_dir(), + TestLog = filename:join(TestDir, "test.log"), + TestLog0 = TestLog ++ ".0", - gen_event:add_handler(lager_event, lager_file_backend, - [{file, TestLog}, {level, info}, {check_interval, 0}]), - ?assertEqual(0, lager_test_backend:count()), - lager:log(error, self(), "Test message1"), - ?assertEqual(1, lager_test_backend:count()), - ?assertEqual(ok, file:delete(TestLog)), - ?assertEqual(ok, lager_util:safe_write_file(TestLog, "")), - lager:log(error, self(), "Test message2"), - ?assertEqual(2, lager_test_backend:count()), - {ok, Bin} = file:read_file(TestLog), - Pid = pid_to_list(self()), - ?assertMatch([_, _, "[error]", Pid, "Test message2\n"], - re:split(Bin, " ", [{return, list}, {parts, 5}])), - ?assertEqual(ok, file:rename(TestLog, TestLog0)), - lager:log(error, self(), "Test message3"), - ?assertEqual(3, lager_test_backend:count()), - {ok, Bin2} = file:read_file(TestLog), - ?assertMatch([_, _, "[error]", Pid, "Test message3\n"], - re:split(Bin2, " ", [{return, list}, {parts, 5}])) + gen_event:add_handler(lager_event, lager_file_backend, + [{file, TestLog}, {level, info}, {check_interval, 0}]), + ?assertEqual(0, lager_test_backend:count()), + lager:log(error, self(), "Test message1"), + ?assertEqual(1, lager_test_backend:count()), + ?assertEqual(ok, file:delete(TestLog)), + ?assertEqual(ok, lager_util:safe_write_file(TestLog, "")), + lager:log(error, self(), "Test message2"), + ?assertEqual(2, lager_test_backend:count()), + {ok, Bin} = file:read_file(TestLog), + Pid = pid_to_list(self()), + ?assertMatch([_, _, "[error]", Pid, "Test message2\n"], + re:split(Bin, " ", [{return, list}, {parts, 5}])), + ?assertEqual(ok, file:rename(TestLog, TestLog0)), + lager:log(error, self(), "Test message3"), + ?assertEqual(3, lager_test_backend:count()), + {ok, Bin2} = file:read_file(TestLog), + ?assertMatch([_, _, "[error]", Pid, "Test message3\n"], + re:split(Bin2, " ", [{return, list}, {parts, 5}])) + end end}, {"internal size rotation should work", fun() ->