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