aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorMicael Karlberg <[email protected]>2019-07-18 16:43:39 +0200
committerMicael Karlberg <[email protected]>2019-07-18 16:43:39 +0200
commit76b8f794ce7192bde3a8e112cd6534320a7d6a2b (patch)
tree15394ab35f5fcc5377df6eb08da87d4079ef52af /erts
parent645be105b93b33d6568d5fe6a781a51914fe7313 (diff)
downloadotp-76b8f794ce7192bde3a8e112cd6534320a7d6a2b.tar.gz
otp-76b8f794ce7192bde3a8e112cd6534320a7d6a2b.tar.bz2
otp-76b8f794ce7192bde3a8e112cd6534320a7d6a2b.zip
[esock|test] Update the bindtodevice test case
Handle the eperm error reason that can be returned when attempting to use 'bindtodevice'. OTP-15904
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/test/socket_SUITE.erl40
1 files 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},