Index | Thread | Search

From:
openbsd-ports@schlecht.dev
Subject:
Re: benchmarks/tsung 1.8.0.20241119
To:
Greg Steuck <gnezdo@openbsd.org>, ports <ports@openbsd.org>
Date:
Sun, 1 Jun 2025 21:26:53 +0200

Download raw body.

Thread
Ping - any opinions on that? If not, is anyone still interested in
benchmarks/tsung at all?

On 5/25/25 2:58 PM, Volker Schlecht wrote:
> benchmarks/tsung currently suffers from a number of compilation
> and runtime errors when compiling/running on OTP versions > 25
> 
> All that is needed to fix that, has been documented in a number
> of issues, and pull requests, but it appears that there isn't a
> lot of drive left in the project (and possibly its user base)
> anymore.
> 
> I've applied the already proposed changes and filled the gaps
> with a few patches of my own, and the result passes tests (save
> one test, which has always been failing on OpenBSD).
> 
> While at first glance it appears the some of the patches disable
> SSL verification, those are just reinstating the behavior that
> tsung always had: Erlang changed the default behavior for SSL
> connections from not-verifying to verifying, and tsung leans on the
> old default.
> 
> Not nice, but also nothing new ... changing it without breaking
> existing setups is beyond the length I want to invest in this
> port :-)
> 
> With these changes, we could move tsung to use MODERL_DEFAULT_VERSION
> and get rid of erlang/25 and erlang/26 eventually.
> 
> Thoughts? Opinions?
Index: Makefile
===================================================================
RCS file: /cvs/ports/benchmarks/tsung/Makefile,v
retrieving revision 1.24
diff -u -p -r1.24 Makefile
--- Makefile	21 Dec 2024 11:37:34 -0000	1.24
+++ Makefile	25 May 2025 12:35:27 -0000
@@ -3,8 +3,8 @@ COMMENT=	multi-protocol distributed load
 V=		1.8.0
 GH_ACCOUNT=	processone
 GH_PROJECT=	tsung
-GH_TAGNAME=	v${V}
-REVISION=	2
+GH_COMMIT=	4b4e1e86f33d4a17641a60b26c0d1cab1f1953b0
+DISTNAME=	${GH_PROJECT}-${V}.20241119
 
 CATEGORIES=	benchmarks net
 
@@ -13,7 +13,6 @@ PERMIT_PACKAGE=	Yes
 
 MODULES=		lang/erlang \
 			lang/python
-MODERL_VERSION=		25
 MODPY_BUILDDEP= 	No
 
 RUN_DEPENDS=		graphics/py-matplotlib \
