From 76b8f794ce7192bde3a8e112cd6534320a7d6a2b Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Thu, 18 Jul 2019 16:43:39 +0200 Subject: [esock|test] Update the bindtodevice test case Handle the eperm error reason that can be returned when attempting to use 'bindtodevice'. OTP-15904 --- erts/emulator/test/socket_SUITE.erl | 40 ++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/erts/emulator/test/socket_SUITE.erl b/erts/emulator/test/socket_SUITE.erl index 8ef27b1d04..91ce723afa 100644 --- a/erts/emulator/test/socket_SUITE.erl +++ b/erts/emulator/test/socket_SUITE.erl @@ -8825,7 +8825,6 @@ api_opt_sock_acceptconn() -> ], - i("get multicast address"), Domain = inet, i("start tester evaluator"), @@ -8987,11 +8986,15 @@ api_opt_sock_bindtodevice() -> ?SEV_SLEEP(?SECS(1)), #{desc => "Bind UDP socket 1 to device", - cmd => fun(#{usock1 := Sock, dev := Dev} = _State) -> + cmd => fun(#{usock1 := Sock, dev := Dev} = State) -> case Set(Sock, Dev) of ok -> ?SEV_IPRINT("Expected Success"), ok; + {error, eperm = Reason} -> + ?SEV_IPRINT("Expected Failure: ~p", [Reason]), + (catch socket:close(Sock)), + {ok, State#{usock1 => skip}}; {error, Reason} = ERROR -> ?SEV_EPRINT("Unexpected Failure: ~p", [Reason]), ERROR @@ -9009,11 +9012,19 @@ api_opt_sock_bindtodevice() -> end end}, #{desc => "Bind TCP socket 1 to device", - cmd => fun(#{tsock1 := Sock, dev := Dev} = _State) -> + cmd => fun(#{usock1 := USock1, + tsock1 := Sock, dev := Dev} = State) -> case Set(Sock, Dev) of ok -> ?SEV_IPRINT("Expected Success"), ok; + {error, eperm = Reason} when (USock1 =:= skip) -> + ?SEV_IPRINT("Expected Failure: ~p", [Reason]), + {skip, Reason}; + {error, eperm = Reason} -> + ?SEV_IPRINT("Expected Failure: ~p", [Reason]), + (catch socket:close(Sock)), + {ok, State#{tsock1 => skip}}; {error, Reason} = ERROR -> ?SEV_EPRINT("Unexpected Failure: ~p", [Reason]), ERROR @@ -9034,7 +9045,10 @@ api_opt_sock_bindtodevice() -> ?SEV_SLEEP(?SECS(1)), #{desc => "[get] verify UDP socket 1 (after bindtodevice)", - cmd => fun(#{usock1 := Sock} = _State) -> + cmd => fun(#{usock1 := skip} = _State) -> + ?SEV_IPRINT("SKIP'ed (previous eperm)"), + ok; + (#{usock1 := Sock} = _State) -> case Get(Sock) of {ok, Dev} -> ?SEV_IPRINT("Expected Success: ~p", [Dev]), @@ -9056,7 +9070,10 @@ api_opt_sock_bindtodevice() -> end end}, #{desc => "[get] verify TCP socket 1 (after bindtodevice)", - cmd => fun(#{tsock1 := Sock} = _State) -> + cmd => fun(#{tsock1 := skip} = _State) -> + ?SEV_IPRINT("SKIP'ed (previous eperm)"), + ok; + (#{tsock1 := Sock} = _State) -> case Get(Sock) of {ok, Dev} -> ?SEV_IPRINT("Expected Success: ~p", [Dev]), @@ -9082,7 +9099,10 @@ api_opt_sock_bindtodevice() -> %% *** Termination *** #{desc => "close UDP socket 1", - cmd => fun(#{usock1 := Sock} = State) -> + cmd => fun(#{usock1 := skip} = State) -> + ?SEV_IPRINT("SKIP'ed (already closed)"), + {ok, maps:remove(usock1, State)}; + (#{usock1 := Sock} = State) -> socket:close(Sock), {ok, maps:remove(usock1, State)} end}, @@ -9092,7 +9112,10 @@ api_opt_sock_bindtodevice() -> {ok, maps:remove(usock2, State)} end}, #{desc => "close TCP socket 1", - cmd => fun(#{tsock1 := Sock} = State) -> + cmd => fun(#{tsock1 := skip} = State) -> + ?SEV_IPRINT("SKIP'ed (already closed)"), + {ok, maps:remove(tsock1, State)}; + (#{tsock1 := Sock} = State) -> socket:close(Sock), {ok, maps:remove(tsock1, State)} end}, @@ -9106,7 +9129,6 @@ api_opt_sock_bindtodevice() -> ?SEV_FINISH_NORMAL ], - i("get multicast address"), Domain = inet, i("start tester evaluator"), @@ -10203,8 +10225,8 @@ api_opt_ip_add_drop_membership() -> ], - i("get multicast address"), Domain = inet, + i("get multicast address"), MAddr = which_ip_multicast_address(), MSA = #{family => Domain, addr => MAddr}, -- cgit v1.2.3