File 0414-ssl-Adjust-when-test-are-run.patch of Package erlang
From b8d795b75bfe16867d7517f41ecc55b5ac87ee5b Mon Sep 17 00:00:00 2001
From: Ingela Anderton Andin <ingela@erlang.org>
Date: Wed, 24 Aug 2022 08:32:32 +0200
Subject: [PATCH] ssl: Adjust when test are run
We do not want to run TLS test when crypto fails to build.
Also avoid testing OpenSSL test tool.
---
lib/ssl/test/openssl_mfl_SUITE.erl | 87 +++++++++----------
lib/ssl/test/ssl_alert_SUITE.erl | 15 ++++
lib/ssl/test/ssl_eqc_SUITE.erl | 15 +++-
lib/ssl/test/ssl_session_cache_api_SUITE.erl | 19 +++-
lib/ssl/test/ssl_test_lib.erl | 21 -----
.../test/tls_server_session_ticket_SUITE.erl | 24 ++++-
6 files changed, 110 insertions(+), 71 deletions(-)
diff --git a/lib/ssl/test/openssl_mfl_SUITE.erl b/lib/ssl/test/openssl_mfl_SUITE.erl
index c26934082a..e7e2d73b0b 100644
--- a/lib/ssl/test/openssl_mfl_SUITE.erl
+++ b/lib/ssl/test/openssl_mfl_SUITE.erl
@@ -38,26 +38,21 @@
reuse_session_erlang_server/1,
reuse_session_erlang_client/1]).
+
+-export([session_id_and_data/3]).
+
-define(SLEEP, 500).
%%--------------------------------------------------------------------
%% Common Test interface functions -----------------------------------
%%--------------------------------------------------------------------
all() ->
- case ssl_test_lib:openssl_dtls_maxfraglen_support() of
- true ->
- [{group, 'tlsv1.3'},
- {group, 'tlsv1.2'},
- {group, 'tlsv1.1'},
- {group, 'tlsv1'},
- {group, 'dtlsv1.2'},
- {group, 'dtlsv1'}];
- false ->
- [{group, 'tlsv1.3'},
- {group, 'tlsv1.2'},
- {group, 'tlsv1.1'},
- {group, 'tlsv1'}]
- end.
+ [{group, 'tlsv1.3'},
+ {group, 'tlsv1.2'},
+ {group, 'tlsv1.1'},
+ {group, 'tlsv1'},
+ {group, 'dtlsv1.2'},
+ {group, 'dtlsv1'}].
groups() ->
[{'tlsv1.3', [], common_tests()},
@@ -125,12 +120,10 @@ openssl_client(Config) when is_list(Config) ->
reuse_session_erlang_server(Config) when is_list(Config) ->
ServerOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
ClientOpts = proplists:get_value(client_rsa_opts, Config),
-
+ Protocol = proplists:get_value(protocol, ServerOpts, tls),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
-
MFL = 512,
- Data = "reuse_session_erlang_server " ++ lists:duplicate(MFL, $r),
-
+ Data = max_frag_data(Protocol, MFL),
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
{mfa, {ssl_test_lib, active_recv, [length(Data)]}},
@@ -153,9 +146,9 @@ reuse_session_erlang_client(Config) when is_list(Config) ->
ClientOpts0 = ssl_test_lib:ssl_options(client_rsa_opts, Config),
ServerOpts = proplists:get_value(server_rsa_opts, Config),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
-
+ Protocol = proplists:get_value(protocol, ClientOpts0, tls),
MFL = 512,
- Data = "reuse_session_erlang_client " ++ lists:duplicate(MFL, $r),
+ Data = max_frag_data(Protocol, MFL),
ClientOpts = [{max_fragment_length, MFL} | ClientOpts0],
{Server, OpenSSLPort} = ssl_test_lib:start_server(openssl, [{maxfrag, MFL}, return_port],
@@ -175,14 +168,12 @@ reuse_session_erlang_client(Config) when is_list(Config) ->
Id0
end,
- %% quit s_server's current session so we can interact with the next client
- true = port_command(OpenSSLPort, "q\n"),
ssl_test_lib:close(Client0),
Client1 =
ssl_test_lib:start_client([{node, ClientNode},
{port, Port}, {host, Hostname},
- {mfa, {ssl_test_lib, session_id, []}},
+ {mfa, {?MODULE, session_id_and_data, [self(), length(Data)]}},
{from, self()}, {options, [{reuse_session, SID} | ClientOpts]}]),
receive
{Client1, SID} ->
@@ -191,25 +182,24 @@ reuse_session_erlang_client(Config) when is_list(Config) ->
ct:fail(session_not_reused)
end,
- ErlRecvFun = fun() ->
- Data = ssl_test_lib:check_active_receive(Client1, Data)
- end,
- max_frag_len_test(Client1, OpenSSLPort, MFL, Data, ErlRecvFun),
+ max_frag_len_test(Client1, OpenSSLPort, MFL, Data),
ssl_test_lib:close(Client1).
openssl_client(MFL, Config) ->
ServerOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
ClientOpts = proplists:get_value(client_rsa_opts, Config),
+ Protocol = proplists:get_value(protocol, ServerOpts, tls),
{_, ServerNode, _} = ssl_test_lib:run_where(Config),
- Data = "mfl_openssl_server " ++ lists:duplicate(MFL, $s),
+ Data = max_frag_data(Protocol, MFL),
+
Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
{from, self()},
{mfa, {ssl_test_lib, active_recv, [length(Data)]}},
{options, ServerOpts}]),
Port = ssl_test_lib:inet_port(Server),
-
+
{_Client, OpenSSLPort} = ssl_test_lib:start_client(openssl, [{port, Port},
{maxfrag, MFL},
{options, ClientOpts},
@@ -224,40 +214,49 @@ openssl_client(MFL, Config) ->
openssl_server(MFL, Config) ->
ClientOpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
ServerOpts = proplists:get_value(server_rsa_opts, Config),
+ Protocol = proplists:get_value(protocol, ClientOpts, tls),
{ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
- Data = "mfl_openssl_server " ++ lists:duplicate(MFL, $s),
+
+ Data = max_frag_data(Protocol, MFL),
{Server, OpenSSLPort} = ssl_test_lib:start_server(openssl, [{maxfrag, MFL},
return_port],
[{server_opts, ServerOpts} | Config]),
Port = ssl_test_lib:inet_port(Server),
-
+
Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
{host, Hostname},
{from, self()},
{mfa, {ssl_test_lib,
active_recv, [length(Data)]}},
{options, [{max_fragment_length, MFL} | ClientOpts]}]),
-
+
max_frag_len_test(Client, OpenSSLPort, MFL, Data).
%% ------------------------------------------------------------
max_frag_len_test(ErlProc, OpenSSL, MFL, Data) ->
- ErlRecvFun = fun() ->
- receive
- {ErlProc, Data} ->
- ok
- end
- end,
- max_frag_len_test(ErlProc, OpenSSL, MFL, Data, ErlRecvFun).
-
-max_frag_len_test(ErlProc, OpenSSL, MFL, Data, ErlRecvFun) ->
- true = port_command(OpenSSL, Data),
- ErlRecvFun(),
-
+ openssl_send(OpenSSL, Data),
+ receive
+ {ErlProc, Data} ->
+ ok
+ end,
ErlProc ! get_socket,
ErlSocket = receive
{ErlProc, {socket, ErlSocket0}} ->
ErlSocket0
end,
ssl_test_lib:assert_mfl(ErlSocket, MFL).
+
+session_id_and_data(Socket, Pid, Len) ->
+ {ok, [{session_id, ID}]} = ssl:connection_information(Socket, [session_id]),
+ Pid ! {self(), ID},
+ ssl_test_lib:active_recv(Socket, Len).
+
+max_frag_data(tls, MaxFragLen) ->
+ "Send more data than max frag length " ++ lists:duplicate(MaxFragLen, $s);
+max_frag_data(dtls, _MaxFragLen) ->
+ "Send small data as OpenSSL s_client/s_server does not create UDP packets "
+ "with appropriate fragments".
+
+openssl_send(OpenSSL, Data) ->
+ port_command(OpenSSL, Data).
diff --git a/lib/ssl/test/ssl_alert_SUITE.erl b/lib/ssl/test/ssl_alert_SUITE.erl
index f20df97d53..d6b132cc63 100644
--- a/lib/ssl/test/ssl_alert_SUITE.erl
+++ b/lib/ssl/test/ssl_alert_SUITE.erl
@@ -29,6 +29,8 @@
%% Common test
-export([all/0,
+ init_per_suite/1,
+ end_per_suite/1,
init_per_testcase/2,
end_per_testcase/2
]).
@@ -54,6 +56,19 @@ all() ->
bad_connect_response
].
+init_per_suite(Config0) ->
+ catch crypto:stop(),
+ try crypto:start() of
+ ok ->
+ ssl_test_lib:clean_start(),
+ Config0
+ catch _:_ ->
+ {skip, "Crypto did not start"}
+ end.
+
+end_per_suite(_Config) ->
+ ssl:stop(),
+ application:stop(crypto).
init_per_testcase(_TestCase, Config) ->
ct:timetrap({seconds, 5}),
Config.
diff --git a/lib/ssl/test/ssl_eqc_SUITE.erl b/lib/ssl/test/ssl_eqc_SUITE.erl
index 84ee7bf778..c8eda84c32 100644
--- a/lib/ssl/test/ssl_eqc_SUITE.erl
+++ b/lib/ssl/test/ssl_eqc_SUITE.erl
@@ -66,9 +66,18 @@ all() ->
%%--------------------------------------------------------------------
init_per_suite(Config) ->
ct:timetrap({seconds, 20}),
- ct_property_test:init_per_suite(Config).
-end_per_suite(Config) ->
- Config.
+ catch crypto:stop(),
+ try crypto:start() of
+ ok ->
+ ssl_test_lib:clean_start(),
+ ct_property_test:init_per_suite(Config)
+ catch _:_ ->
+ {skip, "Crypto did not start"}
+ end.
+
+end_per_suite(_Config) ->
+ ssl:stop(),
+ application:stop(crypto).
init_per_testcase(_, Config0) ->
Config0.
diff --git a/lib/ssl/test/ssl_session_cache_api_SUITE.erl b/lib/ssl/test/ssl_session_cache_api_SUITE.erl
index 2277e0fa66..12e25bdcc0 100644
--- a/lib/ssl/test/ssl_session_cache_api_SUITE.erl
+++ b/lib/ssl/test/ssl_session_cache_api_SUITE.erl
@@ -28,7 +28,9 @@
-include("tls_handshake.hrl").
%% Callback functions
--export([all/0]).
+-export([all/0,
+ init_per_suite/1,
+ end_per_suite/1]).
%% Testcases
-export([server_cb/0,
@@ -43,6 +45,21 @@
all() ->
[server_cb,
client_cb].
+
+init_per_suite(Config0) ->
+ catch crypto:stop(),
+ try crypto:start() of
+ ok ->
+ ssl_test_lib:clean_start(),
+ Config0
+ catch _:_ ->
+ {skip, "Crypto did not start"}
+ end.
+
+end_per_suite(_Config) ->
+ ssl:stop(),
+ application:stop(crypto).
+
%%--------------------------------------------------------------------
%% Test Cases --------------------------------------------------------
%%--------------------------------------------------------------------
diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl
index 0ee97ff531..06988aa307 100644
--- a/lib/ssl/test/ssl_test_lib.erl
+++ b/lib/ssl/test/ssl_test_lib.erl
@@ -196,7 +196,6 @@
openssl_sane_dtls/0,
kill_openssl/0,
openssl_allows_server_renegotiate/1,
- openssl_dtls_maxfraglen_support/0,
openssl_maxfraglen_support/0,
is_sane_oppenssl_pss/1,
consume_port_exit/1,
@@ -4006,26 +4005,6 @@ openssl_maxfraglen_support() ->
false
end.
-openssl_dtls_maxfraglen_support() ->
- case portable_cmd("openssl", ["version"]) of
- "OpenSSL 0" ++ _ ->
- false;
- "OpenSSL 1.0" ++ _ ->
- false;
- "OpenSSL 1.1.0" ++ _ ->
- false;
- "OpenSSL 1.1.1" ++ _ ->
- false;
- "OpenSSL 1.1" ++ _ ->
- false;
- "OpenSSL 3.0.1" ++ _ ->
- false; %% OpenSSL sends internal error alert
- "OpenSSL" ++ _ ->
- true;
- _ ->
- false
- end.
-
assert_mfl(Socket, undefined) ->
InfoMFL = ssl:connection_information(Socket, [max_fragment_length]),
?LOG("Connection MFL ~p, Expecting: [] ~n", [InfoMFL]),
diff --git a/lib/ssl/test/tls_server_session_ticket_SUITE.erl b/lib/ssl/test/tls_server_session_ticket_SUITE.erl
index 6e2eeb4996..954afa9fb5 100644
--- a/lib/ssl/test/tls_server_session_ticket_SUITE.erl
+++ b/lib/ssl/test/tls_server_session_ticket_SUITE.erl
@@ -27,8 +27,14 @@
-include_lib("ssl/src/tls_handshake_1_3.hrl").
%% Callback functions
--export([all/0, groups/0, init_per_group/2, end_per_group/2,
- init_per_testcase/2, end_per_testcase/2]).
+-export([all/0,
+ groups/0,
+ init_per_suite/1,
+ end_per_suite/1,
+ init_per_group/2,
+ end_per_group/2,
+ init_per_testcase/2,
+ end_per_testcase/2]).
%% Testcases
-export([expired_ticket_test/0,
expired_ticket_test/1,
@@ -58,6 +64,20 @@ groups() ->
{stateless_antireplay, [], [main_test, misc_test]}
].
+init_per_suite(Config0) ->
+ catch crypto:stop(),
+ try crypto:start() of
+ ok ->
+ ssl_test_lib:clean_start(),
+ Config0
+ catch _:_ ->
+ {skip, "Crypto did not start"}
+ end.
+
+end_per_suite(_Config) ->
+ ssl:stop(),
+ application:stop(crypto).
+
init_per_group(stateless_antireplay, Config) ->
check_environment([{server_session_tickets, stateless},
{anti_replay, {10, 20, 30}}]
--
2.35.3