Index: distinfo
===================================================================
RCS file: /cvs/ports/benchmarks/tsung/distinfo,v
retrieving revision 1.4
diff -u -p -r1.4 distinfo
--- distinfo	10 Apr 2023 16:42:34 -0000	1.4
+++ distinfo	25 May 2025 12:35:27 -0000
@@ -1,2 +1,2 @@
-SHA256 (tsung-1.8.0.tar.gz) = bFXfSLgvGF39YK5yceCbvCXGyLxWi7i/wM2wVtd8OJk=
-SIZE (tsung-1.8.0.tar.gz) = 972168
+SHA256 (tsung-1.8.0.20241119-4b4e1e86.tar.gz) = RsutGDTECwG8E/7XgL6Q8I2E+pGS8cW9IXW22sAsX50=
+SIZE (tsung-1.8.0.20241119-4b4e1e86.tar.gz) = 973993
Index: patches/patch-src_lib_websocket_erl
===================================================================
RCS file: patches/patch-src_lib_websocket_erl
diff -N patches/patch-src_lib_websocket_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_lib_websocket_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,13 @@
+Doesn't run, and seeding isn't needed here anyway
+
+Index: src/lib/websocket.erl
+--- src/lib/websocket.erl.orig
++++ src/lib/websocket.erl
+@@ -131,7 +131,6 @@ decode(Data) ->
+ %%% Internal functions
+ %%%===================================================================
+ gen_accept_key() ->
+-    rand:seed(erlang:now()),
+     Key = crypto:strong_rand_bytes(16),
+     KeyStr = base64:encode_to_string(Key),
+     Accept = binary:list_to_bin(KeyStr ++ "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"),
Index: patches/patch-src_test_ts_test_config_erl
===================================================================
RCS file: patches/patch-src_test_ts_test_config_erl
diff -N patches/patch-src_test_ts_test_config_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_test_ts_test_config_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,12 @@
+Index: src/test/ts_test_config.erl
+--- src/test/ts_test_config.erl.orig
++++ src/test/ts_test_config.erl
+@@ -122,7 +122,7 @@ config_thinktime2_test() ->
+     receive
+         {timeout,Ref2,end_thinktime} -> ok
+     end,
+-    rand:seed(), % reinit seed for others tests
++    rand:seed(default), % reinit seed for others tests
+     ?assertMatch({random,1000}, Req).
+ 
+ read_config_tag_noexclusion_test() ->
Index: patches/patch-src_tsung_recorder_ts_proxy_http_erl
===================================================================
RCS file: patches/patch-src_tsung_recorder_ts_proxy_http_erl
diff -N patches/patch-src_tsung_recorder_ts_proxy_http_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tsung_recorder_ts_proxy_http_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,12 @@
+Index: src/tsung_recorder/ts_proxy_http.erl
+--- src/tsung_recorder/ts_proxy_http.erl.orig
++++ src/tsung_recorder/ts_proxy_http.erl
+@@ -260,7 +260,7 @@ connect(Scheme, Host, Port)->
+     case Scheme of
+         https ->
+             {ok, _} = ssl:connect(Host,Port,
+-                                 [{active, once}]);
++                                 [{active, once}] ++ [{verify, verify_none}]);
+         _  ->
+             {ok, _} = gen_tcp:connect(Host,Port,
+                                       [{active, once},
Index: patches/patch-src_tsung_ts_bosh_erl
===================================================================
RCS file: patches/patch-src_tsung_ts_bosh_erl
diff -N patches/patch-src_tsung_ts_bosh_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tsung_ts_bosh_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,12 @@
+Index: src/tsung/ts_bosh.erl
+--- src/tsung/ts_bosh.erl.orig
++++ src/tsung/ts_bosh.erl
+@@ -563,7 +563,7 @@ socket_connect(ssl, Host, Port, Options, Timeout) ->
+ %    {ok, S} = gen_tcp:connect(Host, Port, [{active, false}|ForConnection], Timeout),
+ %    ssl:connect(S, ForSSL, Timeout).
+ %   ?LOGF("Connect ~p", [ForSSL], ?ERR),
+-     ssl:connect(Host, Port, [{ssl_imp, new}|Options], Timeout).
++     ssl:connect(Host, Port, [{ssl_imp, new}|Options] ++ [{verify, verify_none}], Timeout).
+ 
+ 
+ socket_send(tcp, Socket, Data) ->
Index: patches/patch-src_tsung_ts_digest_erl
===================================================================
RCS file: patches/patch-src_tsung_ts_digest_erl
diff -N patches/patch-src_tsung_ts_digest_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tsung_ts_digest_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,19 @@
+Index: src/tsung/ts_digest.erl
+--- src/tsung/ts_digest.erl.orig
++++ src/tsung/ts_digest.erl
+@@ -72,13 +72,13 @@ shahex(Clear) ->
+ %%%----------------------------------------------------------------------
+ tohex(A)->
+     Fun = fun(X)->
+-                  ts_utils:to_lower(padhex(httpd_util:integer_to_hexlist(X)))
++                  ts_utils:to_lower(padhex(erlang:integer_to_list(X,16)))
+           end,
+     lists:flatten( lists:map(Fun, A) ).
+ 
+ %%%----------------------------------------------------------------------
+ %%% Func: padhex/1
+-%%% Purpose: needed because httpd_util:integer_to_hexlist returns hex
++%%% Purpose: needed because httpd_util:integer_to_list(X,16) returns hex
+ %%%    values <10 as only 1 character, ie. "0F" is simply returned as
+ %%%    "F". For our digest, we need these leading zeros to be present.
+ %%% ----------------------------------------------------------------------
Index: patches/patch-src_tsung_ts_http_common_erl
===================================================================
RCS file: patches/patch-src_tsung_ts_http_common_erl
diff -N patches/patch-src_tsung_ts_http_common_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tsung_ts_http_common_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,12 @@
+Index: src/tsung/ts_http_common.erl
+--- src/tsung/ts_http_common.erl.orig
++++ src/tsung/ts_http_common.erl
+@@ -405,7 +405,7 @@ parse_chunked(Body, State)->
+ %%----------------------------------------------------------------------
+ read_chunk(<<>>, State, Int, Acc) ->
+     ?LOGF("No data in chunk [Int=~p, Acc=~p] ~n", [Int,Acc],?INFO),
+-    AccInt = list_to_binary(httpd_util:integer_to_hexlist(Int)),
++    AccInt = list_to_binary(erlang:integer_to_list(Int, 16)),
+     { State#state_rcv{acc = AccInt, ack_done = false }, [] }; % read more data
+ %% this code has been inspired by inets/http_lib.erl
+ %% Extensions not implemented
Index: patches/patch-src_tsung_ts_http_erl
===================================================================
RCS file: patches/patch-src_tsung_ts_http_erl
diff -N patches/patch-src_tsung_ts_http_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tsung_ts_http_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,12 @@
+Index: src/tsung/ts_http.erl
+--- src/tsung/ts_http.erl.orig
++++ src/tsung/ts_http.erl
+@@ -315,7 +315,7 @@ decode_chunk_size(<<Head:2/binary, Data/binary >>, Hea
+     ?Debug("decode chunk: crlf, no digit"),
+     decode_chunk_size(Data, Headers, Body, <<>>);
+ decode_chunk_size(<<Head:2/binary, Data/binary >>, Headers, Body,Digits) when Head ==  << "\r\n" >> ->
+-    case httpd_util:hexlist_to_integer(binary_to_list(Digits)) of
++    case erlang:list_to_integer(binary_to_list(Digits), 16) of
+         0 ->
+             decode_chunk_size(Data, Headers, Body ,<<>>);
+         Size ->
Index: patches/patch-src_tsung_ts_server_websocket_ssl_erl
===================================================================
RCS file: patches/patch-src_tsung_ts_server_websocket_ssl_erl
diff -N patches/patch-src_tsung_ts_server_websocket_ssl_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tsung_ts_server_websocket_ssl_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,12 @@
+Index: src/tsung/ts_server_websocket_ssl.erl
+--- src/tsung/ts_server_websocket_ssl.erl.orig
++++ src/tsung/ts_server_websocket_ssl.erl
+@@ -60,7 +60,7 @@ connect(Host, Port, Opts, Timeout) ->
+     Protocol = WSConfig#ws_config.subprotos,
+     Origin = WSConfig#ws_config.origin,
+ 
+-    case ssl:connect(Host, Port, opts_to_tcp_opts(TcpOpts),Timeout) of
++    case ssl:connect(Host, Port, opts_to_tcp_opts(TcpOpts) ++ [{verify, verify_none}],Timeout) of
+         {ok, Socket} ->
+             Pid = spawn_link(
+                     fun() ->
Index: patches/patch-src_tsung_ts_ssl6_erl
===================================================================
RCS file: patches/patch-src_tsung_ts_ssl6_erl
diff -N patches/patch-src_tsung_ts_ssl6_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tsung_ts_ssl6_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,16 @@
+Index: src/tsung/ts_ssl6.erl
+--- src/tsung/ts_ssl6.erl.orig
++++ src/tsung/ts_ssl6.erl
+@@ -42,10 +42,10 @@ connect(Host, Port, Opts) when is_list(Host) ->
+     connect(Host, Port, Opts, infinity);
+ 
+ connect(Socket, Opts, ConnectTimeout) ->
+-    ssl:connect(Socket, Opts, ConnectTimeout).
++    ssl:connect(Socket, Opts ++ [{verify, verify_none}], ConnectTimeout).
+ 
+ connect(Host, Port, Opts, ConnectTimeout) ->
+-    ssl:connect(Host, Port, Opts, ConnectTimeout).
++    ssl:connect(Host, Port, Opts ++ [{verify, verify_none}], ConnectTimeout).
+ 
+ connect(Socket, Opts) ->
+     connect(Socket, Opts, infinity).
Index: patches/patch-src_tsung_ts_ssl_erl
===================================================================
RCS file: patches/patch-src_tsung_ts_ssl_erl
diff -N patches/patch-src_tsung_ts_ssl_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tsung_ts_ssl_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,16 @@
+Index: src/tsung/ts_ssl.erl
+--- src/tsung/ts_ssl.erl.orig
++++ src/tsung/ts_ssl.erl
+@@ -37,10 +37,10 @@ connect(Host, Port, Opts) when is_list(Host) ->
+     connect(Host, Port, opts_to_tcp_opts(Opts), infinity);
+ 
+ connect(Socket, Opts, ConnectTimeout) ->
+-    ssl:connect(Socket, opts_to_tcp_opts(Opts), ConnectTimeout).
++    ssl:connect(Socket, opts_to_tcp_opts(Opts) ++ [{verify, verify_none}], ConnectTimeout).
+ 
+ connect(Host, Port, Opts, ConnectTimeout) ->
+-    ssl:connect(Host, Port, opts_to_tcp_opts(Opts), ConnectTimeout).
++    ssl:connect(Host, Port, opts_to_tcp_opts(Opts) ++ [{verify, verify_none}], ConnectTimeout).
+ 
+ connect(Socket, Opts) ->
+     connect(Socket, Opts, infinity).
Index: patches/patch-src_tsung_ts_utils_erl
===================================================================
RCS file: patches/patch-src_tsung_ts_utils_erl
diff -N patches/patch-src_tsung_ts_utils_erl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_tsung_ts_utils_erl	25 May 2025 12:35:27 -0000
@@ -0,0 +1,24 @@
+Index: src/tsung/ts_utils.erl
+--- src/tsung/ts_utils.erl.orig
++++ src/tsung/ts_utils.erl
+@@ -162,7 +162,7 @@ init_seed(A) when is_integer(A)->
+     %% node to set a reproductible but different seed for each launcher.
+     Id=get_node_id(),
+     ?DebugF("Seeding with ~p on node ~p~n",[Id,node()]),
+-    rand:seed(1000*Id,-1000*A*Id,1000*A*A);
++    rand:seed(default, {1000*Id,-1000*A*Id,1000*A*A});
+ init_seed({A,B}) when is_integer(A) and is_integer(B)->
+     Id=get_node_id(),
+     ?DebugF("Seeding with ~p ~p ~p on node ~p~n",[A,B,Id,node()]),
+@@ -171,9 +171,9 @@ init_seed({A,B}) when is_integer(A) and is_integer(B)-
+     %% initial pseudo random values will be quite closed to each
+     %% other. Trying to avoid this by using a multiplier big enough
+     %% (because the algorithm use mod 30XXX , see random.erl).
+-    rand:seed(4000*A*B*Id,-4000*B*A*Id,4000*Id*Id*A);
++    rand:seed(default, {4000*A*B*Id,-4000*B*A*Id,4000*Id*Id*A});
+ init_seed({A,B,C}) ->
+-    rand:seed(A,B,C).
++    rand:seed(default, {A,B,C}).
+ 
+ get_node_id() ->
+     case string:tokens(atom_to_list(node()),"@") of