From a0181ae41ba32af16501c8a674ab74a7354f11db Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Thu, 18 Jul 2019 14:48:25 +0200 Subject: [esock|test] Some platforms does not accept acceptconn for UDP Some platforms (for example darwin and OpenBSD) does not accept this option for UDP. Will result in 'enoprotoopt'. So, skip that part of the test case (UDP) if this error occurs. OTP-15904 --- erts/emulator/test/socket_SUITE.erl | 49 ++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 11 deletions(-) (limited to 'erts') diff --git a/erts/emulator/test/socket_SUITE.erl b/erts/emulator/test/socket_SUITE.erl index babf3a0c45..0a2d3dec4c 100644 --- a/erts/emulator/test/socket_SUITE.erl +++ b/erts/emulator/test/socket_SUITE.erl @@ -8419,7 +8419,7 @@ api_opt_sock_acceptconn() -> end}, #{desc => "[get] verify UDP socket (before bind)", - cmd => fun(#{sock := Sock} = _State) -> + cmd => fun(#{sock := Sock} = State) -> case Get(Sock) of {ok, false} -> ?SEV_IPRINT("Expected Success: " @@ -8429,16 +8429,28 @@ api_opt_sock_acceptconn() -> ?SEV_EPRINT("Unexpected Success: " "Accepting connections"), {error, {unexpected_success, {Opt, true}}}; + {error, enoprotoopt = Reason} -> + %% On some platforms this is not accepted + %% for UDP, so skip this part (UDP). + ?SEV_EPRINT("Expected Failure: " + "~p => SKIP UDP", [Reason]), + (catch socket:close(Sock)), + {ok, State#{sock => skip}}; {error, Reason} = ERROR -> - ?SEV_EPRINT("Unexpected Failure: ~p", [Reason]), + ?SEV_EPRINT("Unexpected Failure: ~p", + [Reason]), ERROR end end}, #{desc => "[set] verify UDP socket (before bind)", - cmd => fun(#{sock := Sock} = _State) -> + cmd => fun(#{sock := skip} = _State) -> + ?SEV_IPRINT("SKIP'ed"), + ok; + (#{sock := Sock} = _State) -> case Set(Sock, true) of {error, Reason} -> - ?SEV_IPRINT("Expected Failure: ~p", [Reason]), + ?SEV_IPRINT("Expected Failure: ~p", + [Reason]), ok; ok -> ?SEV_EPRINT("Unexpected Success: " @@ -8448,7 +8460,10 @@ api_opt_sock_acceptconn() -> end}, #{desc => "bind UDP socket to local address", - cmd => fun(#{sock := Sock, local_sa := LSA} = _State) -> + cmd => fun(#{sock := skip} = _State) -> + ?SEV_IPRINT("SKIP'ed"), + ok; + (#{sock := Sock, local_sa := LSA} = _State) -> case socket:bind(Sock, LSA) of {ok, _} -> ok; @@ -8460,7 +8475,10 @@ api_opt_sock_acceptconn() -> ?SEV_SLEEP(?SECS(1)), #{desc => "[get] verify UDP socket (after bind)", - cmd => fun(#{sock := Sock} = _State) -> + cmd => fun(#{sock := skip} = _State) -> + ?SEV_IPRINT("SKIP'ed"), + ok; + (#{sock := Sock} = _State) -> case Get(Sock) of {ok, false} -> ?SEV_IPRINT("Expected Success: " @@ -8471,15 +8489,20 @@ api_opt_sock_acceptconn() -> "Accepting connections"), {error, {unexpected_success, {Opt, true}}}; {error, Reason} = ERROR -> - ?SEV_EPRINT("Unexpected Failure: ~p", [Reason]), + ?SEV_EPRINT("Unexpected Failure: ~p", + [Reason]), ERROR end end}, #{desc => "[set] verify UDP socket (after bind)", - cmd => fun(#{sock := Sock} = _State) -> + cmd => fun(#{sock := skip} = _State) -> + ?SEV_IPRINT("SKIP'ed"), + ok; + (#{sock := Sock} = _State) -> case Set(Sock, true) of {error, Reason} -> - ?SEV_IPRINT("Expected Failure: ~p", [Reason]), + ?SEV_IPRINT("Expected Failure: ~p", + [Reason]), ok; ok -> ?SEV_EPRINT("Unexpected Success: " @@ -8489,7 +8512,10 @@ api_opt_sock_acceptconn() -> end}, #{desc => "close UDP socket", - cmd => fun(#{sock := Sock} = State) -> + cmd => fun(#{sock := skip} = State) -> + ?SEV_IPRINT("SKIP'ed (already closed)"), + {ok, maps:remove(sock, State)}; + (#{sock := Sock} = State) -> socket:close(Sock), {ok, maps:remove(sock, State)} end}, @@ -8518,7 +8544,8 @@ api_opt_sock_acceptconn() -> "Accepting connections"), {error, {unexpected_success, {Opt, true}}}; {error, Reason} = ERROR -> - ?SEV_EPRINT("Unexpected Failure: ~p", [Reason]), + ?SEV_EPRINT("Unexpected Failure: ~p", + [Reason]), ERROR end end}, -- cgit v1.2.3