File 0840-ssh-Extend-unicode-tests-for-sftp.patch of Package erlang
From 8003f6839a2531cec71cdbd97a6b73ecba941080 Mon Sep 17 00:00:00 2001
From: Hans Nilsson <hans@erlang.org>
Date: Thu, 9 Jan 2020 13:21:28 +0100
Subject: [PATCH 1/3] ssh: Extend unicode tests for sftp
---
lib/ssh/test/ssh_sftp_SUITE.erl | 69 +++++++++++++++++++++++------------------
1 file changed, 39 insertions(+), 30 deletions(-)
diff --git a/lib/ssh/test/ssh_sftp_SUITE.erl b/lib/ssh/test/ssh_sftp_SUITE.erl
index c2f9c0eba8..b669deb279 100644
--- a/lib/ssh/test/ssh_sftp_SUITE.erl
+++ b/lib/ssh/test/ssh_sftp_SUITE.erl
@@ -104,6 +104,7 @@ init_per_group(not_unicode, Config) ->
[{user, "Alladin"},
{passwd, "Sesame"},
{data, <<"Hello world!">>},
+ {data_pos, ["Hej ","hopp"]},
{filename, "sftp.txt"},
{testfile, "test.txt"},
{linktest, "link_test.txt"},
@@ -122,7 +123,8 @@ init_per_group(unicode, Config) ->
NewConfig =
[{user, "åke高兴"},
{passwd, "ärlig日本じん"},
- {data, <<"foobar å 一二三四いちにさんち">>},
+ {data, "foobar å 一二三四いちにさんち"},
+ {data_pos, ["中","国"]},
{filename, "sftp瑞点.txt"},
{testfile, "testハンス.txt"},
{linktest, "link_test語.txt"},
@@ -381,10 +383,10 @@ write_file() ->
write_file(Config) when is_list(Config) ->
FileName = proplists:get_value(filename, Config),
{Sftp, _} = proplists:get_value(sftp, Config),
-
- Data = list_to_binary("Hej hopp!"),
+ Data = proplists:get_value(data, Config),
+ Expected = unicode:characters_to_binary(Data),
ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
- {ok, Data} = file:read_file(FileName).
+ {ok, Expected} = file:read_file(FileName).
%%--------------------------------------------------------------------
write_file_iolist() ->
@@ -393,18 +395,19 @@ write_file_iolist(Config) when is_list(Config) ->
FileName = proplists:get_value(filename, Config),
{Sftp, _} = proplists:get_value(sftp, Config),
- Data = list_to_binary("Hej hopp!"),
+ Data = proplists:get_value(data, Config),
+ DataB = unicode:characters_to_binary(Data),
lists:foreach(
fun(D) ->
ok = ssh_sftp:write_file(Sftp, FileName, [D]),
- Expected = if is_binary(D) -> D;
- is_list(D) -> list_to_binary(D)
+ Expected = try iolist_to_binary(D)
+ catch _:_ -> unicode:characters_to_binary(D)
end,
{ok, Expected} = file:read_file(FileName)
end,
[Data, [Data,Data], [[Data],[Data]], [[[Data]],[[[[Data]],Data]]],
- [[[[Data]],Data],binary_to_list(Data)],
- [[[[Data]],Data],[[binary_to_list(Data)],[[binary_to_list(Data)]]]]
+ [[[[Data]],Data],DataB],
+ [[[[Data]],Data],[[DataB],[[DataB]]]]
]).
%%--------------------------------------------------------------------
@@ -414,9 +417,11 @@ write_big_file(Config) when is_list(Config) ->
FileName = proplists:get_value(filename, Config),
{Sftp, _} = proplists:get_value(sftp, Config),
- Data = list_to_binary(lists:duplicate(750000,"a")),
- ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
- {ok, Data} = file:read_file(FileName).
+ Data = [lists:duplicate(750000,"a"),
+ proplists:get_value(data, Config)],
+ ok = ssh_sftp:write_file(Sftp, FileName, Data),
+ Expected = unicode:characters_to_binary(Data),
+ {ok, Expected} = file:read_file(FileName).
%%--------------------------------------------------------------------
sftp_read_big_file() ->
@@ -425,10 +430,11 @@ sftp_read_big_file(Config) when is_list(Config) ->
FileName = proplists:get_value(filename, Config),
{Sftp, _} = proplists:get_value(sftp, Config),
- Data = list_to_binary(lists:duplicate(750000,"a")),
- ct:log("Data size to write is ~p bytes",[size(Data)]),
- ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
- {ok, Data} = ssh_sftp:read_file(Sftp, FileName).
+ Data = [lists:duplicate(750000,"a"),
+ proplists:get_value(data, Config)],
+ ok = ssh_sftp:write_file(Sftp, FileName, Data),
+ Expected = unicode:characters_to_binary(Data),
+ {ok, Expected} = ssh_sftp:read_file(Sftp, FileName).
%%--------------------------------------------------------------------
remove_file() ->
@@ -577,12 +583,13 @@ async_write(Config) when is_list(Config) ->
{Sftp, _} = proplists:get_value(sftp, Config),
FileName = proplists:get_value(testfile, Config),
{ok, Handle} = ssh_sftp:open(Sftp, FileName, [write]),
- Data = list_to_binary("foobar"),
+ Data = proplists:get_value(data, Config),
+ Expected = unicode:characters_to_binary(Data),
{async, Ref} = ssh_sftp:awrite(Sftp, Handle, Data),
receive
{async_reply, Ref, ok} ->
- {ok, Data} = file:read_file(FileName);
+ {ok, Expected} = file:read_file(FileName);
Msg ->
ct:fail(Msg)
end.
@@ -596,7 +603,7 @@ position(Config) when is_list(Config) ->
{Sftp, _} = proplists:get_value(sftp, Config),
Data = list_to_binary("1234567890"),
- ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
+ ok = ssh_sftp:write_file(Sftp, FileName, Data),
{ok, Handle} = ssh_sftp:open(Sftp, FileName, [read]),
{ok, 3} = ssh_sftp:position(Sftp, Handle, {bof, 3}),
@@ -623,16 +630,19 @@ pos_read() ->
pos_read(Config) when is_list(Config) ->
FileName = proplists:get_value(testfile, Config),
{Sftp, _} = proplists:get_value(sftp, Config),
- Data = list_to_binary("Hej hopp!"),
- ok = ssh_sftp:write_file(Sftp, FileName, [Data]),
+ Data = proplists:get_value(data_pos, Config),
+ [Expect1,Expect2] = Es = [binary_to_list(unicode:characters_to_binary(D)) || D <- Data],
+ [Len1,Len2] = [length(E) || E <- Es],
+ ok = ssh_sftp:write_file(Sftp, FileName, Data),
- {ok, Handle} = ssh_sftp:open(Sftp, FileName, [read]),
- {async, Ref} = ssh_sftp:apread(Sftp, Handle, {bof, 5}, 4),
+ {ok,Read} = file:read_file(FileName),
+ ct:log("File: <~ts>~n<~p>~nExpect1: <~p>~nExpect2: <~p>", [Read, Read, Expect1, Expect2]),
- NewData = "opp!",
+ {ok,Handle} = ssh_sftp:open(Sftp, FileName, [read]),
+ {async,Ref} = ssh_sftp:apread(Sftp, Handle, {bof, Len1}, Len2),
receive
- {async_reply, Ref, {ok, NewData}} ->
+ {async_reply, Ref, {ok,Expect2}} ->
ok;
Msg ->
ct:fail(Msg)
@@ -640,9 +650,7 @@ pos_read(Config) when is_list(Config) ->
30000 -> ct:fail("timeout ~p:~p",[?MODULE,?LINE])
end,
- NewData1 = "hopp",
-
- {ok, NewData1} = ssh_sftp:pread(Sftp, Handle, {bof, 4}, 4).
+ {ok,Expect1} = ssh_sftp:pread(Sftp, Handle, {bof,0}, Len1).
%%--------------------------------------------------------------------
pos_write() ->
@@ -667,9 +675,10 @@ pos_write(Config) when is_list(Config) ->
30000 -> ct:fail("timeout ~p:~p",[?MODULE,?LINE])
end,
- ok = ssh_sftp:pwrite(Sftp, Handle, eof, list_to_binary("!")),
+ LastData = proplists:get_value(data, Config),
+ ok = ssh_sftp:pwrite(Sftp, Handle, eof, LastData),
- NewData1 = list_to_binary("Bye, see you tomorrow!"),
+ NewData1 = unicode:characters_to_binary("Bye, see you tomorrow" ++ LastData),
{ok, NewData1} = ssh_sftp:read_file(Sftp, FileName).
%%--------------------------------------------------------------------
--
2.16.4