From 2a2d8649c2e82f9d63eb423e54b17780e1af3f6b Mon Sep 17 00:00:00 2001 From: William Yang Date: Thu, 16 May 2024 18:28:05 +0200 Subject: [PATCH] test: send after stream shutdown try to trigger https://github.com/emqx/quic/issues/277 --- test/quicer_SUITE.erl | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/quicer_SUITE.erl b/test/quicer_SUITE.erl index a11e45c9..69a802e3 100644 --- a/test/quicer_SUITE.erl +++ b/test/quicer_SUITE.erl @@ -59,6 +59,7 @@ tc_stream_passive_receive_large_buffer_1/1, tc_stream_passive_receive_large_buffer_2/1, tc_stream_send_after_conn_close/1, + tc_stream_send_after_stream_shutdown/1, tc_stream_send_after_async_conn_close/1, tc_stream_sendrecv_large_data_passive/1, %% @deprecated @@ -737,6 +738,36 @@ tc_stream_send_after_conn_close(Config) -> ct:fail("timeout") end. +tc_stream_send_after_stream_shutdown(Config) -> + Port = select_port(), + Owner = self(), + {SPid, Ref} = spawn_monitor(fun() -> simple_stream_server(Owner, Config, Port) end), + receive + listener_ready -> ok + end, + + {ok, Conn} = quicer:connect("localhost", Port, default_conn_opts(), 5000), + {ok, Stm} = quicer:start_stream(Conn, []), + {ok, 4} = quicer:send(Stm, <<"ping">>), + {ok, {_, _}} = quicer:sockname(Conn), + %% Next close_connection call has two scenarios: + %% a) Just close connection, stream is not created in QUIC + %% b) Close the connection after the stream is created in QUIC + ok = quicer:async_shutdown_stream(Stm), + case quicer:send(Stm, <<"ping2">>) of + {error, closed} -> + ok; + {error, stm_send_error, aborted} -> + ok; + {error, stm_send_error, invalid_state} -> + ok; + {error, cancelled} -> + ok + end, + ok = quicer:close_connection(Conn), + SPid ! done, + ok = ensure_server_exit_normal(Ref). + tc_stream_send_after_async_conn_close(Config) -> Port = select_port(), Owner = self(),