diff options
author | Anders Svensson <[email protected]> | 2017-03-31 23:32:26 +0200 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2017-06-11 16:30:36 +0200 |
commit | a47ab3e0021a3d27936f16b464112c2f08a2d2f0 (patch) | |
tree | ecab2c07247a54e84781281afa4eeeb9c7b53417 | |
parent | 1df74351286b6cd0e2b673fdf07f7219244ce9a7 (diff) | |
download | otp-a47ab3e0021a3d27936f16b464112c2f08a2d2f0.tar.gz otp-a47ab3e0021a3d27936f16b464112c2f08a2d2f0.tar.bz2 otp-a47ab3e0021a3d27936f16b464112c2f08a2d2f0.zip |
Fix diameter_transport_SUITE race
The server sent and died, but there's no guarantee that it won't take
the connection down before the client has receive its bytes. Make the
server wait for the client to take down the connection.
-rw-r--r-- | lib/diameter/test/diameter_transport_SUITE.erl | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/lib/diameter/test/diameter_transport_SUITE.erl b/lib/diameter/test/diameter_transport_SUITE.erl index ac65cbe618..14c748ad20 100644 --- a/lib/diameter/test/diameter_transport_SUITE.erl +++ b/lib/diameter/test/diameter_transport_SUITE.erl @@ -296,10 +296,17 @@ init(gen_accept, {Prot, Ref}) -> {ok, PortNr} = inet:port(LSock), true = diameter_reg:add_new(?TEST_LISTENER(Ref, PortNr)), - %% Accept a connection, receive a message and send it back. + %% Accept a connection, receive a message send it back, and wait + %% for the peer to close the connection. {ok, Sock} = gen_accept(Prot, LSock), Bin = gen_recv(Prot, Sock), - ok = gen_send(Prot, Sock, Bin); + ok = gen_send(Prot, Sock, Bin), + receive + {tcp_closed, Sock} = T -> + T; + ?SCTP(Sock, {_, #sctp_assoc_change{}}) = T -> + T + end; init(connect, {Prot, Ref}) -> %% Lookup the peer's listening socket. @@ -313,12 +320,7 @@ init(connect, {Prot, Ref}) -> %% Send a message and receive it back. Bin = make_msg(), TPid ! ?TMSG({send, Bin}), - Bin = bin(Prot, ?RECV(?TMSG({recv, P}), P)), - - %% Expect the transport process to die as a result of the peer - %% closing the connection. - MRef = erlang:monitor(process, TPid), - ?RECV({'DOWN', MRef, process, _, _}). + Bin = bin(Prot, ?RECV(?TMSG({recv, P}), P)). bin(sctp, #diameter_packet{bin = Bin}) -> Bin; @@ -338,15 +340,11 @@ make_msg() -> <<1:8, Len:24, Bin/binary>>. %% crypto:rand_bytes/1 isn't available on all platforms (since openssl -%% isn't) so roll our own. +%% isn't) so roll our own. Not particularly random, but less verbose +%% in trace. rand_bytes(N) -> - rand_bytes(N, <<>>). - -rand_bytes(0, Bin) -> - Bin; -rand_bytes(N, Bin) -> Oct = rand:uniform(256) - 1, - rand_bytes(N-1, <<Oct, Bin/binary>>). + binary:copy(<<Oct>>, N). %% =========================================================================== |