File 1614-Store-test-config-certs-in-funs.patch of Package erlang

From 2c05db76ac2b70aa43b9af097002a3545f18467d Mon Sep 17 00:00:00 2001
From: Dan Gudmundsson <dgud@erlang.org>
Date: Tue, 12 Nov 2024 13:03:54 +0100
Subject: [PATCH 4/4] Store test config certs in funs

Reduce the output of (almost) every testcase output, by putting
some settings in fun().

This is just done to reduce the printing of
`=== Config value: ....`
That is printed in each testcase and could be up to 2000 lines.
---
 lib/ssl/test/openssl_alpn_SUITE.erl           |  22 ++--
 lib/ssl/test/openssl_client_cert_SUITE.erl    |  32 ++---
 lib/ssl/test/openssl_mfl_SUITE.erl            |   8 +-
 lib/ssl/test/openssl_npn_SUITE.erl            |  30 ++---
 lib/ssl/test/openssl_server_cert_SUITE.erl    |  52 +++++----
 lib/ssl/test/openssl_session_ticket_SUITE.erl |   6 +-
 lib/ssl/test/ssl_api_SUITE.erl                |  24 ++--
 lib/ssl/test/ssl_cert_SUITE.erl               |  44 +++----
 lib/ssl/test/ssl_dist_bench_SUITE.erl         |   2 +
 lib/ssl/test/ssl_pem_cache_SUITE.erl          |  14 +--
 lib/ssl/test/ssl_session_cache_SUITE.erl      |   4 +-
 lib/ssl/test/ssl_socket_SUITE.erl             |   4 +-
 lib/ssl/test/ssl_test_lib.erl                 | 110 ++++++++++--------
 lib/ssl/test/tls_api_SUITE.erl                |   6 +-
 14 files changed, 186 insertions(+), 172 deletions(-)

diff --git a/lib/ssl/test/openssl_alpn_SUITE.erl b/lib/ssl/test/openssl_alpn_SUITE.erl
index 1d0bc82c4e..838ee8d5a7 100644
--- a/lib/ssl/test/openssl_alpn_SUITE.erl
+++ b/lib/ssl/test/openssl_alpn_SUITE.erl
@@ -165,8 +165,8 @@ end_per_testcase(_, Config) ->
 %%--------------------------------------------------------------------
 
 erlang_client_alpn_openssl_server_alpn(Config) when is_list(Config) ->
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
-    ClientOpts =  ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     AlpnProtocol = <<"spdy/2">>,
 
     {Server, OpenSSLPort} =
@@ -193,7 +193,7 @@ erlang_client_alpn_openssl_server_alpn(Config) when is_list(Config) ->
 %%--------------------------------------------------------------------
 
 erlang_server_alpn_openssl_client_alpn(Config) when is_list(Config) ->
-    ClientOpts = proplists:get_value(client_rsa_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
     ServerOpts =  ssl_test_lib:ssl_options(server_rsa_opts, Config),
     Protocol = <<"spdy/2">>,
     Server = ssl_test_lib:start_server(erlang, [{from, self()}],
@@ -222,7 +222,7 @@ erlang_server_alpn_openssl_client_alpn(Config) when is_list(Config) ->
 %%--------------------------------------------------------------------------
 
 erlang_client_alpn_openssl_server(Config) when is_list(Config) ->
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     ClientOpts =  ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     Protocol = <<"spdy/2">>,
 
@@ -248,7 +248,7 @@ erlang_client_alpn_openssl_server(Config) when is_list(Config) ->
 %%--------------------------------------------------------------------------
 
 erlang_client_openssl_server_alpn(Config) when is_list(Config) ->
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     ClientOpts =  ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
 
     {Server, OpenSSLPort} = ssl_test_lib:start_server(openssl, [{alpn,"spdy/2"}, return_port],
@@ -269,7 +269,7 @@ erlang_client_openssl_server_alpn(Config) when is_list(Config) ->
 
 %%--------------------------------------------------------------------------
 erlang_server_alpn_openssl_client(Config) when is_list(Config) ->
-    ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     ServerOpts =  ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     Server = ssl_test_lib:start_server(erlang, [{from, self()}],
                                        [{server_opts, [{alpn_preferred_protocols,
@@ -296,7 +296,7 @@ erlang_server_alpn_openssl_client(Config) when is_list(Config) ->
 %%--------------------------------------------------------------------------
 
 erlang_server_openssl_client_alpn(Config) when is_list(Config) ->
-    ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     ServerOpts =  ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     Server = ssl_test_lib:start_server(erlang, [{from, self()}],
                                        [{server_opts, [ServerOpts]} | Config]),
@@ -324,7 +324,7 @@ erlang_server_openssl_client_alpn(Config) when is_list(Config) ->
 
 erlang_client_alpn_openssl_server_alpn_renegotiate(Config) when is_list(Config) ->
 
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     ClientOpts =  ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     AlpnProtocol = <<"spdy/2">>,
 
@@ -361,7 +361,7 @@ erlang_client_alpn_openssl_server_alpn_renegotiate(Config) when is_list(Config)
 %%--------------------------------------------------------------------
 
 erlang_server_alpn_openssl_client_alpn_renegotiate(Config) when is_list(Config) ->
-    ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     ServerOpts =  ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     AlpnProtocol = <<"spdy/2">>,
     Server = ssl_test_lib:start_server(erlang, [{from, self()}],
@@ -398,7 +398,7 @@ erlang_server_alpn_openssl_client_alpn_renegotiate(Config) when is_list(Config)
 %%--------------------------------------------------------------------
 
 erlang_client_alpn_npn_openssl_server_alpn_npn(Config) when is_list(Config) ->
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     ClientOpts =  ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     AlpnProtocol = <<"spdy/2">>,
 
@@ -426,7 +426,7 @@ erlang_client_alpn_npn_openssl_server_alpn_npn(Config) when is_list(Config) ->
 %%--------------------------------------------------------------------
 
 erlang_server_alpn_npn_openssl_client_alpn_npn(Config) when is_list(Config) ->
-    ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     ServerOpts =  ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     AlpnProtocol = <<"spdy/2">>,
     Server = ssl_test_lib:start_server(erlang,
diff --git a/lib/ssl/test/openssl_client_cert_SUITE.erl b/lib/ssl/test/openssl_client_cert_SUITE.erl
index 0b60e5d58a..9a692067aa 100644
--- a/lib/ssl/test/openssl_client_cert_SUITE.erl
+++ b/lib/ssl/test/openssl_client_cert_SUITE.erl
@@ -164,8 +164,8 @@ init_per_group(openssl_client, Config) ->
 init_per_group(Group, Config0) when Group == rsa;
                                     Group == rsa_1_3 ->
     Config = ssl_test_lib:make_rsa_cert(Config0),
-    COpts = proplists:get_value(client_rsa_opts, Config),
-    SOpts = proplists:get_value(server_rsa_opts, Config),
+    COpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
+    SOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
     %% Make sure _rsa* suite is chosen by ssl_test_lib:start_server
     Version = ssl_test_lib:protocol_version(Config),
     Ciphers = ssl_cert_tests:test_ciphers(fun(dhe_rsa) ->
@@ -179,8 +179,8 @@ init_per_group(Group, Config0) when Group == rsa;
         [_|_] ->
             [{cert_key_alg, rsa} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, [{ciphers, Ciphers} | COpts]},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> [{ciphers, Ciphers} | COpts] end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config))])];
         [] ->
@@ -205,8 +205,8 @@ init_per_group(Alg, Config) when
               server_config := SOpts} = ssl_test_lib:make_rsa_pss_pem(rsa_alg(Alg), [], Config, ""),
             [{cert_key_alg, rsa_alg(Alg)} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, openssl_sig_algs(rsa_alg(Alg)) ++ COpts},
-                           {server_cert_opts, ssl_test_lib:sig_algs(Alg, Version) ++ SOpts} |
+                          [{client_cert_opts, fun() -> openssl_sig_algs(rsa_alg(Alg)) ++ COpts end},
+                           {server_cert_opts, fun() -> ssl_test_lib:sig_algs(Alg, Version) ++ SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config))])];
         false ->
@@ -221,8 +221,8 @@ init_per_group(Group, Config0) when Group == ecdsa;
     of
         true ->
             Config = ssl_test_lib:make_ecdsa_cert(Config0),
-            COpts = proplists:get_value(client_ecdsa_opts, Config),
-            SOpts = proplists:get_value(server_ecdsa_opts, Config),
+            COpts = ssl_test_lib:ssl_options(client_ecdsa_opts, Config),
+            SOpts = ssl_test_lib:ssl_options(server_ecdsa_opts, Config),
             %% Make sure ecdh* suite is chosen by ssl_test_lib:start_server
             Version = ssl_test_lib:protocol_version(Config),
             Ciphers =  ssl_cert_tests:test_ciphers(fun(ecdh_ecdsa) ->
@@ -236,8 +236,8 @@ init_per_group(Group, Config0) when Group == ecdsa;
                 [_|_] ->
                     [{cert_key_alg, ecdsa} |
                      lists:delete(cert_key_alg,
-                                  [{client_cert_opts, [{ciphers, Ciphers} | COpts]},
-                                   {server_cert_opts, SOpts} |
+                                  [{client_cert_opts, fun() -> [{ciphers, Ciphers} | COpts] end},
+                                   {server_cert_opts, fun() -> SOpts end} |
                                    lists:delete(server_cert_opts,
                                                 lists:delete(client_cert_opts, Config))]
                                  )];
@@ -268,8 +268,8 @@ init_per_group(eddsa_1_3, Config0) ->
 
             [{cert_key_alg, eddsa} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, COpts},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> COpts end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config0))]
                          )];
