File 1972-Test-input-handler-from-internal-inet_epmd-cryptcook.patch of Package erlang
From 21dd125dfdbe06c71dcee12882931cf4cc1a891f Mon Sep 17 00:00:00 2001
From: Raimo Niskanen <raimo@erlang.org>
Date: Wed, 3 May 2023 11:20:07 +0200
Subject: [PATCH 2/2] Test input handler from internal inet_epmd cryptcookie
framework
---
.../test/inet_epmd_cryptcookie_inet_ktls.erl | 63 ++++++++++++++++++-
lib/ssl/test/ssl_dist_bench_SUITE.erl | 21 ++++++-
2 files changed, 80 insertions(+), 4 deletions(-)
diff --git a/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl b/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl
index d350cc8139..b2c082969c 100644
--- a/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl
+++ b/lib/ssl/test/inet_epmd_cryptcookie_inet_ktls.erl
@@ -103,7 +103,8 @@ accept_controller(_NetAddress, Controller, Socket) ->
%% ------------------------------------------------------------
accepted(NetAddress, _Timer, Socket) ->
- inet_epmd_dist:hs_data(NetAddress, Socket).
+ input_handler_setup(
+ inet_epmd_dist:hs_data(NetAddress, Socket)).
%% ------------------------------------------------------------
connect(NetAddress, _Timer, Options) ->
@@ -123,7 +124,8 @@ connect(NetAddress, _Timer, Options) ->
inet_ktls_info(Socket, cryptcookie:ktls_info(CipherState)),
ok ?= inet_tls_dist:set_ktls(KtlsInfo),
ok ?= inet:setopts(Socket, [{packet, 2}, {mode, list}]),
- inet_epmd_dist:hs_data(NetAddress, Socket)
+ input_handler_setup(
+ inet_epmd_dist:hs_data(NetAddress, Socket))
else
{error, _} = Error ->
Error
@@ -204,6 +206,63 @@ stream_controlling_process(Stream = {_, [_ | Socket], _}, Pid) ->
erlang:error({?MODULE, ?FUNCTION_NAME, Reason})
end.
+%% ------------------------------------------------------------
+
+input_handler_setup(#hs_data{} = HsData) ->
+ case init:get_argument(inet_ktls) of
+ {ok, [["port"]]} -> % No input_handler process
+ %% Just use the distribution port
+ HsData;
+ {ok, [["input_handler"]]} -> % Set up an input_handler process
+ %% Add an f_handshake_complete fun that spawns the input handler
+ %% and calls the f_setopts_post_nodeup fun
+ #hs_data{
+ socket = Socket,
+ f_setopts_post_nodeup = FSetoptsPostNodeup} = HsData,
+ HsData#hs_data{
+ f_setopts_post_nodeup =
+ fun (S) when S =:= Socket ->
+ ok
+ end,
+ f_handshake_complete =
+ fun (S, _Node, DHandle) when S =:= Socket ->
+ handshake_complete(S, FSetoptsPostNodeup, DHandle)
+ end}
+ end;
+input_handler_setup({error, _} = Error) ->
+ Error.
+
+handshake_complete(Socket, FSetoptsPostNodeup, DHandle) ->
+ InputHandler =
+ spawn_link(
+ fun () ->
+ input_handler(Socket, DHandle)
+ end),
+ ok = ?DRIVER:controlling_process(Socket, InputHandler),
+ ok = erlang:dist_ctrl_input_handler(DHandle, InputHandler),
+ ok = FSetoptsPostNodeup(Socket).
+
+input_handler(Socket, DHandle) ->
+ receive
+ {tcp, Socket, Data} ->
+ erlang:dist_ctrl_put_data(DHandle, Data);
+ {tcp_error, Socket, _Error} = Reason ->
+ ?DRIVER:close(Socket),
+ exit(Reason);
+ {tcp_closed, Socket} = Reason ->
+ ?DRIVER:close(Socket),
+ exit(Reason);
+ Other ->
+ Reason = {unexpected_message, Other},
+ error_report([?FUNCTION_NAME, {reason, Reason}]),
+ input_handler(Socket, DHandle)
+ end.
+
+%% ------------------------------------------------------------
+
+error_report(Report) ->
+ error_logger:error_report(Report).
+
%% ------------------------------------------------------------
supported() ->
maybe
diff --git a/lib/ssl/test/ssl_dist_bench_SUITE.erl b/lib/ssl/test/ssl_dist_bench_SUITE.erl
index 989007bec0..8e32e872ad 100644
--- a/lib/ssl/test/ssl_dist_bench_SUITE.erl
+++ b/lib/ssl/test/ssl_dist_bench_SUITE.erl
@@ -77,6 +77,7 @@ groups() ->
{cryptcookie_socket_ktls, categories()},
{dist_cryptcookie_inet, categories()},
{cryptcookie_inet_ktls, categories()},
+ {cryptcookie_inet_ktls_ih, categories()},
%%
%% categories()
{setup, [{repeat, 1}],
@@ -110,7 +111,8 @@ cryptcookie_backends() ->
[{group, dist_cryptcookie_socket},
{group, cryptcookie_socket_ktls},
{group, dist_cryptcookie_inet},
- {group, cryptcookie_inet_ktls}].
+ {group, cryptcookie_inet_ktls},
+ {group, cryptcookie_inet_ktls_ih}].
categories() ->
[{group, setup},
@@ -290,7 +292,22 @@ init_per_group(cryptcookie_inet_ktls, Config) ->
ok ->
[{ssl_dist, false}, {ssl_dist_prefix, "Crypto-Inet-kTLS"},
{ssl_dist_args,
- "-proto_dist inet_epmd -inet_epmd cryptcookie_inet_ktls"}
+ "-proto_dist inet_epmd -inet_epmd cryptcookie_inet_ktls "
+ "-inet_ktls port"}
+ | Config];
+ Problem ->
+ {skip, Problem}
+ catch
+ Class : Reason : Stacktrace ->
+ {fail, {Class, Reason, Stacktrace}}
+ end;
+init_per_group(cryptcookie_inet_ktls_ih, Config) ->
+ try inet_epmd_cryptcookie_inet_ktls:supported() of
+ ok ->
+ [{ssl_dist, false}, {ssl_dist_prefix, "Crypto-Inet-kTLS-IH"},
+ {ssl_dist_args,
+ "-proto_dist inet_epmd -inet_epmd cryptcookie_inet_ktls "
+ "-inet_ktls input_handler"}
| Config];
Problem ->
{skip, Problem}
--
2.35.3