File 7813-kernel-test-sys-monitor-fixes.patch of Package erlang

From 2836c0a2fdd685a0765b9f6ef38d716684cb846b Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Thu, 29 Jun 2023 11:08:38 +0200
Subject: [PATCH 3/4] [kernel|test] sys monitor fixes

---
 lib/kernel/test/inet_SUITE.erl         | 28 ++++++----
 lib/kernel/test/inet_sockopt_SUITE.erl | 73 ++++++++++++++++++++++----
 lib/kernel/test/kernel_test_lib.erl    | 19 +++++--
 3 files changed, 99 insertions(+), 21 deletions(-)

diff --git a/lib/kernel/test/inet_SUITE.erl b/lib/kernel/test/inet_SUITE.erl
index 5713fb6f1e..e4fd195e31 100644
--- a/lib/kernel/test/inet_SUITE.erl
+++ b/lib/kernel/test/inet_SUITE.erl
@@ -133,12 +133,13 @@ init_per_suite(Config0) ->
 
         Config1 when is_list(Config1) ->
             
-            ?P("init_per_suite -> end when "
-               "~n      Config: ~p", [Config1]),
-            
             %% We need a monitor on this node also
+            ?P("init_per_suite -> try start system monitor"),
             kernel_test_sys_monitor:start(),
 
+            ?P("init_per_suite -> end when "
+               "~n      Config: ~p", [Config1]),
+
             Config1
     end.
 
@@ -148,11 +149,12 @@ end_per_suite(Config0) ->
        "~n      Config: ~p"
        "~n      Nodes:  ~p", [Config0, erlang:nodes()]),
 
-    Config1 = ?LIB:end_per_suite(Config0),
-
     %% Stop the local monitor
+    ?P("init_per_suite -> try stop system monitor"),
     kernel_test_sys_monitor:stop(),
 
+    Config1 = ?LIB:end_per_suite(Config0),
+
     ?P("end_per_suite -> "
             "~n      Nodes: ~p", [erlang:nodes()]),
 
@@ -172,7 +174,7 @@ init_per_testcase(Case, Config0) ->
        "~n   Nodes:    ~p"
        "~n   Links:    ~p"
        "~n   Monitors: ~p",
-       [Config0, erlang:nodes(), pi(links), pi(monitors)]),
+       [Config0, erlang:nodes(), links(), monitors()]),
 
     kernel_test_global_sys_monitor:reset_events(),
 
@@ -182,7 +184,7 @@ init_per_testcase(Case, Config0) ->
        "~n   Config:   ~p"
        "~n   Nodes:    ~p"
        "~n   Links:    ~p"
-       "~n   Monitors: ~p", [Config1, erlang:nodes(), pi(links), pi(monitors)]),
+       "~n   Monitors: ~p", [Config1, erlang:nodes(), links(), monitors()]),
     Config1.
 
 init_per_testcase2(gethostnative_debug_level, Config) ->
@@ -210,7 +212,7 @@ end_per_testcase(Case, Config) ->
        "~n   Nodes:    ~p"
        "~n   Links:    ~p"
        "~n   Monitors: ~p",
-       [Config, erlang:nodes(), pi(links), pi(monitors)]),
+       [Config, erlang:nodes(), links(), monitors()]),
 
     ?P("system events during test: "
        "~n   ~p", [kernel_test_global_sys_monitor:events()]),
@@ -220,7 +222,7 @@ end_per_testcase(Case, Config) ->
     ?P("end_per_testcase -> done with"
        "~n   Nodes:    ~p"
        "~n   Links:    ~p"
-       "~n   Monitors: ~p", [erlang:nodes(), pi(links), pi(monitors)]),
+       "~n   Monitors: ~p", [erlang:nodes(), links(), monitors()]),
     ok.
 
 end_per_testcase2(lookup_bad_search_option, Config) ->
@@ -2096,6 +2098,8 @@ do_socknames_udp1(Conf) ->
                "~n      ~p", [Reason1]),
             exit({skip, {listen_socket, Reason1}})
     end,
+    ?P("enable debug"),
+    inet:setopts(S1, [{debug, true}]),
     ?P("close socket"),
     (catch gen_udp:close(S1)),
     ?P("done"),
@@ -2105,6 +2109,12 @@ do_socknames_udp1(Conf) ->
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+links() ->
+    pi(links).
+
+monitors() ->
+    pi(monitors).
+
 pi(Item) ->
     {Item, Val} = process_info(self(), Item),
     Val.
diff --git a/lib/kernel/test/inet_sockopt_SUITE.erl b/lib/kernel/test/inet_sockopt_SUITE.erl
index 9d539b7f89..bd2bfc20e2 100644
--- a/lib/kernel/test/inet_sockopt_SUITE.erl
+++ b/lib/kernel/test/inet_sockopt_SUITE.erl
@@ -80,27 +80,43 @@ all() ->
 groups() -> 
     [].
 
