Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Unified Diff: webrtc/api/peerconnection_unittest.cc

Issue 2233033002: Adding test for unordered, fragmented SCTP message delivery. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | webrtc/api/test/mockpeerconnectionobservers.h » ('j') | webrtc/media/sctp/sctpdataengine.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/peerconnection_unittest.cc
diff --git a/webrtc/api/peerconnection_unittest.cc b/webrtc/api/peerconnection_unittest.cc
index 406fab0d89eb6cc13d397a1ac668a87fca043b6e..33b7b2ff4e6ec8e744d826d6f346260a92bfeb30 100644
--- a/webrtc/api/peerconnection_unittest.cc
+++ b/webrtc/api/peerconnection_unittest.cc
@@ -31,6 +31,7 @@
#include "webrtc/api/test/fakevideotrackrenderer.h"
#include "webrtc/api/test/mockpeerconnectionobservers.h"
#include "webrtc/base/gunit.h"
+#include "webrtc/base/helpers.h"
#include "webrtc/base/physicalsocketserver.h"
#include "webrtc/base/ssladapter.h"
#include "webrtc/base/sslstreamadapter.h"
@@ -1337,6 +1338,8 @@ class P2PTestConductor : public testing::Test {
}
}
+ rtc::VirtualSocketServer* virtual_socket_server() { return ss_.get(); }
+
PeerConnectionTestClient* initializing_client() {
return initiating_client_.get();
}
@@ -1929,6 +1932,66 @@ TEST_F(P2PTestConductor, LocalP2PTestSctpDataChannel) {
EXPECT_TRUE_WAIT(!receiving_client()->data_observer()->IsOpen(), kMaxWaitMs);
}
+TEST_F(P2PTestConductor, UnorderedSctpDataChannel) {
+ ASSERT_TRUE(CreateTestClients());
+ webrtc::DataChannelInit init;
+ init.ordered = false;
+ initializing_client()->CreateDataChannel(&init);
+
+ // Introduce random network delays.
+ // Otherwise it's not a true "unordered" test.
honghaiz3 2016/08/10 19:25:42 Nit: Should it be "it isn't" or "it is not"?
Taylor Brandstetter 2016/08/10 20:55:05 They're grammatically equivalent so I think I'll l
+ virtual_socket_server()->set_delay_mean(20);
+ virtual_socket_server()->set_delay_stddev(5);
+ virtual_socket_server()->UpdateDelayDistribution();
+
+ initializing_client()->Negotiate();
+ ASSERT_TRUE(initializing_client()->data_channel() != nullptr);
+ EXPECT_TRUE_WAIT(receiving_client()->data_channel() != nullptr, kMaxWaitMs);
+ EXPECT_TRUE_WAIT(initializing_client()->data_observer()->IsOpen(),
+ kMaxWaitMs);
+ EXPECT_TRUE_WAIT(receiving_client()->data_observer()->IsOpen(), kMaxWaitMs);
+
+ static constexpr int kNumMessages = 100;
+ // Deliberately chosen to be larger than the MTU so messages get fragmented.
+ static constexpr size_t kMaxMessageSize = 4096;
+ // Create and send random messages.
+ std::vector<std::string> sent_messages;
+ for (int i = 0; i < kNumMessages; ++i) {
+ size_t length = (rand() % kMaxMessageSize) + 1;
+ std::string message;
+ ASSERT_TRUE(rtc::CreateRandomString(length, &message));
+ initializing_client()->data_channel()->Send(DataBuffer(message));
+ receiving_client()->data_channel()->Send(DataBuffer(message));
+ sent_messages.push_back(message);
+ }
+
+ EXPECT_EQ_WAIT(
+ kNumMessages,
+ initializing_client()->data_observer()->received_message_count(),
+ kMaxWaitMs);
+ EXPECT_EQ_WAIT(kNumMessages,
+ receiving_client()->data_observer()->received_message_count(),
+ kMaxWaitMs);
+
+ // Sort and compare to make sure none of the messages were corrupted.
+ std::vector<std::string> initializing_client_received_messages =
+ initializing_client()->data_observer()->messages();
+ std::vector<std::string> receiving_client_received_messages =
+ receiving_client()->data_observer()->messages();
+ std::sort(sent_messages.begin(), sent_messages.end());
+ std::sort(initializing_client_received_messages.begin(),
+ initializing_client_received_messages.end());
+ std::sort(receiving_client_received_messages.begin(),
+ receiving_client_received_messages.end());
+ EXPECT_EQ(sent_messages, initializing_client_received_messages);
+ EXPECT_EQ(sent_messages, receiving_client_received_messages);
+
+ receiving_client()->data_channel()->Close();
+ EXPECT_TRUE_WAIT(!initializing_client()->data_observer()->IsOpen(),
+ kMaxWaitMs);
+ EXPECT_TRUE_WAIT(!receiving_client()->data_observer()->IsOpen(), kMaxWaitMs);
+}
+
// This test sets up a call between two parties and creates a data channel.
// The test tests that received data is buffered unless an observer has been
// registered.
« no previous file with comments | « no previous file | webrtc/api/test/mockpeerconnectionobservers.h » ('j') | webrtc/media/sctp/sctpdataengine.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698