File 4333-kernel-tcp-misc-test-Adjust-active-once-closed-test-.patch of Package erlang

From b6cf5308081832b86588ccf6c1cc948117b38b0c Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Tue, 26 May 2020 13:03:26 +0200
Subject: [PATCH 33/35] [kernel|tcp|misc-test] Adjust active-once-closed test
 case

Add a skip clause (eaddrnotavail on listen, connect and connect).
---
 lib/kernel/test/gen_tcp_misc_SUITE.erl | 80 ++++++++++++++++++++------
 1 file changed, 63 insertions(+), 17 deletions(-)

diff --git a/lib/kernel/test/gen_tcp_misc_SUITE.erl b/lib/kernel/test/gen_tcp_misc_SUITE.erl
index c58bb91a41..e3b8e7295d 100644
--- a/lib/kernel/test/gen_tcp_misc_SUITE.erl
+++ b/lib/kernel/test/gen_tcp_misc_SUITE.erl
@@ -3314,33 +3314,44 @@ open_ports(L) ->
 
 %% Check that active once and tcp_close messages behave as expected.
 active_once_closed(Config) when is_list(Config) ->
+    try do_active_once_closed(Config)
+    catch
+        throw:{skip, _} = SKIP ->
+            SKIP
+    end.
+
+do_active_once_closed(_Config) ->
+    p("stage 1"),
     (fun() ->
 	     {Loop,A} = setup_closed_ao(),
 	     Loop({{error,closed},{error,econnaborted}},
-			fun() -> gen_tcp:send(A,"Hello") end),
+                  fun() -> gen_tcp:send(A,"Hello") end),
 	     ok = inet:setopts(A,[{active,once}]),
 	     ok = receive {tcp_closed, A} -> ok after 1000 -> error end,
 	     {error,einval} = inet:setopts(A,[{active,once}]),
 	     ok = receive {tcp_closed, A} -> error after 1000 -> ok end
      end)(),
+    p("stage 2"),
     (fun() ->
 	     {Loop,A} = setup_closed_ao(),
 	     Loop({{error,closed},{error,econnaborted}},
-			fun() -> gen_tcp:send(A,"Hello") end),
+                  fun() -> gen_tcp:send(A,"Hello") end),
 	     ok = inet:setopts(A,[{active,true}]),
 	     ok = receive {tcp_closed, A} -> ok after 1000 -> error end,
 	     {error,einval} = inet:setopts(A,[{active,true}]),
 	     ok = receive {tcp_closed, A} -> error after 1000 -> ok end
      end)(),
-     (fun() ->
+    p("stage 3"),
+    (fun() ->
 	     {Loop,A} = setup_closed_ao(),
 	     Loop({{error,closed},{error,econnaborted}},
-			fun() -> gen_tcp:send(A,"Hello") end),
+                  fun() -> gen_tcp:send(A,"Hello") end),
 	     ok = inet:setopts(A,[{active,true}]),
 	     ok = receive {tcp_closed, A} -> ok after 1000 -> error end,
 	     {error,einval} = inet:setopts(A,[{active,once}]),
 	     ok = receive {tcp_closed, A} -> error after 1000 -> ok end
      end)(),