@@ -286,8 +286,8 @@ init_per_group(Group, Config0) when Group == dsa ->
     of
         true ->
             Config = ssl_test_lib:make_dsa_cert(Config0),
-            COpts = SigAlgs ++ proplists:get_value(client_dsa_opts, Config),
-            SOpts = SigAlgs ++ proplists:get_value(server_dsa_opts, Config),
+            COpts = SigAlgs ++ ssl_test_lib:ssl_options(client_dsa_opts, Config),
+            SOpts = SigAlgs ++ ssl_test_lib:ssl_options(server_dsa_opts, Config),
             %% Make sure dhe_dss* suite is chosen by ssl_test_lib:start_server
             Version = ssl_test_lib:protocol_version(Config),
             Ciphers =  ssl_cert_tests:test_ciphers(fun(dh_dss) ->
@@ -301,8 +301,8 @@ init_per_group(Group, Config0) when Group == dsa ->
                 [_|_] ->
                     [{cert_key_alg, dsa} |
                      lists:delete(cert_key_alg,
-                                  [{client_cert_opts, [{ciphers, Ciphers} | COpts]},
-                                   {server_cert_opts, [{ciphers, Ciphers} | SOpts]} |
+                                  [{client_cert_opts, fun() -> [{ciphers, Ciphers} | COpts] end},
+                                   {server_cert_opts, fun() -> [{ciphers, Ciphers} | SOpts] end} |
                                    lists:delete(server_cert_opts,
                                                 lists:delete(client_cert_opts, Config))])];
                 [] ->
diff --git a/lib/ssl/test/openssl_mfl_SUITE.erl b/lib/ssl/test/openssl_mfl_SUITE.erl
index 1acd18e422..7fabffa159 100644
--- a/lib/ssl/test/openssl_mfl_SUITE.erl
+++ b/lib/ssl/test/openssl_mfl_SUITE.erl
@@ -111,7 +111,7 @@ 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_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     Protocol = proplists:get_value(protocol, ServerOpts, tls),
     {_, ServerNode, _} = ssl_test_lib:run_where(Config),
     MFL = 512,
@@ -136,7 +136,7 @@ reuse_session_erlang_server(Config) when is_list(Config) ->
 reuse_session_erlang_client(Config) when is_list(Config) ->
     process_flag(trap_exit, true),
     ClientOpts0 = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
-    ServerOpts = proplists:get_value(server_rsa_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
     {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
     Protocol = proplists:get_value(protocol, ClientOpts0, tls),
     MFL = 512,
@@ -180,7 +180,7 @@ reuse_session_erlang_client(Config) when is_list(Config) ->
 
 openssl_client(MFL, Config) ->  
     ServerOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
-    ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     Protocol = proplists:get_value(protocol, ServerOpts, tls),
     {_, ServerNode, _} = ssl_test_lib:run_where(Config),
 
@@ -205,7 +205,7 @@ openssl_client(MFL, Config) ->
 
 openssl_server(MFL, Config) ->
     ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
-    ServerOpts = proplists:get_value(server_rsa_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
     Protocol = proplists:get_value(protocol, ClientOpts, tls),
     {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config),
 
diff --git a/lib/ssl/test/openssl_npn_SUITE.erl b/lib/ssl/test/openssl_npn_SUITE.erl
index fb8aee6ef7..2348080f66 100644
--- a/lib/ssl/test/openssl_npn_SUITE.erl
+++ b/lib/ssl/test/openssl_npn_SUITE.erl
@@ -129,8 +129,8 @@ erlang_client_openssl_server_npn() ->
     [{doc,"Test erlang client with openssl server doing npn negotiation"}].
 
 erlang_client_openssl_server_npn(Config) when is_list(Config) ->
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
-    ClientOpts =  ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     NpnProtocol = <<"spdy/2">>,
    
     {Server, OpenSSLPort} =
@@ -161,8 +161,8 @@ erlang_client_openssl_server_npn_renegotiate() ->
 
 erlang_client_openssl_server_npn_renegotiate(Config) when is_list(Config) ->
       
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
-    ClientOpts =  ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     NpnProtocol = <<"spdy/2">>,
    
     Server = ssl_test_lib:start_server(openssl, [{np,"http/1.1,spdy/2"}],
@@ -197,8 +197,8 @@ erlang_server_openssl_client_npn() ->
     [{doc,"Test erlang server with openssl client and npn negotiation"}].
 
 erlang_server_openssl_client_npn(Config) when is_list(Config) ->
-    ClientOpts = proplists:get_value(client_rsa_opts, Config),
-    ServerOpts =  ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     Protocol = <<"spdy/2">>,
     Server = ssl_test_lib:start_server(erlang, [{from, self()}],  
                                        [{server_opts, [{next_protocols_advertised, 
@@ -230,8 +230,8 @@ erlang_server_openssl_client_npn(Config) when is_list(Config) ->
 %%     [{doc,"Test erlang server with openssl client and npn negotiation with renegotiation"}].
 
 erlang_server_openssl_client_npn_renegotiate(Config) when is_list(Config) ->
-    ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
-    ServerOpts =  ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     NpnProtocol = <<"spdy/2">>,
     Server =
         ssl_test_lib:start_server(erlang, [{from, self()}],
@@ -266,8 +266,8 @@ erlang_server_openssl_client_npn_renegotiate(Config) when is_list(Config) ->
     ssl:close(SSocket).
 %%--------------------------------------------------------------------------
 erlang_client_openssl_server_npn_only_client(Config) when is_list(Config) ->
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
-    ClientOpts =  ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
    
     {Server, OpenSSLPort} =
         ssl_test_lib:start_server(openssl, [{np,"spdy/2"}, return_port],
@@ -290,8 +290,8 @@ erlang_client_openssl_server_npn_only_client(Config) when is_list(Config) ->
 
 %%--------------------------------------------------------------------------
 erlang_client_openssl_server_npn_only_server(Config) when is_list(Config) ->
-   ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
-    ClientOpts =  ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
    
     {Server, OpenSSLPort} =
         ssl_test_lib:start_server(openssl, [{np,"spdy/2"}, return_port],
@@ -314,7 +314,7 @@ erlang_client_openssl_server_npn_only_server(Config) when is_list(Config) ->
         
 %%--------------------------------------------------------------------------
 erlang_server_openssl_client_npn_only_server(Config) when is_list(Config) ->
-  ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
     ServerOpts =  ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     Server =
         ssl_test_lib:start_server(erlang, [{from, self()}],
@@ -344,8 +344,8 @@ erlang_server_openssl_client_npn_only_server(Config) when is_list(Config) ->
 
 %%--------------------------------------------------------------------------
 erlang_server_openssl_client_npn_only_client(Config) when is_list(Config) ->
-    ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
-    ServerOpts =  ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     Server = ssl_test_lib:start_server(erlang, [{from, self()}],  
                                        [{server_opts, [ServerOpts]} | Config]),
     Port = ssl_test_lib:inet_port(Server),
diff --git a/lib/ssl/test/openssl_server_cert_SUITE.erl b/lib/ssl/test/openssl_server_cert_SUITE.erl
index 057d80b6f3..53bc990e4b 100644
--- a/lib/ssl/test/openssl_server_cert_SUITE.erl
+++ b/lib/ssl/test/openssl_server_cert_SUITE.erl
@@ -159,8 +159,8 @@ init_per_group(openssl_server, Config0) ->
     [{client_type, erlang}, {server_type, openssl} | Config];
 init_per_group(rsa = Group, Config0) ->
     Config = ssl_test_lib:make_rsa_cert(Config0),
-    COpts = proplists:get_value(client_rsa_opts, Config),
-    SOpts = proplists:get_value(server_rsa_opts, Config),
+    COpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
+    SOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
     %% Make sure _rsa* suite is chosen by ssl_test_lib:start_server
     Version = ssl_test_lib:protocol_version(Config),
     Ciphers = ssl_cert_tests:test_ciphers(fun(dhe_rsa) ->
@@ -174,8 +174,8 @@ init_per_group(rsa = Group, Config0) ->
         [_|_] ->
             [{cert_key_alg, rsa} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, [{ciphers, Ciphers} | COpts]},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> [{ciphers, Ciphers} | COpts] end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config))])];
         [] ->
@@ -183,8 +183,8 @@ init_per_group(rsa = Group, Config0) ->
     end;
 init_per_group(rsa_1_3 = Group, Config0) ->
     Config = ssl_test_lib:make_rsa_cert(Config0),
-    COpts = proplists:get_value(client_rsa_opts, Config),
-    SOpts = proplists:get_value(server_rsa_opts, Config),
+    COpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
+    SOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
     %% Make sure _rsa* suite is chosen by ssl_test_lib:start_server
     Version = ssl_test_lib:protocol_version(Config),
     Ciphers = ssl_cert_tests:test_ciphers(undefined, Version),
@@ -192,8 +192,8 @@ init_per_group(rsa_1_3 = Group, Config0) ->
         [_|_] ->
             [{cert_key_alg, rsa} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, [{ciphers, Ciphers} | COpts]},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> [{ciphers, Ciphers} | COpts] end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config))])];
         [] ->
@@ -202,7 +202,7 @@ init_per_group(rsa_1_3 = Group, Config0) ->
 init_per_group(Alg, Config) when Alg == rsa_pss_rsae;
                                  Alg == rsa_pss_pss ->
     Supports = crypto:supports(),
-    RSAOpts = proplists:get_value(rsa_opts, Supports),
+    RSAOpts = ssl_test_lib:ssl_options(rsa_opts, Supports),
 
     case lists:member(rsa_pkcs1_pss_padding, RSAOpts)
         andalso lists:member(rsa_pss_saltlen, RSAOpts)
@@ -214,8 +214,8 @@ init_per_group(Alg, Config) when Alg == rsa_pss_rsae;
               server_config := SOpts} = ssl_test_lib:make_rsa_pss_pem(Alg, [], Config, ""),
             [{cert_key_alg, Alg} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, COpts},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> COpts end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config))])];
         false ->
