File 7381-Check-for-logger-error-events.patch of Package erlang

From a2a418277f31c2999adf0673a66c202a9130feb6 Mon Sep 17 00:00:00 2001
From: Raimo Niskanen <raimo@erlang.org>
Date: Thu, 10 Aug 2023 10:33:14 +0200
Subject: [PATCH] Check for logger error events

---
 lib/inets/test/httpd_SUITE.erl | 68 ++++++++++++++++++++++++++++++----
 1 file changed, 61 insertions(+), 7 deletions(-)

diff --git a/lib/inets/test/httpd_SUITE.erl b/lib/inets/test/httpd_SUITE.erl
index 1df6251d41..7e94c7af60 100644
--- a/lib/inets/test/httpd_SUITE.erl
+++ b/lib/inets/test/httpd_SUITE.erl
@@ -1590,6 +1590,7 @@ disturbing_1_0(Config) when is_list(Config) ->
     disturbing([{http_version, "HTTP/1.0"} | Config]).
 
 disturbing(Config) when is_list(Config)->
+    LogWatcher = start_log_watcher(),
     Server =  proplists:get_value(server_pid, Config),
     Version = proplists:get_value(http_version, Config),
     Host = proplists:get_value(host, Config),
@@ -1606,12 +1607,13 @@ disturbing(Config) when is_list(Config)->
     Close = list_to_atom((typestr(Type)) ++ "_closed"),
     receive 
 	{Close, Socket} ->
-	    ok;
-	Msg ->
-	    ct:fail({{expected, {Close, Socket}}, {got, Msg}})
-    end,
-    inets_test_lib:close(Type, Socket),
-    [{server_name, "httpd_disturbing_" ++ Version}] =  httpd:info(Server, [server_name]).
+            inets_test_lib:close(Type, Socket),
+            [{server_name, "httpd_disturbing_" ++ Version}] =
+                httpd:info(Server, [server_name]),
+            [] = stop_log_watcher(LogWatcher),
+            [] = inets_test_lib:flush(),
+	    ok
+    end.
 %%-------------------------------------------------------------------------
 non_disturbing_1_1(Config) when is_list(Config) -> 
     non_disturbing([{http_version, "HTTP/1.1"} | Config]).
@@ -1671,7 +1673,6 @@ reload_config_file(Config) when is_list(Config) ->
     ok = file:write_file(HttpdConf, NewConfig),
     ok = httpd:reload_config(HttpdConf, non_disturbing),
     "httpd_test_new" = proplists:get_value(server_name, httpd:info(Server)).
-
 %%-------------------------------------------------------------------------
 mime_types_format(Config) when is_list(Config) -> 
     DataDir = proplists:get_value(data_dir, Config),
@@ -2645,3 +2646,56 @@ peer(Config) ->
       _ ->
         "false"
    end.   
+
+start_log_watcher() ->
+    Spawner = self(),
+    EventDest = erlang:alias(),
+    HandlerId = ?MODULE,
+    _ =
+        spawn(
+          fun () ->
+                  MonAlias =
+                      monitor(process, Spawner, [{alias,reply_demonitor}]),
+                  EventDest ! {started,EventDest,MonAlias},
+                  receive
+                      {stop,MonAlias} ->
+                          _ = logger:remove_handler(HandlerId),
+                          EventDest ! {stopped,EventDest},
+                          ok;
+                      {'DOWN',MonAlias,_,_,_} ->
+                          _ = logger:remove_handler(HandlerId),
+                          ok
+                  end
+          end),
+    receive
+        {started,EventDest,Watcher} ->
+            Config = #{ config => EventDest },
+            ok = logger:add_handler(HandlerId, ?MODULE, Config),
+            {EventDest,Watcher}
+    end.
+
+stop_log_watcher({EventDest,Watcher}) ->
+    Watcher ! {stop,Watcher},
+    receive
+        {stopped,EventDest} ->
+            true = unalias(EventDest),
+            stop_log_watcher_collect(EventDest)
+    end.
+%%
+stop_log_watcher_collect(EventDest) ->
+    receive
+        {event,EventDest,Event} ->
+            [Event | stop_log_watcher_collect(EventDest)]
+    after 0 ->
+            []
+    end.
+
+log(#{level := Level} = Event, #{ config := EventDest }) ->
+    %% Pass on events of level 'error' or worse
+    case logger:compare_levels(Level, error) of
+        lt ->
+            ok;
+        _ ->
+            EventDest ! {event,EventDest,Event},
+            ok
+    end.
-- 
2.35.3

openSUSE Build Service is sponsored by