diff options
| author | John Högberg <[email protected]> | 2019-04-03 09:17:39 +0200 | 
|---|---|---|
| committer | John Högberg <[email protected]> | 2019-04-03 09:57:41 +0200 | 
| commit | bdd1994e4918ba76ff09bb18d8235d3e67dce72b (patch) | |
| tree | 1f3aa43f261fae250b208dd4ad58ecefc6b032c5 | |
| parent | b51f61b5f32a28737d0b03a29f19f48f38e4db19 (diff) | |
| download | otp-bdd1994e4918ba76ff09bb18d8235d3e67dce72b.tar.gz otp-bdd1994e4918ba76ff09bb18d8235d3e67dce72b.tar.bz2 otp-bdd1994e4918ba76ff09bb18d8235d3e67dce72b.zip  | |
file_SUITE: Skip large_file test if we fail to query free disk space
This may happen if priv_dir is mounted on NFS or similar.
| -rw-r--r-- | lib/kernel/test/file_SUITE.erl | 39 | 
1 files changed, 24 insertions, 15 deletions
diff --git a/lib/kernel/test/file_SUITE.erl b/lib/kernel/test/file_SUITE.erl index e095e589a3..3bc8e6e828 100644 --- a/lib/kernel/test/file_SUITE.erl +++ b/lib/kernel/test/file_SUITE.erl @@ -4514,15 +4514,18 @@ run_large_file_test(Config, Run, Name) ->  	{{unix,sunos},OsVersion} when OsVersion < {5,5,1} ->  	    {skip,"Only supported on Win32, Unix or SunOS >= 5.5.1"};  	{{unix,_},_} -> -	    N = disc_free(proplists:get_value(priv_dir, Config)), -	    io:format("Free disk: ~w KByte~n", [N]), -	    if N < 5 * (1 bsl 20) -> -		    %% Less than 5 GByte free -		    {skip,"Less than 5 GByte free"}; -	       true -> -		    do_run_large_file_test(Config, Run, Name) -	    end; -	_ ->  +            case disc_free(proplists:get_value(priv_dir, Config)) of +                error -> +                    {skip, "Failed to query disk space for priv_dir. " +                           "Is it on a remote file system?~n"}; +                N when N >= 5 * (1 bsl 20) -> +                    ct:pal("Free disk: ~w KByte~n", [N]), +                    do_run_large_file_test(Config, Run, Name); +                N when N < 5 * (1 bsl 20) -> +                    ct:pal("Free disk: ~w KByte~n", [N]), +                    {skip,"Less than 5 GByte free"} +            end; +	_ ->  	    {skip,"Only supported on Win32, Unix or SunOS >= 5.5.1"}      end. @@ -4556,12 +4559,18 @@ do_run_large_file_test(Config, Run, Name0) ->  disc_free(Path) ->      Data = disksup:get_disk_data(), -    {_,Tot,Perc} = hd(lists:filter( -			fun({P,_Size,_Full}) -> -				lists:prefix(filename:nativename(P), -					     filename:nativename(Path)) -			end, lists:reverse(lists:sort(Data)))), -    round(Tot * (1-(Perc/100))). + +    %% What partitions could Data be mounted on? +    Partitions = +        [D || {P, _Tot, _Perc}=D <- Data, +         lists:prefix(filename:nativename(P), filename:nativename(Path))], + +    %% Sorting in descending order places the partition with the most specific +    %% path first. +    case lists:sort(fun erlang:'>='/2, Partitions) of +        [{_,Tot, Perc} | _] -> round(Tot * (1-(Perc/100))); +        [] -> error +    end.  memsize() ->      {Tot,_Used,_}  = memsup:get_memory_data(),  | 