@@ -229,8 +229,8 @@ init_per_group(ecdsa = Group, Config0) ->
     of
         true ->
             Config = ssl_test_lib:make_ecdsa_cert(Config0),
-            COpts = proplists:get_value(client_ecdsa_opts, Config),
-            SOpts = proplists:get_value(server_ecdsa_opts, Config),
+            COpts = ssl_test_lib:ssl_options(client_ecdsa_opts, Config),
+            SOpts = ssl_test_lib:ssl_options(server_ecdsa_opts, Config),
             %% Make sure ecdh* suite is chosen by ssl_test_lib:start_server
             Version = ssl_test_lib:protocol_version(Config),
             Ciphers =  ssl_cert_tests:test_ciphers(fun(ecdh_ecdsa) ->
@@ -244,8 +244,8 @@ init_per_group(ecdsa = Group, Config0) ->
                 [_|_] ->
                     [{cert_key_alg, ecdsa} |
                      lists:delete(cert_key_alg,
-                                  [{client_cert_opts, [{ciphers, Ciphers} | COpts]},
-                                   {server_cert_opts, SOpts} |
+                                  [{client_cert_opts, fun() -> [{ciphers, Ciphers} | COpts] end},
+                                   {server_cert_opts, fun() -> SOpts end} |
                                    lists:delete(server_cert_opts,
                                                 lists:delete(client_cert_opts, Config))]
                                  )];
@@ -263,8 +263,8 @@ init_per_group(ecdsa_1_3 = Group, Config0) ->
     of
         true ->
             Config = ssl_test_lib:make_ecdsa_cert(Config0),
-            COpts = proplists:get_value(client_ecdsa_opts, Config),
-            SOpts = proplists:get_value(server_ecdsa_opts, Config),
+            COpts = ssl_test_lib:ssl_options(client_ecdsa_opts, Config),
+            SOpts = ssl_test_lib:ssl_options(server_ecdsa_opts, Config),
             %% Make sure ecdh* suite is chosen by ssl_test_lib:start_server
             Version = ssl_test_lib:protocol_version(Config),
             Ciphers =  ssl_cert_tests:test_ciphers(undefined, Version),
@@ -272,8 +272,8 @@ init_per_group(ecdsa_1_3 = Group, Config0) ->
                 [_|_] ->
                     [{cert_key_alg, ecdsa} |
                      lists:delete(cert_key_alg,
-                                  [{client_cert_opts, [{ciphers, Ciphers} | COpts]},
-                                   {server_cert_opts, SOpts} |
+                                  [{client_cert_opts, fun() -> [{ciphers, Ciphers} | COpts] end},
+                                   {server_cert_opts, fun() -> SOpts end} |
                                    lists:delete(server_cert_opts,
                                                 lists:delete(client_cert_opts, Config))]
                                  )];
@@ -301,8 +301,8 @@ init_per_group(eddsa_1_3, Config0) ->
 
             [{cert_key_alg, eddsa} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, COpts},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> COpts end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config0))]
                          )];
