summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Larsson <lukas@erlang.org>2021-02-22 16:54:11 +0100
committerLukas Larsson <lukas@erlang.org>2021-03-03 08:44:08 +0100
commit19da074a5348580ff50eca6066eef419e660f38c (patch)
tree1df0cd530df969c75e7bfa8fa1ec1c1d1bab6d2c
parent139f915bded4218043b670d08eb0bd35f9a5d63e (diff)
downloaderlang-19da074a5348580ff50eca6066eef419e660f38c.tar.gz
kernel: Add fd leak checks to sendfile SUITE
-rw-r--r--lib/kernel/test/sendfile_SUITE.erl38
1 files changed, 35 insertions, 3 deletions
diff --git a/lib/kernel/test/sendfile_SUITE.erl b/lib/kernel/test/sendfile_SUITE.erl
index ad060aa05c..ff09f6ae8b 100644
--- a/lib/kernel/test/sendfile_SUITE.erl
+++ b/lib/kernel/test/sendfile_SUITE.erl
@@ -23,7 +23,7 @@
-include_lib("common_test/include/ct.hrl").
-include_lib("kernel/include/file.hrl").
--export([all/0, init_per_suite/1, end_per_suite/1, init_per_testcase/2]).
+-export([all/0, init_per_suite/1, end_per_suite/1, init_per_testcase/2, end_per_testcase/2]).
-export([sendfile_server/2, sendfile_do_recv/2, init/1, handle_event/2]).
@@ -107,7 +107,27 @@ init_per_testcase(TC,Config) when TC == t_sendfile_recvduring;
{skip,"Not supported"}
end;
init_per_testcase(_TC,Config) ->
- Config.
+ case read_fd_info() of
+ {ok, NumFDs, FDDetails} ->
+ [{fds,NumFDs},{details,FDDetails}|Config];
+ {error,_Reason} ->
+ Config
+ end.
+
+end_per_testcase(_TC,Config) ->
+ case proplists:get_value(fds, Config) of
+ undefined ->
+ ok;
+ NumOldFDs ->
+ case read_fd_info() of
+ {ok, NumFDs, FDDetails} when NumFDs =/= NumOldFDs ->
+ ct:log("FDs: ~n~ts~nOldFDs: ~n~ts~n",
+ [FDDetails,proplists:get_value(details,Config)]),
+ {fail,"Too many (or too few) fds open"};
+ _ ->
+ ok
+ end
+ end.
t_sendfile_small(Config) when is_list(Config) ->
Filename = proplists:get_value(small_file, Config),
@@ -171,7 +191,7 @@ t_sendfile_big_size(Config) ->
{ok, #file_info{size = Size}} =
file:read_file_info(Filename),
{ok,D} = file:open(Filename,[read|FileOpts]),
- {ok, Size} = file:sendfile(D, Sock,0,Size,SendfileOpts),
+ {ok,Size} = file:sendfile(D,Sock,0,Size,SendfileOpts),
Size
end,
@@ -507,6 +527,18 @@ sendfile(Filename,Sock,Opts) ->
Res
end.
+%% This function returns the number of open fds on a system
+%% and also a string representing more detailed information
+%% for debugging.
+%% It only supports linux for now.
+read_fd_info() ->
+ ProcFd = "/proc/" ++ os:getpid() ++ "/fd",
+ case file:list_dir(ProcFd) of
+ {ok, FDs} ->
+ {ok, length(FDs), os:cmd("ls -l " ++ ProcFd)};
+ Error ->
+ Error
+ end.
%% Error handler