diff options
Diffstat (limited to 'lib/stdlib/test/escript_SUITE_data')
| -rw-r--r-- | lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main2.erl | 19 | ||||
| -rw-r--r-- | lib/stdlib/test/escript_SUITE_data/archive_script_file_access/archive_script_file_access.erl | 105 | 
2 files changed, 122 insertions, 2 deletions
| diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main2.erl b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main2.erl index de56579998..1cddef0e3d 100644 --- a/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main2.erl +++ b/lib/stdlib/test/escript_SUITE_data/archive_script/archive_script_main2.erl @@ -1,7 +1,7 @@  %%  %% %CopyrightBegin%  %%  -%% Copyright Ericsson AB 2008-2009. All Rights Reserved. +%% Copyright Ericsson AB 2008-2012. 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 @@ -21,6 +21,8 @@  -export([main/1]). +-include_lib("kernel/include/file.hrl"). +  -define(DUMMY, archive_script_dummy).  -define(DICT, archive_script_dict). @@ -32,7 +34,7 @@ main(MainArgs) ->      io:format("dummy:~p\n",[[E || E <- ErlArgs, element(1, E) =:= ?DUMMY]]),      %% Start the applications -    {error, {not_started, ?DICT}} = application:start(archive_script_dummy), +    {error, {not_started, ?DICT}} = application:start(?DUMMY),      ok = application:start(?DICT),      ok = application:start(?DUMMY), @@ -57,4 +59,17 @@ main(MainArgs) ->      ok = ?DICT:erase(Tab, Key),      error = ?DICT:find(Tab, Key),      ok = ?DICT:erase(Tab), + +    %% Check mtime related caching bug with escript/primary archive files +    Escript = escript:script_name(), +    {ok, FileInfo} = file:read_file_info(Escript), +    %% Modify mtime of archive file and try to reload module +    FileInfo2 = FileInfo#file_info{mtime=calendar:now_to_local_time(now())}, +    ok = file:write_file_info(Escript, FileInfo2), +    Module = ?DICT, +    {file, _} = code:is_loaded(Module), +    true = code:delete(Module), +    false = code:is_loaded(Module), +    {module, Module} = code:ensure_loaded(Module), +      ok. diff --git a/lib/stdlib/test/escript_SUITE_data/archive_script_file_access/archive_script_file_access.erl b/lib/stdlib/test/escript_SUITE_data/archive_script_file_access/archive_script_file_access.erl new file mode 100644 index 0000000000..b03c8ba70d --- /dev/null +++ b/lib/stdlib/test/escript_SUITE_data/archive_script_file_access/archive_script_file_access.erl @@ -0,0 +1,105 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2012. 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(archive_script_file_access). +-behaviour(escript). + +-export([main/1]). + +-include_lib("kernel/include/file.hrl"). + +main([RelArchiveFile]) -> + +    AbsArchiveFile = filename:absname(RelArchiveFile), +    DotSlashArchiveFile = "./" ++ RelArchiveFile, + +    Beam = atom_to_list(?MODULE) ++ ".beam", +    AbsBeam = filename:join(AbsArchiveFile,Beam), +    RelBeam = filename:join(RelArchiveFile,Beam), +    DotSlashBeam = filename:join(DotSlashArchiveFile,Beam), +    Dir = "dir1", +    AbsDir = filename:join(AbsArchiveFile,Dir), +    RelDir = filename:join(RelArchiveFile,Dir), +    DotSlashDir = filename:join(DotSlashArchiveFile,Dir), +    SubDir = "subdir1", +    AbsSubDir = filename:join(AbsDir,SubDir), +    RelSubDir = filename:join(RelDir,SubDir), +    DotSlashSubDir = filename:join(DotSlashDir,SubDir), + +    {ok,List1} = erl_prim_loader:list_dir(AbsArchiveFile), +    {ok,List1} = erl_prim_loader:list_dir(RelArchiveFile), +    {ok,List1} = erl_prim_loader:list_dir(DotSlashArchiveFile), +    {ok,List1} = erl_prim_loader:list_dir(AbsArchiveFile ++ "/"), +    {ok,List1} = erl_prim_loader:list_dir(AbsArchiveFile ++ "/."), +    {ok,List1} = erl_prim_loader:list_dir(filename:join([AbsDir,".."])), +    {ok,List1} = erl_prim_loader:list_dir(filename:join([RelDir,".."])), +    {ok,List1} = erl_prim_loader:list_dir(filename:join([DotSlashDir,".."])), +    {ok,List1} = erl_prim_loader:list_dir(filename:join([AbsSubDir,"..",".."])), +    {ok,List1} = erl_prim_loader:list_dir(filename:join([RelSubDir,"..",".."])), +    {ok,List1} = erl_prim_loader:list_dir(filename:join([DotSlashSubDir,"..",".."])), +    false = lists:member([],List1), + +    %% If symlinks are supported on this platform... +    RelSymlinkArchiveFile = "symlink_to_" ++ RelArchiveFile, +    case file:read_link(RelSymlinkArchiveFile) of +	{ok,_} -> +	    DotSlashSymlinkArchiveFile = "./" ++ RelSymlinkArchiveFile, +	    AbsSymlinkArchiveFile=filename:join(filename:dirname(AbsArchiveFile), +						RelSymlinkArchiveFile), +	    {ok,List1} = erl_prim_loader:list_dir(AbsSymlinkArchiveFile), +	    {ok,List1} = erl_prim_loader:list_dir(RelSymlinkArchiveFile), +	    {ok,List1} = erl_prim_loader:list_dir(DotSlashSymlinkArchiveFile); +	_ -> % not supported +	    ok +    end, + + +    {ok,List2} = erl_prim_loader:list_dir(AbsDir), +    {ok,List2} = erl_prim_loader:list_dir(RelDir), +    {ok,List2} = erl_prim_loader:list_dir(DotSlashDir), +    false = lists:member([],List2), + +    error = erl_prim_loader:list_dir(AbsBeam), +    error = erl_prim_loader:list_dir(RelBeam), +    error = erl_prim_loader:list_dir(DotSlashBeam), + +    error = erl_prim_loader:get_file(AbsArchiveFile), +    error = erl_prim_loader:get_file(RelArchiveFile), +    error = erl_prim_loader:get_file(DotSlashArchiveFile), +    error = erl_prim_loader:get_file(AbsArchiveFile ++ "/"), +    error = erl_prim_loader:get_file(AbsArchiveFile ++ "/."), +    {ok,Bin,AbsBeam} = erl_prim_loader:get_file(AbsBeam), +    {ok,Bin,RelBeam} = erl_prim_loader:get_file(RelBeam), +    {ok,Bin,DotSlashBeam} = erl_prim_loader:get_file(DotSlashBeam), + +    {ok,#file_info{type=directory}=DFI} = +	erl_prim_loader:read_file_info(AbsArchiveFile), +    {ok,DFI} = erl_prim_loader:read_file_info(RelArchiveFile), +    {ok,DFI} = erl_prim_loader:read_file_info(DotSlashArchiveFile), +    {ok,DFI} = erl_prim_loader:read_file_info(AbsArchiveFile ++ "/"), +    {ok,DFI} = erl_prim_loader:read_file_info(AbsArchiveFile ++ "/."), +    {ok,#file_info{type=regular}=RFI} = erl_prim_loader:read_file_info(AbsBeam), +    {ok,RFI} = erl_prim_loader:read_file_info(RelBeam), +    {ok,RFI} = erl_prim_loader:read_file_info(DotSlashBeam), + +    F = AbsArchiveFile ++ ".extension", +    error = erl_prim_loader:list_dir(F), +    {ok,_,_} = erl_prim_loader:get_file(F), +    {ok,#file_info{type=regular}} = erl_prim_loader:read_file_info(F), + +    ok. | 
