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:
parent
1366b0f841
commit
feb6eb9701
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user