Index: webrtc/api/datachannel_unittest.cc |
diff --git a/webrtc/api/datachannel_unittest.cc b/webrtc/api/datachannel_unittest.cc |
index e2a8eed638cbb2467b88aa9d10811c7bf6a21836..773e7523e6c7e8be85c6abd81f9c3a95df052a7b 100644 |
--- a/webrtc/api/datachannel_unittest.cc |
+++ b/webrtc/api/datachannel_unittest.cc |
@@ -195,6 +195,53 @@ TEST_F(SctpDataChannelTest, BlockedWhenSendQueuedDataNoCrash) { |
EXPECT_EQ(2U, observer_->on_buffered_amount_change_count()); |
} |
+// Tests that DataChannel::messages_sent() and DataChannel::bytes_sent() are |
+// correct, sending data both while unblocked and while blocked. |
+TEST_F(SctpDataChannelTest, VerifyMessagesAndBytesSent) { |
+ AddObserver(); |
+ SetChannelReady(); |
+ std::vector<webrtc::DataBuffer> buffers({ |
+ webrtc::DataBuffer("message 1"), |
+ webrtc::DataBuffer("msg 2"), |
+ webrtc::DataBuffer("message three"), |
+ webrtc::DataBuffer("quadra message"), |
+ webrtc::DataBuffer("fifthmsg"), |
+ webrtc::DataBuffer("message of the beast"), |
+ }); |
+ |
+ // Default values. |
+ EXPECT_EQ(0U, webrtc_data_channel_->messages_sent()); |
+ EXPECT_EQ(0U, webrtc_data_channel_->bytes_sent()); |
+ |
+ // Send three buffers while not blocked. |
+ provider_->set_send_blocked(false); |
+ EXPECT_TRUE(webrtc_data_channel_->Send(buffers[0])); |
+ EXPECT_TRUE(webrtc_data_channel_->Send(buffers[1])); |
+ EXPECT_TRUE(webrtc_data_channel_->Send(buffers[2])); |
+ size_t bytes_sent = buffers[0].size() + buffers[1].size() + buffers[2].size(); |
+ EXPECT_EQ_WAIT(0U, webrtc_data_channel_->buffered_amount(), kDefaultTimeout); |
+ EXPECT_EQ(3U, webrtc_data_channel_->messages_sent()); |
+ EXPECT_EQ(bytes_sent, webrtc_data_channel_->bytes_sent()); |
+ |
+ // Send three buffers while blocked, queuing the buffers. |
+ provider_->set_send_blocked(true); |
+ EXPECT_TRUE(webrtc_data_channel_->Send(buffers[3])); |
+ EXPECT_TRUE(webrtc_data_channel_->Send(buffers[4])); |
+ EXPECT_TRUE(webrtc_data_channel_->Send(buffers[5])); |
+ size_t bytes_queued = |
+ buffers[3].size() + buffers[4].size() + buffers[5].size(); |
+ EXPECT_EQ(bytes_queued, webrtc_data_channel_->buffered_amount()); |
+ EXPECT_EQ(3U, webrtc_data_channel_->messages_sent()); |
+ EXPECT_EQ(bytes_sent, webrtc_data_channel_->bytes_sent()); |
+ |
+ // Unblock and make sure everything was sent. |
+ provider_->set_send_blocked(false); |
+ EXPECT_EQ_WAIT(0U, webrtc_data_channel_->buffered_amount(), kDefaultTimeout); |
+ bytes_sent += bytes_queued; |
+ EXPECT_EQ(6U, webrtc_data_channel_->messages_sent()); |
+ EXPECT_EQ(bytes_sent, webrtc_data_channel_->bytes_sent()); |
+} |
+ |
// Tests that the queued control message is sent when channel is ready. |
TEST_F(SctpDataChannelTest, OpenMessageSent) { |
// Initially the id is unassigned. |
@@ -374,6 +421,53 @@ TEST_F(SctpDataChannelTest, NoMsgSentIfNegotiatedAndNotFromOpenMsg) { |
EXPECT_EQ(0U, provider_->last_send_data_params().ssrc); |
} |
+// Tests that DataChannel::messages_received() and DataChannel::bytes_received() |
+// are correct, receiving data both while not open and while open. |
+TEST_F(SctpDataChannelTest, VerifyMessagesAndBytesReceived) { |
+ AddObserver(); |
+ std::vector<webrtc::DataBuffer> buffers({ |
+ webrtc::DataBuffer("message 1"), |
+ webrtc::DataBuffer("msg 2"), |
+ webrtc::DataBuffer("message three"), |
+ webrtc::DataBuffer("quadra message"), |
+ webrtc::DataBuffer("fifthmsg"), |
+ webrtc::DataBuffer("message of the beast"), |
+ }); |
+ |
+ webrtc_data_channel_->SetSctpSid(1); |
+ cricket::ReceiveDataParams params; |
+ params.ssrc = 1; |
+ |
+ // Default values. |
+ EXPECT_EQ(0U, webrtc_data_channel_->messages_received()); |
+ EXPECT_EQ(0U, webrtc_data_channel_->bytes_received()); |
+ |
+ // Receive three buffers while data channel isn't open. |
+ webrtc_data_channel_->OnDataReceived(nullptr, params, buffers[0].data); |
+ webrtc_data_channel_->OnDataReceived(nullptr, params, buffers[1].data); |
+ webrtc_data_channel_->OnDataReceived(nullptr, params, buffers[2].data); |
+ EXPECT_EQ(0U, observer_->messages_received()); |
+ EXPECT_EQ(0U, webrtc_data_channel_->messages_received()); |
+ EXPECT_EQ(0U, webrtc_data_channel_->bytes_received()); |
+ |
+ // Open channel and make sure everything was received. |
+ SetChannelReady(); |
+ size_t bytes_received = |
+ buffers[0].size() + buffers[1].size() + buffers[2].size(); |
+ EXPECT_EQ(3U, observer_->messages_received()); |
+ EXPECT_EQ(3U, webrtc_data_channel_->messages_received()); |
+ EXPECT_EQ(bytes_received, webrtc_data_channel_->bytes_received()); |
+ |
+ // Receive three buffers while open. |
+ webrtc_data_channel_->OnDataReceived(nullptr, params, buffers[3].data); |
+ webrtc_data_channel_->OnDataReceived(nullptr, params, buffers[4].data); |
+ webrtc_data_channel_->OnDataReceived(nullptr, params, buffers[5].data); |
+ bytes_received += buffers[3].size() + buffers[4].size() + buffers[5].size(); |
+ EXPECT_EQ(6U, observer_->messages_received()); |
+ EXPECT_EQ(6U, webrtc_data_channel_->messages_received()); |
+ EXPECT_EQ(bytes_received, webrtc_data_channel_->bytes_received()); |
+} |
+ |
// Tests that OPEN_ACK message is sent if the datachannel is created from an |
// OPEN message. |
TEST_F(SctpDataChannelTest, OpenAckSentIfCreatedFromOpenMessage) { |