@@ -317,8 +317,8 @@ init_per_group(dsa = Group, Config0) ->
     of
         true ->
             Config = ssl_test_lib:make_dsa_cert(Config0),
-            COpts = proplists:get_value(client_dsa_opts, Config),
-            SOpts = proplists:get_value(server_dsa_opts, Config),
+            COpts = ssl_test_lib:ssl_options(client_dsa_opts, Config),
+            SOpts = ssl_test_lib:ssl_options(server_dsa_opts, Config),
             %% Make sure dhe_dss* suite is chosen by ssl_test_lib:start_server
             Version = ssl_test_lib:protocol_version(Config),
             Ciphers =  ssl_cert_tests:test_ciphers(fun(dh_dss) ->
@@ -332,8 +332,10 @@ init_per_group(dsa = Group, Config0) ->
                 [_|_] ->
                     [{cert_key_alg, dsa} |
                      lists:delete(cert_key_alg,
-                                  [{client_cert_opts, [{ciphers, Ciphers} | COpts]  ++ ssl_test_lib:sig_algs(dsa, Version)},
-                                   {server_cert_opts, SOpts} |
+                                  [{client_cert_opts, fun() -> [{ciphers, Ciphers} | COpts]  ++
+                                                                   ssl_test_lib:sig_algs(dsa, Version)
+                                                      end},
+                                   {server_cert_opts, fun() -> SOpts end} |
                                    lists:delete(server_cert_opts,
                                                 lists:delete(client_cert_opts, Config))])];
                 [] ->
diff --git a/lib/ssl/test/openssl_session_ticket_SUITE.erl b/lib/ssl/test/openssl_session_ticket_SUITE.erl
index 991f290dc7..e0732257c9 100644
--- a/lib/ssl/test/openssl_session_ticket_SUITE.erl
+++ b/lib/ssl/test/openssl_session_ticket_SUITE.erl
@@ -168,7 +168,7 @@ openssl_client_basic() ->
     [{doc,"Test session resumption with session tickets (openssl client - erlang server)"}].
 openssl_client_basic(Config) when is_list(Config) ->
     ServerOpts0 = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
-    ClientOpts = proplists:get_value(client_rsa_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
 
     {_, ServerNode, _Hostname} = ssl_test_lib:run_where(Config),
     TicketFile0 = filename:join([proplists:get_value(priv_dir, Config), "session_ticket0"]),
@@ -264,7 +264,7 @@ openssl_client_hrr() ->
     [{doc,"Test session resumption with session tickets and hello_retry_request (openssl client - erlang server)"}].
 openssl_client_hrr(Config) when is_list(Config) ->
     ServerOpts0 = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
-    ClientOpts = proplists:get_value(client_rsa_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
     {_, ServerNode, _Hostname} = ssl_test_lib:run_where(Config),
     TicketFile0 = filename:join([proplists:get_value(priv_dir, Config), "session_ticket0"]),
     TicketFile1 = filename:join([proplists:get_value(priv_dir, Config), "session_ticket1"]),
@@ -650,7 +650,7 @@ openssl_client_early_data_basic() ->
     [{doc,"Test early data (openssl client - erlang server)"}].
 openssl_client_early_data_basic(Config) when is_list(Config) ->
     ServerOpts0 = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
-    ClientOpts = proplists:get_value(client_rsa_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
 
     {_, ServerNode, _Hostname} = ssl_test_lib:run_where(Config),
     TicketFile0 = filename:join([proplists:get_value(priv_dir, Config), "session_ticket0"]),
diff --git a/lib/ssl/test/ssl_api_SUITE.erl b/lib/ssl/test/ssl_api_SUITE.erl
index e4c65b8816..09cc27b96d 100644
--- a/lib/ssl/test/ssl_api_SUITE.erl
+++ b/lib/ssl/test/ssl_api_SUITE.erl
@@ -3857,8 +3857,8 @@ export_key_materials(Config) when is_list(Config) ->
     {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
     Version = ssl_test_lib:protocol_version(Config, atom),
     BaseOpts = [{active, true}, {versions, [Version]}, {protocol, tls_or_dtls(Version)}],
-    ServerOpts = BaseOpts ++ proplists:get_value(server_rsa_opts, Config, []),
-    ClientOpts = BaseOpts ++ proplists:get_value(client_rsa_opts, Config, []),
+    ServerOpts = BaseOpts ++ ssl_test_lib:ssl_options(server_rsa_opts, Config),
+    ClientOpts = BaseOpts ++ ssl_test_lib:ssl_options(client_rsa_opts, Config),
 
     Label = <<"EXPERIMENTAL-otp">>,
 
@@ -3894,8 +3894,8 @@ exporter_master_secret_consumed(Config) when is_list(Config) ->
     {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
     Version = ssl_test_lib:protocol_version(Config, atom),
     BaseOpts = [{active, true}, {versions, [Version]}, {protocol, tls_or_dtls(Version)}],
-    ServerOpts = BaseOpts ++ proplists:get_value(server_rsa_opts, Config, []),
-    ClientOpts = BaseOpts ++ proplists:get_value(client_rsa_opts, Config, []),
+    ServerOpts = BaseOpts ++ ssl_test_lib:ssl_options(server_rsa_opts, Config),
+    ClientOpts = BaseOpts ++ ssl_test_lib:ssl_options(client_rsa_opts, Config),
 
     Label1 = <<"EXPERIMENTAL-otp1">>,
     Label2 = <<"EXPERIMENTAL-otp2">>,
@@ -3927,14 +3927,14 @@ legacy_prf(Config) when is_list(Config) ->
     {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
     Version = ssl_test_lib:protocol_version(Config, atom),
     BaseOpts = [{active, true}, {versions, [Version]}, {protocol, tls_or_dtls(Version)}],
-    ServerOpts = BaseOpts ++ proplists:get_value(server_rsa_opts, Config, []),
-    ClientOpts = BaseOpts ++ proplists:get_value(client_rsa_opts, Config, []),
+    ServerOpts = BaseOpts ++ ssl_test_lib:ssl_options(server_rsa_opts, Config),
+    ClientOpts = BaseOpts ++ ssl_test_lib:ssl_options(client_rsa_opts, Config),
 
    {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
     Version = ssl_test_lib:protocol_version(Config, atom),
     BaseOpts = [{active, true}, {versions, [Version]}, {protocol, tls_or_dtls(Version)}],
-    ServerOpts = BaseOpts ++ proplists:get_value(server_rsa_opts, Config, []),
-    ClientOpts = BaseOpts ++ proplists:get_value(client_rsa_opts, Config, []),
+    ServerOpts = BaseOpts ++ ssl_test_lib:ssl_options(server_rsa_opts, Config),
+    ClientOpts = BaseOpts ++ ssl_test_lib:ssl_options(client_rsa_opts, Config),
 
     Label = <<"EXPERIMENTAL-otp">>,
 
@@ -4570,12 +4570,12 @@ test_config('dtlsv1.2', Config) ->
     ];
 test_config(_, Config) ->
     RSAConf1 = ssl_test_lib:make_rsa_cert(Config),
-    SRSA1Opts = proplists:get_value(server_rsa_opts, RSAConf1),
-    CRSA1Opts = proplists:get_value(client_rsa_opts, RSAConf1),
+    SRSA1Opts = ssl_test_lib:ssl_options(server_rsa_opts, RSAConf1),
+    CRSA1Opts = ssl_test_lib:ssl_options(client_rsa_opts, RSAConf1),
 
     RSAConf2 = ssl_test_lib:make_rsa_1024_cert(Config),
-    SRSA2Opts = proplists:get_value(server_rsa_1024_opts, RSAConf2),
-    CRSA2Opts = proplists:get_value(client_rsa_1024_opts, RSAConf2),
+    SRSA2Opts = ssl_test_lib:ssl_options(server_rsa_1024_opts, RSAConf2),
+    CRSA2Opts = ssl_test_lib:ssl_options(client_rsa_1024_opts, RSAConf2),
 
     {SRSA1Cert, SRSA1Key, _SRSA1CACerts} = get_single_options(certfile, keyfile, cacertfile, SRSA1Opts),
     {CRSA1Cert, CRSA1Key, _CRSA1CACerts} = get_single_options(certfile, keyfile, cacertfile, CRSA1Opts),
diff --git a/lib/ssl/test/ssl_cert_SUITE.erl b/lib/ssl/test/ssl_cert_SUITE.erl
index 39f163f6f5..9be561e5e7 100644
--- a/lib/ssl/test/ssl_cert_SUITE.erl
+++ b/lib/ssl/test/ssl_cert_SUITE.erl
@@ -295,15 +295,15 @@ do_init_per_group(Group, Config0) when Group == rsa;
                                        Group == rsa_1_3 ->
     Config1 = ssl_test_lib:make_rsa_cert(Config0),
     Config = ssl_test_lib:make_rsa_1024_cert(Config1),
-    COpts = proplists:get_value(client_rsa_verify_opts, Config),
-    SOpts = proplists:get_value(server_rsa_opts, Config),
+    COpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    SOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
     Version = proplists:get_value(version, Config),
     [{cert_key_alg, rsa},
      {extra_client, ssl_test_lib:sig_algs(rsa, Version)},
      {extra_server, ssl_test_lib:sig_algs(rsa, Version)} |
      lists:delete(cert_key_alg,
-                  [{client_cert_opts, COpts},
-                   {server_cert_opts, SOpts} |
+                  [{client_cert_opts, fun() -> COpts end},
+                   {server_cert_opts, fun() -> SOpts end} |
                    lists:delete(server_cert_opts,
                                 lists:delete(client_cert_opts, Config))])];
 do_init_per_group(Alg, Config) when Alg == rsa_pss_rsae;
@@ -322,8 +322,8 @@ do_init_per_group(Alg, Config) when Alg == rsa_pss_rsae;
              {extra_client, ssl_test_lib:sig_algs(Alg, Version)},
              {extra_server, ssl_test_lib:sig_algs(Alg, Version)} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, COpts},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> COpts end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config))])];
         false ->
@@ -343,8 +343,8 @@ do_init_per_group(Alg, Config) when Alg == rsa_pss_rsae_1_3;
               server_config := SOpts} = ssl_test_lib:make_rsa_pss_pem(rsa_alg(Alg), [], Config, ""),
             [{cert_key_alg, rsa_alg(Alg)} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, COpts},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> COpts end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config))])];
         false ->
