| 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) { | 
|  |