From 7929ef578a100bfc56edf5a777ba9f36a4021dba Mon Sep 17 00:00:00 2001 From: Victor Boivie Date: Mon, 2 Sep 2024 20:34:25 +0200 Subject: [PATCH] dcsctp: Add test for stream reset pending Bug: None Change-Id: Ida040461dda53b438d88df4a38518f334cadc379 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/361861 Reviewed-by: Florent Castelli Commit-Queue: Victor Boivie Auto-Submit: Victor Boivie Cr-Commit-Position: refs/heads/main@{#42975} --- net/dcsctp/socket/dcsctp_socket_test.cc | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/net/dcsctp/socket/dcsctp_socket_test.cc b/net/dcsctp/socket/dcsctp_socket_test.cc index cea30a9ddc..8413c05db6 100644 --- a/net/dcsctp/socket/dcsctp_socket_test.cc +++ b/net/dcsctp/socket/dcsctp_socket_test.cc @@ -1073,6 +1073,38 @@ TEST_P(DcSctpSocketParametrizedTest, ResetStream) { MaybeHandoverSocketAndSendMessage(a, std::move(z)); } +TEST(DcSctpSocketTest, SendReconfigWhenStreamsReady) { + DcSctpOptions options = {.cwnd_mtus_initial = 1}; + SocketUnderTest a("A", options); + SocketUnderTest z("Z", options); + + ConnectSockets(a, z); + + // Send a message so large so that it will not be sent in full, and still + // remaining in the send queue. + a.socket.Send(DcSctpMessage(StreamID(1), PPID(51), + std::vector(options.mtu * 3)), + {.unordered = IsUnordered(false)}); + + // Reset the outgoing stream. RECONFIG can't be sent immediately as the stream + // is pending (not paused). + a.socket.ResetStreams(std::vector({StreamID(1)})); + + // This message sent directly after should be received eventually. + a.socket.Send(DcSctpMessage(StreamID(1), PPID(53), std::vector(100)), + {.unordered = IsUnordered(false)}); + + ExchangeMessagesAndAdvanceTime(a, z); + + std::optional msg1 = z.cb.ConsumeReceivedMessage(); + ASSERT_TRUE(msg1.has_value()); + EXPECT_EQ(msg1->ppid(), PPID(51)); + + std::optional msg2 = z.cb.ConsumeReceivedMessage(); + ASSERT_TRUE(msg2.has_value()); + EXPECT_EQ(msg2->ppid(), PPID(53)); +} + TEST_P(DcSctpSocketParametrizedTest, ResetStreamWillMakeChunksStartAtZeroSsn) { SocketUnderTest a("A"); auto z = std::make_unique("Z");