Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
5561-erts-Fix-test-cases-for-new-internal-pids....
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor