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

openSUSE Build Service is sponsored by