Create a test showing that maxRetransmits=0, ordered=false works

Bug: chromium:1148951
Change-Id: I7f475bb33ab9988832e8e0770f755238d6e8d5a0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215920
Reviewed-by: Florent Castelli <orphis@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33805}
This commit is contained in:
Harald Alvestrand 2021-04-21 18:52:32 +00:00 committed by Commit Bot
parent 1366b0f841
commit feb6eb9701

View File

@ -488,8 +488,6 @@ TEST_P(DataChannelIntegrationTest,
kDefaultTimeout);
}
#endif // WEBRTC_HAVE_SCTP
// Test that after closing PeerConnections, they stop sending any packets (ICE,
// DTLS, RTP...).
TEST_P(DataChannelIntegrationTest, ClosingConnectionStopsPacketFlow) {
@ -497,9 +495,7 @@ TEST_P(DataChannelIntegrationTest, ClosingConnectionStopsPacketFlow) {
ASSERT_TRUE(CreatePeerConnectionWrappers());
ConnectFakeSignaling();
caller()->AddAudioVideoTracks();
#ifdef WEBRTC_HAVE_SCTP
caller()->CreateDataChannel();
#endif
caller()->CreateAndSetAndSignalOffer();
ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
MediaExpectations media_expectations;
@ -517,7 +513,6 @@ TEST_P(DataChannelIntegrationTest, ClosingConnectionStopsPacketFlow) {
// Test that transport stats are generated by the RTCStatsCollector for a
// connection that only involves data channels. This is a regression test for
// crbug.com/826972.
#ifdef WEBRTC_HAVE_SCTP
TEST_P(DataChannelIntegrationTest,
TransportStatsReportedForDataChannelOnlyConnection) {
ASSERT_TRUE(CreatePeerConnectionWrappers());
@ -534,6 +529,68 @@ TEST_P(DataChannelIntegrationTest,
EXPECT_EQ(1u, callee_report->GetStatsOfType<RTCTransportStats>().size());
}
TEST_P(DataChannelIntegrationTest, QueuedPacketsGetDeliveredInReliableMode) {
CreatePeerConnectionWrappers();
ConnectFakeSignaling();
caller()->CreateDataChannel();
caller()->CreateAndSetAndSignalOffer();
ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
ASSERT_TRUE_WAIT(callee()->data_channel(), kDefaultTimeout);
caller()->data_channel()->Send(DataBuffer("hello first"));
ASSERT_EQ_WAIT(1u, callee()->data_observer()->received_message_count(),
kDefaultTimeout);
// Cause a temporary network outage
virtual_socket_server()->set_drop_probability(1.0);
for (int i = 1; i <= 10; i++) {
caller()->data_channel()->Send(DataBuffer("Sent while blocked"));
}
// Nothing should be delivered during outage. Short wait.
EXPECT_EQ_WAIT(1u, callee()->data_observer()->received_message_count(), 10);
// Reverse outage
virtual_socket_server()->set_drop_probability(0.0);
// All packets should be delivered.
EXPECT_EQ_WAIT(11u, callee()->data_observer()->received_message_count(),
kDefaultTimeout);
}
TEST_P(DataChannelIntegrationTest, QueuedPacketsGetDeliveredInUnReliableMode) {
CreatePeerConnectionWrappers();
ConnectFakeSignaling();
DataChannelInit init;
init.maxRetransmits = 0;
init.ordered = false;
caller()->CreateDataChannel(&init);
caller()->CreateAndSetAndSignalOffer();
ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
ASSERT_TRUE_WAIT(callee()->data_channel(), kDefaultTimeout);
caller()->data_channel()->Send(DataBuffer("hello first"));
ASSERT_EQ_WAIT(1u, callee()->data_observer()->received_message_count(),
kDefaultTimeout);
// Cause a temporary network outage
virtual_socket_server()->set_drop_probability(1.0);
for (int i = 1; i <= 10; i++) {
caller()->data_channel()->Send(DataBuffer("Sent while blocked"));
}
// Nothing should be delivered during outage.
// We do a short wait to verify that delivery count is still 1.
WAIT(false, 10);
EXPECT_EQ(1u, callee()->data_observer()->received_message_count());
// Reverse the network outage.
virtual_socket_server()->set_drop_probability(0.0);
// Send a new packet, and wait for it to be delivered.
caller()->data_channel()->Send(DataBuffer("After block"));
EXPECT_EQ_WAIT("After block", callee()->data_observer()->last_message(),
kDefaultTimeout);
// Some messages should be lost, but first and last message should have
// been delivered.
// First, check that the protocol guarantee is preserved.
EXPECT_GT(11u, callee()->data_observer()->received_message_count());
EXPECT_LE(2u, callee()->data_observer()->received_message_count());
// Then, check that observed behavior (lose all messages) has not changed
EXPECT_EQ(2u, callee()->data_observer()->received_message_count());
}
INSTANTIATE_TEST_SUITE_P(DataChannelIntegrationTest,
DataChannelIntegrationTest,
Values(SdpSemantics::kPlanB,