aboutsummaryrefslogtreecommitdiffstats
path: root/lib/sasl
diff options
context:
space:
mode:
authorSiri Hansen <[email protected]>2013-02-13 20:53:45 +0100
committerSiri Hansen <[email protected]>2013-05-14 17:01:54 +0200
commit44b76ccb2f2640e27214f3286acb5d798920babc (patch)
treec227fd82bb90e7fd271fcf2c3a0b8e5a3715a0a5 /lib/sasl
parent6a093c47d87707480d1710fc6790b57f1520cef7 (diff)
downloadotp-44b76ccb2f2640e27214f3286acb5d798920babc.tar.gz
otp-44b76ccb2f2640e27214f3286acb5d798920babc.tar.bz2
otp-44b76ccb2f2640e27214f3286acb5d798920babc.zip
[sasl] Update tests to run under unicode path
In order to test that unicode paths can be used in release handling, the release_handler_SUITE will use a priv_dir with unicode characters if the file name translation mode is utf8 (not on windows).
Diffstat (limited to 'lib/sasl')
-rw-r--r--lib/sasl/test/installer.erl15
-rw-r--r--lib/sasl/test/release_handler_SUITE.erl61
-rw-r--r--lib/sasl/test/rh_test_lib.erl11
3 files changed, 56 insertions, 31 deletions
diff --git a/lib/sasl/test/installer.erl b/lib/sasl/test/installer.erl
index 709269a73c..fa404c8b7b 100644
--- a/lib/sasl/test/installer.erl
+++ b/lib/sasl/test/installer.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2013. 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
@@ -54,8 +54,12 @@
-export([reg_proc/1]).
-export([registered_loop/1]).
--define(print(List), {rh_print, TestNode} ! {print, {?MODULE, ?LINE}, List}).
--define(print_line(Line,List), {rh_print, TestNode} ! {print, {?MODULE, Line}, List}).
+-define(print(List),
+ io:format(user,"(~w:~w) ~tp~n",[?MODULE,?LINE,List]),
+ {rh_print, TestNode} ! {print, {?MODULE, ?LINE}, List}).
+-define(print_line(Line,List),
+ io:format(user,"(~w:~w) ~tp~n",[?MODULE,Line,List]),
+ {rh_print, TestNode} ! {print, {?MODULE, Line}, List}).
-define(fail(Term), exit({?MODULE, ?LINE, Term})).
-define(fail_line(Line,Term), exit({?MODULE, Line, Term})).
@@ -905,10 +909,9 @@ start_client(TestNode,Client,Sname) ->
start_client_unix(TestNode,Sname,Node) ->
Start = filename:join(["clients", "type1", Node, "bin", "start"]),
- Cmd = lists:concat(["env NODENAME=",Sname," ",
- filename:join(code:root_dir(), Start)]),
+ Cmd = filename:join(code:root_dir(), Start),
?print([{start_client,Sname},Cmd]),
- Res = os:cmd(Cmd),
+ Res = rh_test_lib:cmd(Cmd,[],[{"NODENAME",atom_to_list(Sname)}]),
?print([{start_client,result},Res]).
start_client_win32(TestNode,Client,ClientSname) ->
diff --git a/lib/sasl/test/release_handler_SUITE.erl b/lib/sasl/test/release_handler_SUITE.erl
index 4cf4122959..2ca254ff87 100644
--- a/lib/sasl/test/release_handler_SUITE.erl
+++ b/lib/sasl/test/release_handler_SUITE.erl
@@ -24,6 +24,8 @@
-compile(export_all).
+-define(unicode_string,[945,946]). % greek letters alpha and beta
+
% Default timetrap timeout (set in init_per_testcase).
%-define(default_timeout, ?t:minutes(40)).
-define(default_timeout, ?t:minutes(10)).
@@ -1667,16 +1669,11 @@ start_target_node_with_erl(Erl,Sname,Boot) ->
"-boot",filename:rootname(Boot)],
?t:format("Starting node ~p: ~ts~n",
[FullName, lists:flatten([[X," "] || X <- [Erl|Args]])]),
- ?t:format("open_port({spawn_executable, ~tp}, [{args,~p}])~n",[Erl,Args]),
- case open_port({spawn_executable, Erl}, [{args,Args}]) of
- Port when is_port(Port) ->
- unlink(Port),
- erlang:port_close(Port),
- %% timer:sleep(10000),
- %% io:format("PING: ~p~n",[net_adm:ping(FullName)]),
+ case rh_test_lib:cmd(Erl,Args,[]) of
+ ok ->
ok = wait_nodes_up([FullName],"target_system test node"),
{ok,FullName};
- Error ->
+ Error ->
?t:fail({failed_to_start_node, FullName, Error})
end.
@@ -1689,7 +1686,7 @@ stop_target_node(Node) ->
%% install under a path which includes unicode characters
target_system_unicode(Conf) when is_list(Conf) ->
PrivDir = priv_dir(Conf),
- UnicodeStr = [945,946], % alhpa beta in greek letters
+ UnicodeStr = ?unicode_string,
UnicodePrivDir = filename:join(PrivDir,UnicodeStr),
PA = filename:dirname(code:which(?MODULE)),
@@ -1970,13 +1967,13 @@ copy_client(Conf,Master,Sname,Client) ->
clean_priv_dir(Conf,Save) ->
PrivDir = priv_dir(Conf),
- ?t:format("======== current dir ~p~n",[PrivDir]),
+ ?t:format("======== current dir ~tp~n",[PrivDir]),
Dirs = filelib:wildcard(filename:join(PrivDir,"*")),
- ?t:format("======== deleting ~p~n",[Dirs]),
+ ?t:format("======== deleting ~tp~n",[Dirs]),
ok = rm_rf(Dirs,Save),
Remaining = filelib:wildcard(filename:join(PrivDir,"*")),
- ?t:format("======== remaining ~p~n",[Remaining]),
+ ?t:format("======== remaining ~tp~n",[Remaining]),
case Remaining of
[] ->
@@ -1984,7 +1981,7 @@ clean_priv_dir(Conf,Save) ->
_ ->
rm_rf(Remaining,Save),
Remaining2 = filelib:wildcard(filename:join(PrivDir,"*")),
- ?t:format("======== remaining after second try ~p~n",[Remaining2])
+ ?t:format("======== remaining after second try ~tp~n",[Remaining2])
end,
ok.
@@ -2058,7 +2055,7 @@ chmod(Dest,Opts) ->
copy_error(Src, Dest, Reason) ->
- ?t:format("Copy ~s to ~s failed: ~s\n",
+ ?t:format("Copy ~ts to ~ts failed: ~ts\n",
[Src,Dest,file:format_error(Reason)]),
?t:fail(file_copy_failed).
@@ -2098,9 +2095,11 @@ subst_file(Src, Dest, Vars) ->
subst_file(Src, Dest, Vars, []).
subst_file(Src, Dest, Vars, Opts) ->
{ok, Bin} = file:read_file(Src),
- Conts = binary_to_list(Bin),
+ Conts = binary_to_list(Bin), % The source will always be latin1
NConts = subst(Conts, Vars),
- ok = file:write_file(Dest, NConts),
+ %% The destination must be utf8 if file name encoding is unicode
+ Enc = file:native_name_encoding(),
+ ok = file:write_file(Dest, unicode:characters_to_binary(NConts,Enc,Enc)),
preserve(Src,Dest,Opts),
chmod(Dest,Opts).
@@ -2133,13 +2132,22 @@ subst_var([], Vars, Result, VarAcc) ->
priv_dir(Conf) ->
-%% filename:absname(?config(priv_dir, Conf)). % Get rid of trailing slash
%% Due to problem with long paths on windows => creating a new
%% priv_dir under data_dir
- filename:absname(filename:join(?config(data_dir, Conf),priv_dir)).
+ %% And get rid of trailing slash (absname does that)
+ %% And if file name translation mode is utf8 when not on windows,
+ %% use a path with unicode characters...
+ PrivDir =
+ case {file:native_name_encoding(),os:type()} of
+ {utf8,{Os,_}} when Os=/=win32 ->
+ "priv_dir_" ++ ?unicode_string;
+ _ ->
+ "priv_dir"
+ end,
+ filename:absname(filename:join([?config(data_dir, Conf),PrivDir])).
init_priv_dir(Conf) ->
- Dir = filename:absname(filename:join(?config(data_dir, Conf),priv_dir)),
+ Dir = priv_dir(Conf),
case filelib:is_dir(Dir) of
true ->
clean_priv_dir(Conf,false);
@@ -2164,7 +2172,7 @@ rh_print() ->
receive
{print, {Module,Line}, [H|T]} ->
?t:format("=== ~p:~p - ~p",[Module,Line,H]),
- lists:foreach(fun(Term) -> ?t:format(" ~p",[Term]) end, T),
+ lists:foreach(fun(Term) -> ?t:format(" ~tp",[Term]) end, T),
?t:format("",[]),
rh_print();
kill ->
@@ -2557,11 +2565,14 @@ start_nodes(Conf,Snames,Tag) ->
start_node_unix(Sname,NodeDir) ->
Script = filename:join([NodeDir,"bin","start"]),
- Cmd = "env NODENAME="++atom_to_list(Sname) ++ " " ++ Script,
- %% {ok,StartFile} = file:read_file(Cmd),
- %% ?t:format("~s:\n~s~n~n",[Start,binary_to_list(StartFile)]),
- Res = os:cmd(Cmd),
- ?t:format("Start ~p: ~p~n=>\t~p~n", [Sname,Cmd,Res]).
+ ?t:format("Starting ~p: ~tp~n", [Sname,Script]),
+ case rh_test_lib:cmd(Script,[],[{"NODENAME",atom_to_list(Sname)}]) of
+ ok ->
+ {ok,node_name(Sname)};
+ Error ->
+ ?t:fail({failed_to_start_node, Sname, Error})
+ end.
+
start_node_win32(Sname,NodeDir) ->
Name = atom_to_list(Sname) ++ "_P1G",
diff --git a/lib/sasl/test/rh_test_lib.erl b/lib/sasl/test/rh_test_lib.erl
index 99a7f919a7..06efa4acea 100644
--- a/lib/sasl/test/rh_test_lib.erl
+++ b/lib/sasl/test/rh_test_lib.erl
@@ -1,5 +1,6 @@
-module(rh_test_lib).
+-export([cmd/3]).
-export([erlsrv/3,
erlsrv/4]).
-export([get_service_args/3,
@@ -10,6 +11,16 @@
get_client_args/4]).
+cmd(Cmd,Args,Env) ->
+ case open_port({spawn_executable, Cmd}, [{args,Args},{env,Env}]) of
+ Port when is_port(Port) ->
+ unlink(Port),
+ erlang:port_close(Port),
+ ok;
+ Error ->
+ Error
+ end.
+
erlsrv(Erlsrv,Action,Name) ->
erlsrv(Erlsrv,Action,Name,"").
erlsrv(Erlsrv,Action,Name,Rest) ->