diff options
Diffstat (limited to 'lib/ssl/test/openssl_mfl_SUITE.erl')
-rw-r--r-- | lib/ssl/test/openssl_mfl_SUITE.erl | 115 |
1 files changed, 53 insertions, 62 deletions
diff --git a/lib/ssl/test/openssl_mfl_SUITE.erl b/lib/ssl/test/openssl_mfl_SUITE.erl index c26934082a..54a6788966 100644 --- a/lib/ssl/test/openssl_mfl_SUITE.erl +++ b/lib/ssl/test/openssl_mfl_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2020-2020. All Rights Reserved. +%% Copyright Ericsson AB 2020-2022. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. @@ -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()}, @@ -69,25 +64,17 @@ groups() -> ]. init_per_suite(Config0) -> - catch crypto:stop(), - try crypto:start() of - ok -> - case ssl_test_lib:openssl_maxfraglen_support() of - true -> - ssl_test_lib:clean_start(), - ssl:clear_pem_cache(), - Config = ssl_test_lib:make_rsa_cert(Config0), - ssl_test_lib:cert_options(Config); - false -> - {skip, "max_fragment_length not supported by OpenSSL"} - end - catch _:_ -> - {skip, "Crypto did not start"} + Config1 = ssl_test_lib:init_per_suite(Config0, openssl), + case ssl_test_lib:openssl_maxfraglen_support() of + true -> + Config = ssl_test_lib:make_rsa_cert(Config1), + ssl_test_lib:cert_options(Config); + false -> + {skip, "max_fragment_length not supported by OpenSSL"} end. -end_per_suite(_Config) -> - ssl:stop(), - application:stop(crypto). +end_per_suite(Config) -> + ssl_test_lib:end_per_suite(Config). init_per_group(GroupName, Config) -> ssl_test_lib:init_per_group_openssl(GroupName, Config). @@ -125,12 +112,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 +138,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 +160,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 +174,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 +206,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). |