@@ -357,12 +357,12 @@ do_init_per_group(Group, Config0) when Group == ecdsa;
     case lists:member(ecdsa, PKAlg) andalso (lists:member(ecdh, PKAlg) orelse lists:member(dh, PKAlg)) of
         true ->
             Config = ssl_test_lib:make_ecdsa_cert(Config0),
-            COpts = proplists:get_value(client_ecdsa_verify_opts, Config),
-            SOpts = proplists:get_value(server_ecdsa_opts, Config),
+            COpts = ssl_test_lib:ssl_options(client_ecdsa_verify_opts, Config),
+            SOpts = ssl_test_lib:ssl_options(server_ecdsa_opts, Config),
             [{cert_key_alg, ecdsa} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, COpts},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> COpts end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config))]
                          )];
@@ -386,8 +386,8 @@ do_init_per_group(eddsa_1_3, Config0) ->
 
             [{cert_key_alg, eddsa} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, COpts},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> COpts end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config0))]
                          )];
@@ -400,8 +400,8 @@ do_init_per_group(dsa = Alg, Config0) ->
     case lists:member(dss, PKAlg) andalso lists:member(dh, PKAlg) of
         true ->
             Config = ssl_test_lib:make_dsa_cert(Config0),
-            COpts = proplists:get_value(client_dsa_opts, Config),
-            SOpts = proplists:get_value(server_dsa_opts, Config),
+            COpts = ssl_test_lib:ssl_options(client_dsa_opts, Config),
+            SOpts = ssl_test_lib:ssl_options(server_dsa_opts, Config),
             ShaDSA = case Version of
                          {3, 3} ->
                              [{signature_algs, [{sha, dsa}]}];
@@ -414,8 +414,8 @@ do_init_per_group(dsa = Alg, Config0) ->
              {extra_server, ssl_test_lib:sig_algs(Alg, Version) ++
                   [{ciphers, ssl_test_lib:dsa_suites(Version)}] ++ ShaDSA} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, COpts},
-                           {server_cert_opts, SOpts} |
+                          [{client_cert_opts, fun() -> COpts end},
+                           {server_cert_opts, fun() -> SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config))])];
         false ->
@@ -447,12 +447,12 @@ init_ecdsa_opts(Config0, Curve) ->
     case lists:member(ecdsa, PKAlg) andalso (lists:member(ecdh, PKAlg) orelse lists:member(dh, PKAlg)) of
         true ->
             Config = ssl_test_lib:make_rsa_ecdsa_cert(Config0, Curve),