-init_per_suite(Config) ->
+init_per_suite(Config0) ->
 
     ?P("init_per_suite -> entry with"
        "~n      Config: ~p"
-       "~n      Nodes:  ~p", [Config, erlang:nodes()]),
+       "~n      Nodes:  ~p", [Config0, erlang:nodes()]),
 
-    %% We need a monitor on this node also
-    kernel_test_sys_monitor:start(),
+    case ?LIB:init_per_suite([{allow_skip, false} | Config0]) of
+        {skip, _} = SKIP ->
+            SKIP;
 
-    Config.
+        Config1 when is_list(Config1) ->
+            
+            %% We need a monitor on this node also
+            kernel_test_sys_monitor:start(),
+
+            ?P("init_per_suite -> end when "
+               "~n      Config: ~p", [Config1]),
+
+            Config1
+    end.
 
-end_per_suite(Config) ->
+end_per_suite(Config0) ->
 
     ?P("end_per_suite -> entry with"
        "~n      Config: ~p"
-       "~n      Nodes:  ~p", [Config, erlang:nodes()]),
+       "~n      Nodes:  ~p", [Config0, erlang:nodes()]),
 
     %% Stop the local monitor
+    ?P("init_per_suite -> try stop system monitor"),
     kernel_test_sys_monitor:stop(),
 
-    ok.
+    Config1 = ?LIB:end_per_suite(Config0),
+
+    ?P("end_per_suite -> "
+            "~n      Nodes: ~p", [erlang:nodes()]),
+
+    Config1.
 
 init_per_group(_GroupName, Config) ->
     Config.
@@ -110,9 +126,36 @@ end_per_group(_GroupName, Config) ->
 
 
 init_per_testcase(_Func, Config) ->
+    ?P("init_per_testcase -> entry with"
+       "~n   Config:   ~p"
+       "~n   Nodes:    ~p"
+       "~n   Links:    ~p"
+       "~n   Monitors: ~p",
+       [Config, erlang:nodes(), links(), monitors()]),
+
+    kernel_test_global_sys_monitor:reset_events(),
+
+    ?P("init_per_testcase -> done when"
+       "~n   Nodes:    ~p"
+       "~n   Links:    ~p"
+       "~n   Monitors: ~p", [erlang:nodes(), links(), monitors()]),
     Config.
 
-end_per_testcase(_Func, _Config) ->
+end_per_testcase(_Func, Config) ->
+    ?P("end_per_testcase -> entry with"
+       "~n   Config:   ~p"
+       "~n   Nodes:    ~p"
+       "~n   Links:    ~p"
+       "~n   Monitors: ~p",
+       [Config, erlang:nodes(), links(), monitors()]),
+
+    ?P("system events during test: "
+       "~n   ~p", [kernel_test_global_sys_monitor:events()]),
+
+    ?P("end_per_testcase -> done with"
+       "~n   Nodes:    ~p"
+       "~n   Links:    ~p"
+       "~n   Monitors: ~p", [erlang:nodes(), links(), monitors()]),
     ok.
 
 %% Test inet:setopt/getopt simple functionality.
@@ -1135,3 +1178,15 @@ skip(Reason) ->
     throw({skip, Reason}).
 
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+links() ->
+    pi(links).
+
+monitors() ->
+    pi(monitors).
+
+pi(Item) ->
+    {Item, Val} = process_info(self(), Item),
+    Val.
+    
diff --git a/lib/kernel/test/kernel_test_lib.erl b/lib/kernel/test/kernel_test_lib.erl
index e327d6f38f..45953fed84 100644
--- a/lib/kernel/test/kernel_test_lib.erl
+++ b/lib/kernel/test/kernel_test_lib.erl
@@ -113,10 +113,23 @@ init_per_suite(AllowSkip, Config) when is_boolean(AllowSkip) ->
                     SKIP
             end;
 
-        {Factor, _HostInfo} when (AllowSkip =:= false) andalso
+        {Factor, HostInfo} when (AllowSkip =:= false) andalso
                                  is_integer(Factor) ->
-            [{kernel_factor, Factor} | Config]
-
+            print("try start (global) system monitor"),
+            case kernel_test_global_sys_monitor:start() of
+                {ok, _} ->
+                    print("(global) system monitor started"),
+                    case lists:keysearch(label, 1, HostInfo) of
+                        {value, Label} ->
+                            [{kernel_factor, Factor}, Label | Config];
+                        false ->
+                            [{kernel_factor, Factor} | Config]
+                    end;
+                {error, Reason} ->
+                    print("Failed start (global) system monitor:"
+                          "~n      ~p", [Reason]),
+                    [{kernel_factor, Factor} | Config]
+            end
     catch
         throw:{skip, _} = SKIP ->
             SKIP
-- 
2.35.3

openSUSE Build Service is sponsored by