File 5561-erts-Fix-test-cases-for-new-internal-pids.patch of Package erlang
From 302362b29d56df3ee412742b205aef02d3551467 Mon Sep 17 00:00:00 2001
From: Rickard Green <rickard@erlang.org>
Date: Mon, 13 Feb 2023 15:34:40 +0100
Subject: [PATCH] [erts] Fix test cases for new internal pids
---
erts/emulator/test/a_SUITE.erl | 2 +
erts/test/Makefile | 5 +-
erts/test/erl_print_SUITE.erl | 116 ++++--------------
lib/erl_interface/test/ei_accept_SUITE.erl | 21 ++++
.../test/ei_decode_encode_SUITE.erl | 5 +-
lib/jinterface/test/jinterface_SUITE.erl | 12 ++
lib/jinterface/test/nc_SUITE.erl | 4 +-
lib/stdlib/test/qlc_SUITE.erl | 6 +-
8 files changed, 69 insertions(+), 102 deletions(-)
diff --git a/erts/test/Makefile b/erts/test/Makefile
index addf5f89c5..a60b3ce81d 100644
--- a/erts/test/Makefile
+++ b/erts/test/Makefile
@@ -41,7 +41,10 @@ MODULES= \
upgrade_SUITE \
parallel_messages_SUITE
-ERL_FILES= $(MODULES:%=%.erl)
+ERTS_MODULES= erts_test_utils
+
+ERL_FILES= $(MODULES:%=%.erl) \
+ $(ERTS_MODULES:%=$(ERL_TOP)/erts/emulator/test/%.erl)
TARGET_FILES = $(MODULES:%=$(EBIN)/%.$(EMULATOR))
diff --git a/erts/test/erl_print_SUITE.erl b/erts/test/erl_print_SUITE.erl
index 84e99675a0..95293e75c6 100644
--- a/erts/test/erl_print_SUITE.erl
+++ b/erts/test/erl_print_SUITE.erl
@@ -96,10 +96,18 @@ erlang_display(Config) when is_list(Config) ->
MyCre = my_cre(),
+ {Ser1, Ser2, LPort} = case erlang:system_info(wordsize) of
+ 4 -> {0, 0, 1 bsl 27};
+ 8 -> {42, 1 bsl 30, 1 bsl 40}
+ end,
+
%% pids
- chk_display(mk_pid_xstr({node(), MyCre}, 4711, 42)),
+ chk_display(mk_pid_xstr({node(), MyCre}, 4711, Ser1)),
+ chk_display(mk_pid_xstr({node(), MyCre}, 1 bsl 27, Ser2)),
chk_display(mk_pid_xstr({node(), oth_cre(MyCre)}, 4711, 42)),
+ chk_display(mk_pid_xstr({node(), oth_cre(MyCre)}, 1 bsl 27, Ser2)),
chk_display(mk_pid_xstr({node(), oth_cre(oth_cre(MyCre))}, 4711, 42)),
+ chk_display(mk_pid_xstr({node(), oth_cre(oth_cre(MyCre))}, 1 bsl 27, Ser2)),
chk_display(mk_pid_xstr({a@b, MyCre}, 4711, 42)),
chk_display(mk_pid_xstr({a@b, oth_cre(MyCre)}, 4711, 42)),
@@ -107,12 +115,18 @@ erlang_display(Config) when is_list(Config) ->
%% ports
chk_display(mk_port_xstr({node(), MyCre}, 4711)),
+ chk_display(mk_port_xstr({node(), MyCre}, LPort)),
chk_display(mk_port_xstr({node(), oth_cre(MyCre)}, 4711)),
+ chk_display(mk_port_xstr({node(), oth_cre(MyCre)}, LPort)),
chk_display(mk_port_xstr({node(), oth_cre(oth_cre(MyCre))}, 4711)),
+ chk_display(mk_port_xstr({node(), oth_cre(oth_cre(MyCre))}, LPort)),
chk_display(mk_port_xstr({c@d, MyCre}, 4711)),
+ chk_display(mk_port_xstr({c@d, MyCre}, LPort)),
chk_display(mk_port_xstr({c@d, oth_cre(MyCre)}, 4711)),
+ chk_display(mk_port_xstr({c@d, oth_cre(MyCre)}, LPort)),
chk_display(mk_port_xstr({c@d, oth_cre(oth_cre(MyCre))}, 4711)),
+ chk_display(mk_port_xstr({c@d, oth_cre(oth_cre(MyCre))}, LPort)),
%% refs
chk_display(mk_ref_xstr({node(), MyCre}, [1,2,3])),
@@ -316,102 +330,14 @@ run_case(Config, TestArgs, Fun) ->
ct:fail({open_port_failed, Error})
end.
+mk_pid(Node, Number, Serial) ->
+ erts_test_utils:mk_ext_pid(Node, Number, Serial).
--define(VERSION_MAGIC, 131).
-
--define(ATOM_EXT, 100).
--define(REFERENCE_EXT, 101).
--define(PORT_EXT, 102).
--define(PID_EXT, 103).
--define(NEW_REFERENCE_EXT, 114).
--define(NEW_PID_EXT, $X).
--define(NEW_PORT_EXT, $Y).
--define(NEWER_REFERENCE_EXT, $Z).
-
-uint32_be(Uint) when is_integer(Uint), 0 =< Uint, Uint < 1 bsl 32 ->
- [(Uint bsr 24) band 16#ff,
- (Uint bsr 16) band 16#ff,
- (Uint bsr 8) band 16#ff,
- Uint band 16#ff];
-uint32_be(Uint) ->
- exit({badarg, uint32_be, [Uint]}).
-
-
-uint16_be(Uint) when is_integer(Uint), 0 =< Uint, Uint < 1 bsl 16 ->
- [(Uint bsr 8) band 16#ff,
- Uint band 16#ff];
-uint16_be(Uint) ->
- exit({badarg, uint16_be, [Uint]}).
-
-uint8(Uint) when is_integer(Uint), 0 =< Uint, Uint < 1 bsl 8 ->
- Uint band 16#ff;
-uint8(Uint) ->
- exit({badarg, uint8, [Uint]}).
-
-
-
-mk_pid({NodeName, Creation}, Number, Serial) when is_atom(NodeName) ->
- mk_pid({atom_to_list(NodeName), Creation}, Number, Serial);
-mk_pid({NodeName, Creation}, Number, Serial) ->
- case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?NEW_PID_EXT,
- ?ATOM_EXT,
- uint16_be(length(NodeName)),
- NodeName,
- uint32_be(Number),
- uint32_be(Serial),
- uint32_be(Creation)])) of
- Pid when is_pid(Pid) ->
- Pid;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_pid, [{NodeName, Creation}, Number, Serial]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
- end.
-
-mk_port({NodeName, Creation}, Number) when is_atom(NodeName) ->
- mk_port({atom_to_list(NodeName), Creation}, Number);
-mk_port({NodeName, Creation}, Number) ->
- case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?NEW_PORT_EXT,
- ?ATOM_EXT,
- uint16_be(length(NodeName)),
- NodeName,
- uint32_be(Number),
- uint32_be(Creation)])) of
- Port when is_port(Port) ->
- Port;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_port, [{NodeName, Creation}, Number]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
- end.
+mk_port(Node, Number) ->
+ erts_test_utils:mk_ext_port(Node, Number).
-mk_ref({NodeName, Creation}, Numbers) when is_atom(NodeName),
- is_integer(Creation),
- is_list(Numbers) ->
- mk_ref({atom_to_list(NodeName), Creation}, Numbers);
-mk_ref({NodeName, Creation}, Numbers) when is_list(NodeName),
- is_integer(Creation),
- is_list(Numbers) ->
- case catch binary_to_term(list_to_binary([?VERSION_MAGIC,
- ?NEWER_REFERENCE_EXT,
- uint16_be(length(Numbers)),
- ?ATOM_EXT,
- uint16_be(length(NodeName)),
- NodeName,
- uint32_be(Creation),
- lists:map(fun (N) ->
- uint32_be(N)
- end,
- Numbers)])) of
- Ref when is_reference(Ref) ->
- Ref;
- {'EXIT', {badarg, _}} ->
- exit({badarg, mk_ref, [{NodeName, Creation}, Numbers]});
- Other ->
- exit({unexpected_binary_to_term_result, Other})
- end.
+mk_ref(Node, Numbers) ->
+ erts_test_utils:mk_ext_ref(Node, Numbers).
my_cre() -> erlang:system_info(creation).
diff --git a/lib/erl_interface/test/ei_accept_SUITE.erl b/lib/erl_interface/test/ei_accept_SUITE.erl
index f563feaa72..b782987a99 100644
--- a/lib/erl_interface/test/ei_accept_SUITE.erl
+++ b/lib/erl_interface/test/ei_accept_SUITE.erl
@@ -25,6 +25,8 @@
-include("ei_accept_SUITE_data/ei_accept_test_cases.hrl").
-export([all/0, suite/0,
+ init_per_suite/1,
+ end_per_suite/1,
init_per_testcase/2,
ei_accept/1,
hopeful_random/1,
@@ -49,6 +51,25 @@ all() ->
ei_threaded_accept,
monitor_ei_process].
+init_per_suite(Config) when is_list(Config) ->
+
+ %% Trigger usage of large pids and ports in 64-bit case...
+ case erlang:system_info(wordsize) of
+ 4 ->
+ ok;
+ 8 ->
+ erts_debug:set_internal_state(available_internal_state,true),
+ erts_debug:set_internal_state(next_pid, 1 bsl 32),
+ erts_debug:set_internal_state(next_port, 1 bsl 32),
+ erts_debug:set_internal_state(available_internal_state,false),
+ ok
+ end,
+
+ Config.
+
+end_per_suite(Config) when is_list(Config) ->
+ Config.
+
init_per_testcase(Case, Config) ->
rand:uniform(), % Make sure rand is initialized and seeded.
%%rand:seed({exsss, [61781477086241372|88832360391433009]}),
diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE.erl b/lib/erl_interface/test/ei_decode_encode_SUITE.erl
index b861426792..7eac8a5ede 100644
--- a/lib/erl_interface/test/ei_decode_encode_SUITE.erl
+++ b/lib/erl_interface/test/ei_decode_encode_SUITE.erl
@@ -93,7 +93,10 @@ test_ei_decode_encode(Config) when is_list(Config) ->
%% Test large node containers...
ThisNode = {node(), erlang:system_info(creation)},
- TXPid = mk_pid(ThisNode, 32767, 8191),
+ TXPid = case erlang:system_info(wordsize) of
+ 4 -> mk_pid(ThisNode, 1 bsl 27, 0);
+ 8 -> mk_pid(ThisNode, 1 bsl 27, 1 bsl 31)
+ end,
TXPort = mk_port(ThisNode, 268435455),
TXRef = mk_ref(ThisNode, [262143, 4294967295, 4294967295]),
diff --git a/lib/jinterface/test/jinterface_SUITE.erl b/lib/jinterface/test/jinterface_SUITE.erl
index 8c771feeea..2863466dd4 100644
--- a/lib/jinterface/test/jinterface_SUITE.erl
+++ b/lib/jinterface/test/jinterface_SUITE.erl
@@ -186,6 +186,18 @@ status_handler() ->
init_per_suite(Config) when is_list(Config) ->
+ %% Trigger usage of large pids and ports in 64-bit case...
+ case erlang:system_info(wordsize) of
+ 4 ->
+ ok;
+ 8 ->
+ erts_debug:set_internal_state(available_internal_state,true),
+ erts_debug:set_internal_state(next_pid, 1 bsl 32),
+ erts_debug:set_internal_state(next_port, 1 bsl 32),
+ erts_debug:set_internal_state(available_internal_state,false),
+ ok
+ end,
+
case case code:priv_dir(jinterface) of
{error,bad_name} -> false;
P -> filelib:is_dir(P) end of
diff --git a/lib/jinterface/test/nc_SUITE.erl b/lib/jinterface/test/nc_SUITE.erl
index 115571e21e..eb03e1e560 100644
--- a/lib/jinterface/test/nc_SUITE.erl
+++ b/lib/jinterface/test/nc_SUITE.erl
@@ -131,8 +131,8 @@ pid_roundtrip(Config) when is_list(Config)->
|| Cr <- [1,2,3,4,16#adec0ded],
{Num, Ser} <- [{4711,4711},{32767, 8191}]],
do_echo([self(),
- mk_pid(ThisNode, 4711, 4711),
- mk_pid(ThisNode, 32767, 8191)
+ mk_pid(ThisNode, 4711, 0),
+ mk_pid(ThisNode, 1 bsl 27, 0)
| RemPids],
Config).
diff --git a/lib/stdlib/test/qlc_SUITE.erl b/lib/stdlib/test/qlc_SUITE.erl
index f9b0580c8e..81b8fe8e95 100644
--- a/lib/stdlib/test/qlc_SUITE.erl
+++ b/lib/stdlib/test/qlc_SUITE.erl
@@ -6557,15 +6557,15 @@ otp_7114(Config) when is_list(Config) ->
%% OTP-7232. qlc:info() bug (pids, ports, refs, funs).
otp_7232(Config) when is_list(Config) ->
- Ts = [<<"L = [fun math:sqrt/1, list_to_pid(\"<0.4.1>\"),
+ Ts = [<<"L = [fun math:sqrt/1, list_to_pid(\"<0.4.0>\"),
erlang:make_ref()],
- \"[fun math:sqrt/1, <0.4.1>, #Ref<\" ++ _ = qlc:info(L),
+ \"[fun math:sqrt/1, <0.4.0>, #Ref<\" ++ _ = qlc:info(L),
{call,_,
{remote,_,{atom,_,qlc},{atom,_,sort}},
[{cons,_,
{'fun',_,{function,{atom,_,math},{atom,_,sqrt},_}},
{cons,_,
- {string,_,\"<0.4.1>\"}, % could use list_to_pid..
+ {string,_,\"<0.4.0>\"}, % could use list_to_pid..
{cons,_,{string,_,\"#Ref<\"++_},{nil,_}}}},
{nil,_}]} =
qlc:info(qlc:sort(L),{format,abstract_code})">>,
--
2.35.3