diff options
Diffstat (limited to 'lib/stdlib/test/log_mf_h_SUITE.erl')
-rw-r--r-- | lib/stdlib/test/log_mf_h_SUITE.erl | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/stdlib/test/log_mf_h_SUITE.erl b/lib/stdlib/test/log_mf_h_SUITE.erl new file mode 100644 index 0000000000..640261f665 --- /dev/null +++ b/lib/stdlib/test/log_mf_h_SUITE.erl @@ -0,0 +1,92 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 1996-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +-module(log_mf_h_SUITE). + +-include("test_server.hrl"). +-include_lib("kernel/include/file.hrl"). + +-export([all/1, test/1]). + +all(suite) -> [test]. + + +%%----------------------------------------------------------------- +%% This is actually very basic tests, maybe we could test some more +%% in the future... +%%----------------------------------------------------------------- + +test(Config) when is_list(Config) -> + ?line {ok, Pid} = gen_event:start_link(), + ?line PrivDir = ?config(priv_dir, Config), + Log1 = PrivDir ++ "/log1", + ?line ok = file:make_dir(Log1), + Args1 = log_mf_h:init(Log1, 500, 3), + gen_event:add_handler(Pid, log_mf_h, Args1), + generate(Pid, 200), + {ok, Files} = file:list_dir(Log1), + ?line true = lists:member("1", Files), + ?line true = lists:member("index", Files), + ?line false = lists:member("2", Files), + generate(Pid, 2500), + %% The documentation doesn't guarantee that syncing one request + %% causes all previous ones to be finished too, but that seems to + %% be the case. We need to be sure that the files exist when we + %% look for them with 'list_dir'. + gen_event:sync_notify(Pid, "end"), + {ok, Files2} = file:list_dir(Log1), + ?line true = lists:member("1", Files2), + ?line true = lists:member("2", Files2), + ?line true = lists:member("3", Files2), + ?line false = lists:member("4", Files2), + ?line true = lists:member("index", Files2), + ?line {ok, #file_info{size=Size1,type=regular}} = file:read_file_info(Log1 ++ "/1"), + ?line if Size1 > 500 -> test_server:fail({too_big, Size1}); + true -> ok end, + ?line {ok, #file_info{size=Size2,type=regular}} = file:read_file_info(Log1 ++ "/2"), + ?line if Size2 > 500 -> test_server:fail({too_big, Size2}); + true -> ok end, + ?line {ok, #file_info{size=Size3,type=regular}} = file:read_file_info(Log1 ++ "/3"), + ?line if Size3 > 500 -> test_server:fail({too_big, Size3}); + true -> ok end, + gen_event:delete_handler(Pid, log_mf_h, []), + ?line {ok, Index} = read_index_file(Log1), + gen_event:add_handler(Pid, log_mf_h, Args1), + X = if Index == 3 -> 1; true -> Index + 1 end, + ?line {ok, X} = read_index_file(Log1). + + +generate(Pid, Bytes) when Bytes > 32 -> + gen_event:notify(Pid, make_list(32, [])), + generate(Pid, Bytes - 32); +generate(_, _) -> ok. + +make_list(0, Res) -> Res; +make_list(N, Res) -> make_list(N-1, [67 | Res]). + + +read_index_file(Dir) -> + case file:open(Dir ++ "/index", [read,raw]) of + {ok, Fd} -> + case catch file:read(Fd, 1) of + {ok, [Index]} -> {ok, Index}; + _ -> error + end; + _ -> error + end. + |