File 2432-kernel-test-Add-simple-test-case-for-prim_net-if_ind.patch of Package erlang

From 716ae611358de10f5ad328cc638ba715e23da31d Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Thu, 19 Jun 2025 11:27:54 +0200
Subject: [PATCH 12/14] [kernel|test] Add simple test case for
 prim_net:if_index2name/2

OTP-19674
---
 lib/kernel/test/prim_net_SUITE.erl | 74 +++++++++++++++++++++++++++++-
 1 file changed, 72 insertions(+), 2 deletions(-)

diff --git a/lib/kernel/test/prim_net_SUITE.erl b/lib/kernel/test/prim_net_SUITE.erl
index ff4c07476a..e93caf6ef6 100644
--- a/lib/kernel/test/prim_net_SUITE.erl
+++ b/lib/kernel/test/prim_net_SUITE.erl
@@ -75,7 +75,8 @@
          get_if_entry/1,
 	 get_interface_info/1,
 	 get_ip_address_table/1,
-         if_name2index/1
+         if_name2index/1,
+         if_index2name/1
         ]).
 
 
@@ -112,7 +113,8 @@ misc_cases() ->
      get_interface_info,
      get_ip_address_table,
 
-     if_name2index
+     if_name2index,
+     if_index2name
     ].
 
 
@@ -674,6 +676,74 @@ do_if_name2index() ->
     ok.
 
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Make sure we can handle any argument
+
+if_index2name(_Config) when is_list(_Config) ->
+    ?TT(?SECS(10)),
+    Cond = fun() -> ok end,
+    Pre  = fun() ->
+                   %% Enable trap'ing exits
+                   Old = process_flag(trap_exit, true),
+                   case prim_net:if_names() of
+                       {ok, Idxs} ->
+                           #{trap_exit => Old,
+                             idxs      => Idxs};
+                       {error, enotsup = NOTSUP} ->
+                           skip(NOTSUP)
+                   end
+           end,
+    TC   = 
+	   fun(State) ->
+		   try
+		       ok = do_if_index2name(State)
+                   catch
+                       error:notsup = NOTSUP ->
+                           skip(NOTSUP)
+                   end
+	   end,
+    Post = fun(#{trap_exit := Old} = _State) ->
+                   %% Restore previous trap'ing exit value
+                   process_flag(trap_exit, Old)
+           end,
+    tc_try(?FUNCTION_NAME, Cond, Pre, TC, Post).
+	   
+
+do_if_index2name(#{idxs := [{Idx, If}|_] = Idxs}) ->
+    %% First, pick something that we know exist:
+    case prim_net:if_index2name(Idx) of
+        {ok, If} ->
+            ok;
+        %% We only need to "check" this once
+        {error, enotsup = NOTSUP} ->
+            skip(NOTSUP)
+    end,
+    %% We make no assumption on the order of the indexes...
+    [{MaxIdx, _}|_] = lists:reverse(lists:keysort(1, Idxs)),
+    BadIdx = MaxIdx+1,
+    {error, enxio} = prim_net:if_index2name(BadIdx),
+    try prim_net:if_index2name(-1) of
+        {ok, AnyIf} ->
+            ?P("Unexpected success: "
+               "~n   If: ~p", [AnyIf]),
+            ct:fail({unexpected_success, AnyIf});
+        {error, AnyReason} ->
+            ?P("Unexpected failure: "
+               "~n   Reason: ~p", [AnyReason]),
+            ct:fail({unexpected_failure, AnyReason})
+    catch
+        error:badarg ->
+            ok;
+        C:E:S ->
+            ?P("Unexpected catch: "
+               "~n   Class: ~p"
+               "~n   Error: ~p"
+               "~n   Stack: ~p", [C, E, S]),
+            ct:fail({unexpected_catch, {C, E, S}})
+    end,
+    ok.
+
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 %% not_supported(What) ->
-- 
2.43.0

openSUSE Build Service is sponsored by