-            COpts = proplists:get_value(client_ecdsa_verify_opts, Config),
-            SOpts = proplists:get_value(server_ecdsa_opts, Config),
+            COpts = ssl_test_lib:ssl_options(client_ecdsa_verify_opts, Config),
+            SOpts = ssl_test_lib:ssl_options(server_ecdsa_opts, Config),
             [{cert_key_alg, ecdsa} |
              lists:delete(cert_key_alg,
-                          [{client_cert_opts, ssl_test_lib:sig_algs(ecdsa, Version) ++ COpts},
-                           {server_cert_opts, ssl_test_lib:sig_algs(ecdsa, Version) ++ SOpts} |
+                          [{client_cert_opts, fun() -> ssl_test_lib:sig_algs(ecdsa, Version) ++ COpts end},
+                           {server_cert_opts, fun() -> ssl_test_lib:sig_algs(ecdsa, Version) ++ SOpts end} |
                            lists:delete(server_cert_opts,
                                         lists:delete(client_cert_opts, Config))]
                          )];
diff --git a/lib/ssl/test/ssl_dist_bench_SUITE.erl b/lib/ssl/test/ssl_dist_bench_SUITE.erl
index b516b6988a..ef7eb6b9e5 100644
--- a/lib/ssl/test/ssl_dist_bench_SUITE.erl
+++ b/lib/ssl/test/ssl_dist_bench_SUITE.erl
@@ -211,6 +211,8 @@ init_per_suite(Config) ->
     catch
         throw : {Skip, Reason} ->
             {skip, Reason};
+        throw : {skipped, Reason} ->
+            {skip, Reason};
         Class : Reason : Stacktrace ->
             {fail, {Class, Reason, Stacktrace}}
     end.
diff --git a/lib/ssl/test/ssl_pem_cache_SUITE.erl b/lib/ssl/test/ssl_pem_cache_SUITE.erl
index 4d2a370c31..865ef7957b 100644
--- a/lib/ssl/test/ssl_pem_cache_SUITE.erl
+++ b/lib/ssl/test/ssl_pem_cache_SUITE.erl
@@ -243,8 +243,8 @@ invalid_insert() ->
 invalid_insert(Config) when is_list(Config) ->
     process_flag(trap_exit, true),
     [0, 0, 0, 0] = get_table_sizes(),  %% Initialy all tables are empty
-    ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
     BadClientOpts = [{cacertfile, "tmp/does_not_exist.pem"} |
                      proplists:delete(cacertfile, ClientOpts)],
@@ -614,8 +614,8 @@ alternative_path_helper(Config, GetAlternative,
     %% Init - represents initial state
     %% ConnectedN - state after establishing Nth connection
     %% Disconnected - state after closing connections
-    ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
-    CACertFilePath0 = proplists:get_value(cacertfile, ClientOpts),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    CACertFilePath0 = ssl_test_lib:ssl_options(cacertfile, ClientOpts),
     {ok, CACertFilename} = strip_path(CACertFilePath0),
     {ok, Cwd} = file:get_cwd(),
 
@@ -705,8 +705,8 @@ create_initial_config(Config) ->
     ClientBase = filename:join(PrivDir, "client_test"),
     ServerBase = filename:join(PrivDir, "server_test"),
     PemConfig = x509_test:gen_pem_config_files(DerConfig, ClientBase, ServerBase),
-    ClientConf = proplists:get_value(client_config, PemConfig),
-    ServerConf = proplists:get_value(server_config, PemConfig),
+    ClientConf = ssl_test_lib:ssl_options(client_config, PemConfig),
+    ServerConf = ssl_test_lib:ssl_options(server_config, PemConfig),
     {proplists:get_value(cacertfile, ServerConf), ClientConf, ServerConf, ServerRootCert0,
     ClientBase, ServerBase}.
 
@@ -752,7 +752,7 @@ pem_periodical_cleanup(Config, FileIds,
     ct:sleep(4 * ?SLEEP_AMOUNT),
     Init = get_table_sizes(),
 
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     
     {Server, Client} = basic_verify_test_no_close(Config),
 
diff --git a/lib/ssl/test/ssl_session_cache_SUITE.erl b/lib/ssl/test/ssl_session_cache_SUITE.erl
index e2559b156e..bc0250318c 100644
--- a/lib/ssl/test/ssl_session_cache_SUITE.erl
+++ b/lib/ssl/test/ssl_session_cache_SUITE.erl
@@ -360,8 +360,8 @@ max_table_size() ->
     [{doc,"Test max limit on session table"}].
 max_table_size(Config) when is_list(Config) ->
     process_flag(trap_exit, true),
-    ClientOpts = proplists:get_value(client_rsa_verify_opts, Config),
-    ServerOpts = proplists:get_value(server_rsa_verify_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_verify_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_verify_opts, Config),
     {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
     Server =
 	ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
diff --git a/lib/ssl/test/ssl_socket_SUITE.erl b/lib/ssl/test/ssl_socket_SUITE.erl
index 6cfd111f35..5dd1e09789 100644
--- a/lib/ssl/test/ssl_socket_SUITE.erl
+++ b/lib/ssl/test/ssl_socket_SUITE.erl
@@ -151,8 +151,8 @@ getstat() ->
     [{doc,"Test API function getstat/2"}].
 
 getstat(Config) when is_list(Config) ->
-    ClientOpts = ?config(client_rsa_opts, Config),
-    ServerOpts = ?config(server_rsa_opts, Config),
+    ClientOpts = ssl_test_lib:ssl_options(client_rsa_opts, Config),
+    ServerOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
     {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
     Server1 =
         ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl
index 931fb1602e..67970b537d 100644
--- a/lib/ssl/test/ssl_test_lib.erl
+++ b/lib/ssl/test/ssl_test_lib.erl
@@ -730,7 +730,7 @@ connect(_, _, 0, AcceptSocket, _, _, _) ->
 connect(ListenSocket, Node, _N, _, Timeout, SslOpts, cancel) ->
     ?CT_LOG("ssl:transport_accept(~P)~n", [ListenSocket, ?PRINT_DEPTH]),
     {ok, AcceptSocket} = ssl:transport_accept(ListenSocket),    
-    ?CT_LOG("~nssl:handshake(~p,~p,~p)~n", [AcceptSocket, format_options(SslOpts),Timeout]),
+    ?CT_LOG("~nssl:handshake(~p,~0.p,~0.p)~n", [AcceptSocket, format_options(SslOpts),Timeout]),
 
     case ssl:handshake(AcceptSocket, SslOpts, Timeout) of
 	{ok, Socket0, Ext} ->
@@ -742,9 +742,9 @@ connect(ListenSocket, Node, _N, _, Timeout, SslOpts, cancel) ->
 	    Result
     end;
 connect(ListenSocket, Node, N, _, Timeout, SslOpts, [_|_] =ContOpts0) ->
-    ?CT_LOG("ssl:transport_accept(~P)~n", [ListenSocket, ?PRINT_DEPTH]),
+    ?CT_LOG("ssl:transport_accept(~0.P)~n", [ListenSocket, ?PRINT_DEPTH]),
     {ok, AcceptSocket} = ssl:transport_accept(ListenSocket),    
-    ?CT_LOG("~nssl:handshake(~p,~p,~p)~n", [AcceptSocket, SslOpts,Timeout]),
+    ?CT_LOG("~nssl:handshake(~p,~0.p,~0.p)~n", [AcceptSocket, SslOpts,Timeout]),
 
     case ssl:handshake(AcceptSocket, SslOpts, Timeout) of
 	{ok, Socket0, Ext} ->
@@ -761,7 +761,7 @@ connect(ListenSocket, Node, N, _, Timeout, SslOpts, [_|_] =ContOpts0) ->
                            _ ->
                                ContOpts0
                        end,
-            ?CT_LOG("~nssl:handshake_continue(~p,~p,~p)~n", [Socket0, ContOpts,Timeout]),
+            ?CT_LOG("~nssl:handshake_continue(~p,~0.p,~0.p)~n", [Socket0, ContOpts,Timeout]),
             case ssl:handshake_continue(Socket0, ContOpts, Timeout) of
                 {ok, Socket} ->
                     connect(ListenSocket, Node, N-1, Socket, Timeout, SslOpts, ContOpts0);
@@ -774,7 +774,7 @@ connect(ListenSocket, Node, N, _, Timeout, SslOpts, [_|_] =ContOpts0) ->
 	    Result
     end;
 connect(ListenSocket, Node, N, _, Timeout, [], ContOpts) ->
-    ?CT_LOG("ssl:transport_accept(~P)~n", [ListenSocket, ?PRINT_DEPTH]),
+    ?CT_LOG("ssl:transport_accept(~0.P)~n", [ListenSocket, ?PRINT_DEPTH]),
     {ok, AcceptSocket} = ssl:transport_accept(ListenSocket),    
     ?CT_LOG("~nssl:handshake(~p, ~p)~n", [AcceptSocket, Timeout]),
 
@@ -786,9 +786,9 @@ connect(ListenSocket, Node, N, _, Timeout, [], ContOpts) ->
 	    Result
     end;
 connect(ListenSocket, _Node, _, _, Timeout, Opts, _) ->
-    ?CT_LOG("ssl:transport_accept(~P)~n", [ListenSocket, ?PRINT_DEPTH]),
-    {ok, AcceptSocket} = ssl:transport_accept(ListenSocket),    
-    ?CT_LOG("ssl:handshake(~p,~p, ~p)~n", [AcceptSocket, Opts, Timeout]),
+    ?CT_LOG("ssl:transport_accept(~0.P)~n", [ListenSocket, ?PRINT_DEPTH]),
+    {ok, AcceptSocket} = ssl:transport_accept(ListenSocket),
+    ?CT_LOG("ssl:handshake(~p,~0.p, ~0.p)~n", [AcceptSocket, Opts, Timeout]),
     ssl:handshake(AcceptSocket, Opts, Timeout),
     AcceptSocket.
 
@@ -1891,12 +1891,11 @@ make_ecdsa_cert(Config) ->
             [{server_config, ServerConf}, 
              {client_config, ClientConf}] = 
                 x509_test:gen_pem_config_files(GenCertData, ClientFileBase, ServerFileBase),               
-	    [{server_ecdsa_opts, [{reuseaddr, true} | ServerConf]},
-             
-	     {server_ecdsa_verify_opts, [{reuseaddr, true},
-					 {verify, verify_peer} | ServerConf]},
-	     {client_ecdsa_opts, [{verify, verify_none} | ClientConf]},
-             {client_ecdsa_verify_opts, [{verify, verify_peer} | ClientConf]}
+	    [{server_ecdsa_opts, fun() -> [{reuseaddr, true} | ServerConf] end},
+	     {server_ecdsa_verify_opts,
+              fun() -> [{reuseaddr, true}, {verify, verify_peer} | ServerConf] end},
+	     {client_ecdsa_opts, fun() -> [{verify, verify_none} | ClientConf] end},
+             {client_ecdsa_verify_opts, fun() -> [{verify, verify_peer} | ClientConf] end}
 	     | Config];
 	false ->
 	    Config
@@ -1913,17 +1912,18 @@ make_rsa_cert(Config) ->
             GenCertData = public_key:pkix_test_data(CertChainConf),
             #{client_config := ClientDerConf, server_config := ServerDerConf} = GenCertData,
 
-            [{server_config, ServerConf}, 
-             {client_config, ClientConf}] = 
-                x509_test:gen_pem_config_files(GenCertData, ClientFileBase, ServerFileBase),               
-	    [{server_rsa_opts, [{reuseaddr, true} | ServerConf]},
-	     {server_rsa_verify_opts, [{reuseaddr, true}, {verify, verify_peer} | ServerConf]},
-	     {client_rsa_opts, [{verify, verify_none} | ClientConf]},
-             {client_rsa_verify_opts, [{verify, verify_peer} | ClientConf]},
-             {server_rsa_der_opts, [{reuseaddr, true}, {verify, verify_none} | ServerDerConf]},
-	     {server_rsa_der_verify_opts, [{reuseaddr, true}, {verify, verify_peer} | ServerDerConf]},
-	     {client_rsa_der_opts, [{verify, verify_none} | ClientDerConf]},
-             {client_rsa_der_verify_opts,  [{verify, verify_peer} |ClientDerConf]}
+            [{server_config, ServerConf},
+             {client_config, ClientConf}] =
+                x509_test:gen_pem_config_files(GenCertData, ClientFileBase, ServerFileBase),
+
+	    [{server_rsa_opts, fun() -> [{reuseaddr, true} | ServerConf] end},
+	     {server_rsa_verify_opts, fun() -> [{reuseaddr, true}, {verify, verify_peer} | ServerConf] end},
+	     {client_rsa_opts, fun() -> [{verify, verify_none} | ClientConf] end},
+             {client_rsa_verify_opts, fun() -> [{verify, verify_peer} | ClientConf] end},
+             {server_rsa_der_opts, fun() -> [{reuseaddr, true}, {verify, verify_none} | ServerDerConf] end},
+	     {server_rsa_der_verify_opts, fun() -> [{reuseaddr, true}, {verify, verify_peer} | ServerDerConf] end},
+	     {client_rsa_der_opts, fun() -> [{verify, verify_none} | ClientDerConf] end},
+             {client_rsa_der_verify_opts, fun() ->  [{verify, verify_peer} |ClientDerConf] end}
             | Config];
 	false ->
 	    Config
@@ -1955,7 +1955,8 @@ make_rsa_cert_with_protected_keyfile(Config0, Password) ->
                                            "tls_password_client.pem"),
     der_to_pem(ProtectedClientKeyFile, [ProtectedPemEntry]),
     ProtectedClientOpts = [{keyfile,ProtectedClientKeyFile} | proplists:delete(keyfile, ClientOpts)],
-    [{client_protected_rsa_opts, ProtectedClientOpts} | Config1].
+    [{client_protected_rsa_opts, fun() -> ProtectedClientOpts end}
+    | Config1].
 
 make_rsa_1024_cert(Config) ->
     CryptoSupport = crypto:supports(),
@@ -1971,14 +1972,14 @@ make_rsa_1024_cert(Config) ->
             [{server_config, ServerConf}, 
              {client_config, ClientConf}] = 
                 x509_test:gen_pem_config_files(GenCertData, ClientFileBase, ServerFileBase),               
-	    [{server_rsa_1024_opts, [{ssl_imp, new},{reuseaddr, true} | ServerConf]},
-	     {server_rsa_1024_verify_opts, [{reuseaddr, true}, {verify, verify_peer} | ServerConf]},
-	     {client_rsa_1024_opts, [{verify, verify_none} | ClientConf]},
-             {client_rsa_1024_verify_opts,  [{verify, verify_peer} |ClientConf]},
-             {server_rsa_1024_der_opts, [{reuseaddr, true} | ServerDerConf]},
-	     {server_rsa_1024_der_verify_opts, [{reuseaddr, true}, {verify, verify_peer} | ServerDerConf]},
-	     {client_rsa_1024_der_opts, [{verify, verify_none} | ClientDerConf]},
-             {client_rsa_1024_der_verify_opts,  [{verify, verify_peer} |ClientDerConf]}
+	    [{server_rsa_1024_opts, fun() -> [{ssl_imp, new},{reuseaddr, true} | ServerConf] end},
+	     {server_rsa_1024_verify_opts, fun() -> [{reuseaddr, true}, {verify, verify_peer} | ServerConf] end},
+	     {client_rsa_1024_opts, fun() -> [{verify, verify_none} | ClientConf] end},
+             {client_rsa_1024_verify_opts, fun() -> [{verify, verify_peer} |ClientConf] end},
+             {server_rsa_1024_der_opts, fun() -> [{reuseaddr, true} | ServerDerConf] end},
+	     {server_rsa_1024_der_verify_opts, fun() -> [{reuseaddr, true}, {verify, verify_peer} | ServerDerConf] end},
+	     {client_rsa_1024_der_opts, fun() -> [{verify, verify_none} | ClientDerConf] end},
+             {client_rsa_1024_der_verify_opts, fun() ->  [{verify, verify_peer} |ClientDerConf] end}
 	     | Config];
 	false ->
 	    Config
@@ -2016,13 +2017,10 @@ make_ecdh_rsa_cert(Config) ->
              {client_config, ClientConf}] = 
                 x509_test:gen_pem_config_files(GenCertData, ClientFileBase, ServerFileBase),
 
-	    [{server_ecdh_rsa_opts, [{ssl_imp, new},{reuseaddr, true} | ServerConf]},
-				    
-	     {server_ecdh_rsa_verify_opts, [{ssl_imp, new},{reuseaddr, true}, 	 
-                                            {verify, verify_peer} | ServerConf]},
-					
-	     {client_ecdh_rsa_opts, ClientConf}
-				   
+	    [{server_ecdh_rsa_opts, fun() -> [{ssl_imp, new},{reuseaddr, true} | ServerConf] end},
+	     {server_ecdh_rsa_verify_opts,
+              fun() ->[{ssl_imp, new},{reuseaddr, true}, {verify, verify_peer} | ServerConf] end},
+	     {client_ecdh_rsa_opts, fun() -> ClientConf end}
              | Config];
 	_ ->
 	    Config
@@ -2044,10 +2042,11 @@ make_rsa_ecdsa_cert(Config, Curve) ->
              {client_config, ClientConf}] =
                 x509_test:gen_pem_config_files(GenCertData, ClientFileBase, ServerFileBase),
 
-	    [{server_rsa_ecdsa_opts, [{reuseaddr, true} | ServerConf]},
-	     {server_rsa_ecdsa_verify_opts, [{ssl_imp, new},{reuseaddr, true},
-                                            {verify, verify_peer} | ServerConf]},
-	     {client_rsa_ecdsa_opts, [{verify, verify_none} | ClientConf]} | Config];
+	    [{server_rsa_ecdsa_opts, fun() -> [{reuseaddr, true} | ServerConf] end},
+	     {server_rsa_ecdsa_verify_opts,
+              fun() -> [{ssl_imp, new},{reuseaddr, true},{verify, verify_peer} | ServerConf] end},
+	     {client_rsa_ecdsa_opts, fun() -> [{verify, verify_none} | ClientConf] end}
+            | Config];
 	_ ->
 	    Config
     end.
@@ -2833,7 +2832,7 @@ is_dtls_version(_) ->
 
 openssl_tls_version_support(Version, Config0) ->
     Config = make_rsa_cert(Config0),
-    ServerOpts = proplists:get_value(server_rsa_opts, Config),
+    ServerOpts = ssl_options(server_rsa_opts, Config),
     Port = inet_port(node()),
     CaCertFile = proplists:get_value(cacertfile, ServerOpts),
     CertFile = proplists:get_value(certfile, ServerOpts),
@@ -3667,16 +3666,27 @@ ubuntu_legacy_support() ->
     end.       
 
 ssl_options(Extra, Option, Config) ->
-    ExtraOpts = proplists:get_value(Extra, Config, []),
+    ExtraOpts = case proplists:get_value(Extra, Config, []) of
+                    Settings when is_list(Settings) -> Settings;
+                    Fun when is_function(Fun, 0) -> Fun();
+                    Other -> Other
+                end,
     ExtraOpts ++ ssl_options(Option, Config).
 
 ssl_options(Option, Config) when is_atom(Option) ->
     ProtocolOpts = proplists:get_value(protocol_opts, Config, []),
-    Opts = proplists:get_value(Option, Config, []),
+    Opts = case proplists:get_value(Option, Config, []) of
+               Settings when is_list(Settings) -> Settings;
+               Fun when is_function(Fun, 0) -> Fun();
+               Other -> Other
+           end,
     Opts ++ ProtocolOpts;
-ssl_options(Options, Config) ->
+ssl_options(Options, Config) when is_list(Options) ->
+    ProtocolOpts = proplists:get_value(protocol_opts, Config, []),
+    Options ++ ProtocolOpts;
+ssl_options(OptionFun, Config) when is_function(OptionFun, 0) ->
     ProtocolOpts = proplists:get_value(protocol_opts, Config, []),
-    Options ++ ProtocolOpts.
+    OptionFun() ++ ProtocolOpts.
 
 protocol_version(Config) ->
    case proplists:get_value(version, Config, undefined) of
diff --git a/lib/ssl/test/tls_api_SUITE.erl b/lib/ssl/test/tls_api_SUITE.erl
index 79cb932f9d..af33c4d3f4 100644
--- a/lib/ssl/test/tls_api_SUITE.erl
+++ b/lib/ssl/test/tls_api_SUITE.erl
@@ -1259,7 +1259,7 @@ tls_password_correct() ->
     [{doc, "Test that connection is possible with a correct password"}].
 tls_password_correct(Config) when is_list(Config) ->
     F = fun (P) ->
-                ProtectedClientOpts = ?config(client_protected_rsa_opts, Config),
+                ProtectedClientOpts = ssl_test_lib:ssl_options(client_protected_rsa_opts, Config),
                 ServerOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
 
                 {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -1289,7 +1289,7 @@ tls_password_incorrect() ->
     [{doc, "Test that connection is not possible with wrong password"}].
 tls_password_incorrect(Config) when is_list(Config) ->
     F = fun (P) ->
-                ProtectedClientOpts = ?config(client_protected_rsa_opts, Config),
+                ProtectedClientOpts = ssl_test_lib:ssl_options(client_protected_rsa_opts, Config),
                 ServerOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
 
                 {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
@@ -1323,7 +1323,7 @@ tls_password_badarg() ->
     [{doc, "Test that connection is not possible with badarg password"}].
 tls_password_badarg(Config) when is_list(Config) ->
     F = fun (P, ServerError, ClientError) ->
-                ProtectedClientOpts = ?config(client_protected_rsa_opts, Config),
+                ProtectedClientOpts = ssl_test_lib:ssl_options(client_protected_rsa_opts, Config),
                 ServerOpts = ssl_test_lib:ssl_options(server_rsa_opts, Config),
                 {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
                 Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0},
-- 
2.43.0

openSUSE Build Service is sponsored by