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

openSUSE Build Service is sponsored by