| Index: talk/app/webrtc/datachannel_unittest.cc
|
| diff --git a/talk/app/webrtc/datachannel_unittest.cc b/talk/app/webrtc/datachannel_unittest.cc
|
| index bc4f81c09f7e121519798112b4cf252dd54d038f..1408a97e578094bee69171824f36744a6d4e019d 100644
|
| --- a/talk/app/webrtc/datachannel_unittest.cc
|
| +++ b/talk/app/webrtc/datachannel_unittest.cc
|
| @@ -35,12 +35,19 @@ using webrtc::DataChannel;
|
| class FakeDataChannelObserver : public webrtc::DataChannelObserver {
|
| public:
|
| FakeDataChannelObserver()
|
| - : messages_received_(0), on_state_change_count_(0) {}
|
| + : messages_received_(0),
|
| + on_state_change_count_(0),
|
| + on_buffered_amount_change_count_(0) {
|
| +}
|
|
|
| void OnStateChange() {
|
| ++on_state_change_count_;
|
| }
|
|
|
| + void OnBufferedAmountChange(uint64 previous_amount) {
|
| + ++on_buffered_amount_change_count_;
|
| + }
|
| +
|
| void OnMessage(const webrtc::DataBuffer& buffer) {
|
| ++messages_received_;
|
| }
|
| @@ -53,13 +60,22 @@ class FakeDataChannelObserver : public webrtc::DataChannelObserver {
|
| on_state_change_count_ = 0;
|
| }
|
|
|
| + void ResetOnBufferedAmountChangeCount() {
|
| + on_buffered_amount_change_count_ = 0;
|
| + }
|
| +
|
| size_t on_state_change_count() const {
|
| return on_state_change_count_;
|
| }
|
|
|
| + size_t on_buffered_amount_change_count() const {
|
| + return on_buffered_amount_change_count_;
|
| + }
|
| +
|
| private:
|
| size_t messages_received_;
|
| size_t on_state_change_count_;
|
| + size_t on_buffered_amount_change_count_;
|
| };
|
|
|
| class SctpDataChannelTest : public testing::Test {
|
| @@ -133,11 +149,13 @@ TEST_F(SctpDataChannelTest, StateTransition) {
|
| // Tests that DataChannel::buffered_amount() is correct after the channel is
|
| // blocked.
|
| TEST_F(SctpDataChannelTest, BufferedAmountWhenBlocked) {
|
| + AddObserver();
|
| SetChannelReady();
|
| webrtc::DataBuffer buffer("abcd");
|
| EXPECT_TRUE(webrtc_data_channel_->Send(buffer));
|
|
|
| EXPECT_EQ(0U, webrtc_data_channel_->buffered_amount());
|
| + EXPECT_EQ(0U, observer_->on_buffered_amount_change_count());
|
|
|
| provider_.set_send_blocked(true);
|
|
|
| @@ -147,37 +165,46 @@ TEST_F(SctpDataChannelTest, BufferedAmountWhenBlocked) {
|
| }
|
| EXPECT_EQ(buffer.data.size() * number_of_packets,
|
| webrtc_data_channel_->buffered_amount());
|
| + EXPECT_EQ(number_of_packets, observer_->on_buffered_amount_change_count());
|
| }
|
|
|
| // Tests that the queued data are sent when the channel transitions from blocked
|
| // to unblocked.
|
| TEST_F(SctpDataChannelTest, QueuedDataSentWhenUnblocked) {
|
| + AddObserver();
|
| SetChannelReady();
|
| webrtc::DataBuffer buffer("abcd");
|
| provider_.set_send_blocked(true);
|
| EXPECT_TRUE(webrtc_data_channel_->Send(buffer));
|
|
|
| + EXPECT_EQ(1U, observer_->on_buffered_amount_change_count());
|
| +
|
| provider_.set_send_blocked(false);
|
| SetChannelReady();
|
| EXPECT_EQ(0U, webrtc_data_channel_->buffered_amount());
|
| + EXPECT_EQ(2U, observer_->on_buffered_amount_change_count());
|
| }
|
|
|
| // Tests that no crash when the channel is blocked right away while trying to
|
| // send queued data.
|
| TEST_F(SctpDataChannelTest, BlockedWhenSendQueuedDataNoCrash) {
|
| + AddObserver();
|
| SetChannelReady();
|
| webrtc::DataBuffer buffer("abcd");
|
| provider_.set_send_blocked(true);
|
| EXPECT_TRUE(webrtc_data_channel_->Send(buffer));
|
| + EXPECT_EQ(1U, observer_->on_buffered_amount_change_count());
|
|
|
| // Set channel ready while it is still blocked.
|
| SetChannelReady();
|
| EXPECT_EQ(buffer.size(), webrtc_data_channel_->buffered_amount());
|
| + EXPECT_EQ(1U, observer_->on_buffered_amount_change_count());
|
|
|
| // Unblock the channel to send queued data again, there should be no crash.
|
| provider_.set_send_blocked(false);
|
| SetChannelReady();
|
| EXPECT_EQ(0U, webrtc_data_channel_->buffered_amount());
|
| + EXPECT_EQ(2U, observer_->on_buffered_amount_change_count());
|
| }
|
|
|
| // Tests that the queued control message is sent when channel is ready.
|
|
|