+    p("stage 4"),
     (fun() ->
 	     {Loop,A} = setup_closed_ao(),
 	     Loop({{error,closed},{error,econnaborted}},
@@ -3350,6 +3361,7 @@ active_once_closed(Config) when is_list(Config) ->
 	     {error,einval} = inet:setopts(A,[{active,true}]),
 	     ok = receive {tcp_closed, A} -> error after 1000 -> ok end
      end)(),
+    p("stage 5"),
     (fun() ->
 	     {Loop,A} = setup_closed_ao(),
 	     Loop({{error,closed},{error,econnaborted}},
@@ -3358,7 +3370,9 @@ active_once_closed(Config) when is_list(Config) ->
 	     ok = receive {tcp_closed, A} -> error after 1000 -> ok end,
 	     ok = inet:setopts(A,[{active,once}]),
 	     ok = receive {tcp_closed, A} -> ok after 1000 -> error end
-     end)().
+     end)(),
+    p("done"),
+    ok.
 
 %% Check that active n and tcp_close messages behave as expected.
 active_n_closed(Config) when is_list(Config) ->
@@ -3628,10 +3642,23 @@ get_max_diff(Max) ->
 	    
 setup_closed_ao() ->
     Dir = filename:dirname(code:which(?MODULE)),
-    {ok,R} = test_server:start_node(?UNIQ_NODE_NAME, slave,
-                                    [{args,"-pa " ++ Dir}]),
+    p("[setup] start slave node"),
+    R = case test_server:start_node(?UNIQ_NODE_NAME, slave,
+                                    [{args,"-pa " ++ Dir}]) of
+            {ok, Slave} ->
+                Slave;
+            {error, Reason} ->
+                skip(f("failed starting slave node: ~p", [Reason]))
+        end,
     Host = get_hostname(node()),
-    {ok, L} = gen_tcp:listen(0, [{active,false},{packet,2}]),
+    p("[setup] create listen socket"),
+    L = case gen_tcp:listen(0, [{active,false},{packet,2}]) of
+            {ok, LSock} ->
+                LSock;
+            {error, eaddrnotavail = LReason} ->
+                (catch test_server:stop_node(R)),
+                skip(listen_failed_str(LReason))
+        end,
     Fun = fun(F) ->
                   receive
                       {From,X} when is_function(X) ->
@@ -3639,20 +3666,37 @@ setup_closed_ao() ->
                       die -> ok
                   end
           end,
-    Pid =  rpc:call(R,erlang,spawn,[fun() -> Fun(Fun) end]),
+    p("[setup] create remote runner"),
+    Pid = rpc:call(R,erlang,spawn,[fun() -> Fun(Fun) end]),
     {ok, Port} = inet:port(L),
     Remote = fun(Fu) ->
                      Pid ! {self(), Fu},
-                     receive {Pid,X} -> X
-                     end
+                     receive {Pid,X} -> X end
              end,
-    {ok, C} = Remote(fun() -> 
-			     gen_tcp:connect(Host,Port,
-					     [{active,false},{packet,2}]) 
-		     end),
-    {ok,A} = gen_tcp:accept(L),
+    Connect = fun() -> 
+                      gen_tcp:connect(Host,Port,
+                                      [{active,false},{packet,2}]) 
+              end,
+    p("[setup] create (remote) connection"),
+    C = case Remote(Connect) of
+            {ok, CSock} ->
+                CSock;
+            {error, eaddrnotavail = CReason} ->
+                (catch test_server:stop_node(R)),
+                skip(connect_failed_str(CReason))
+        end,
+    p("[setup] accept (local) connection"),
+    A = case gen_tcp:accept(L) of
+            {ok, ASock} ->
+                ASock;
+            {error, eaddrnotavail = AReason} ->
+                (catch test_server:stop_node(R)),
+                skip(accept_failed_str(AReason))
+        end,
+    p("[setup] send message"),
     gen_tcp:send(A,"Hello"),
     {ok, "Hello"} = Remote(fun() -> gen_tcp:recv(C,0) end),
+    p("[setup] close (remote) connection"),
     ok =  Remote(fun() -> gen_tcp:close(C) end),
     Loop2 = fun(_,_,_,0) ->
 		    {failure, timeout}; 
@@ -3660,13 +3704,15 @@ setup_closed_ao() ->
 		    case F2() of
 			MA -> MA;
 			MB -> MB;
-			Other -> io:format("~p~n",[Other]),
+			Other -> p("~p",[Other]),
 				 receive after 1000 -> ok end,
 				 L2(L2,{MA,MB},F2,N-1)
 		    end
 	    end,
     Loop = fun(Match2,F3) ->  Loop2(Loop2,Match2,F3,10) end,
+    p("[setup] stop slave node"),
     test_server:stop_node(R),
+    p("[setup] done"),
     {Loop,A}.
     
 setup_timeout_sink(RNode, Timeout, AutoClose) ->
-- 
2.26.2

openSUSE Build Service is sponsored by