| Index: blimp/net/blimp_message_output_buffer_unittest.cc | 
| diff --git a/blimp/net/blimp_message_output_buffer_unittest.cc b/blimp/net/blimp_message_output_buffer_unittest.cc | 
| deleted file mode 100644 | 
| index 6bb1cba154a3d4db83213fe307c1fbef285b71d3..0000000000000000000000000000000000000000 | 
| --- a/blimp/net/blimp_message_output_buffer_unittest.cc | 
| +++ /dev/null | 
| @@ -1,263 +0,0 @@ | 
| -// Copyright 2015 The Chromium Authors. All rights reserved. | 
| -// Use of this source code is governed by a BSD-style license that can be | 
| -// found in the LICENSE file. | 
| - | 
| -#include "blimp/net/blimp_message_output_buffer.h" | 
| - | 
| -#include "base/callback_helpers.h" | 
| -#include "base/logging.h" | 
| -#include "base/memory/ptr_util.h" | 
| -#include "base/message_loop/message_loop.h" | 
| -#include "blimp/common/proto/blimp_message.pb.h" | 
| -#include "blimp/net/test_common.h" | 
| -#include "net/base/net_errors.h" | 
| -#include "net/base/test_completion_callback.h" | 
| -#include "testing/gmock/include/gmock/gmock.h" | 
| -#include "testing/gtest/include/gtest/gtest.h" | 
| - | 
| -using testing::_; | 
| -using testing::InvokeArgument; | 
| -using testing::Ref; | 
| -using testing::Return; | 
| -using testing::SaveArg; | 
| - | 
| -namespace blimp { | 
| -namespace { | 
| - | 
| -class BlimpMessageOutputBufferTest : public testing::Test { | 
| - public: | 
| -  BlimpMessageOutputBufferTest() {} | 
| - | 
| -  void SetUp() override { | 
| -    input_msg_.mutable_input(); | 
| -    input_msg_.set_message_id(1); | 
| -    compositor_msg_.mutable_compositor(); | 
| -    compositor_msg_.set_message_id(2); | 
| - | 
| -    // Buffer should only have space for two unacknowledged messages | 
| -    // (with message IDs). | 
| -    ASSERT_EQ(input_msg_.ByteSize(), compositor_msg_.ByteSize()); | 
| -    buffer_.reset(new BlimpMessageOutputBuffer(2 * input_msg_.GetCachedSize())); | 
| -  } | 
| - | 
| - protected: | 
| -  void AddOutputExpectation(const BlimpMessage& msg) { | 
| -    EXPECT_CALL(output_processor_, MockableProcessMessage(EqualsProto(msg), _)) | 
| -        .WillOnce(SaveArg<1>(&captured_cb_)) | 
| -        .RetiresOnSaturation(); | 
| -  } | 
| - | 
| -  BlimpMessage WithMessageId(const BlimpMessage& message, int64_t message_id) { | 
| -    BlimpMessage output = message; | 
| -    output.set_message_id(message_id); | 
| -    return output; | 
| -  } | 
| - | 
| -  BlimpMessage input_msg_; | 
| -  BlimpMessage compositor_msg_; | 
| - | 
| -  base::MessageLoop message_loop_; | 
| -  net::CompletionCallback captured_cb_; | 
| -  MockBlimpMessageProcessor output_processor_; | 
| -  std::unique_ptr<BlimpMessageOutputBuffer> buffer_; | 
| -  testing::InSequence s; | 
| -}; | 
| - | 
| -// Verify batched writes and acknowledgements. | 
| -TEST_F(BlimpMessageOutputBufferTest, SeparatelyBufferWriteAck) { | 
| -  net::TestCompletionCallback complete_cb_1; | 
| -  net::TestCompletionCallback complete_cb_2; | 
| - | 
| -  AddOutputExpectation(input_msg_); | 
| -  AddOutputExpectation(compositor_msg_); | 
| - | 
| -  // Accumulate two messages. | 
| -  buffer_->ProcessMessage(base::WrapUnique(new BlimpMessage(input_msg_)), | 
| -                          complete_cb_1.callback()); | 
| -  buffer_->ProcessMessage(base::WrapUnique(new BlimpMessage(compositor_msg_)), | 
| -                          complete_cb_2.callback()); | 
| -  ASSERT_EQ(2, buffer_->GetBufferByteSizeForTest()); | 
| - | 
| -  // Write two messages. | 
| -  ASSERT_TRUE(captured_cb_.is_null()); | 
| -  buffer_->SetOutputProcessor(&output_processor_); | 
| -  ASSERT_FALSE(captured_cb_.is_null()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::OK); | 
| -  ASSERT_EQ(2, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(1, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::OK); | 
| -  ASSERT_EQ(2, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(2, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| - | 
| -  // Both messages are acknowledged by separate checkpoints. | 
| -  buffer_->OnMessageCheckpoint(1); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(1, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  EXPECT_EQ(net::OK, complete_cb_1.WaitForResult()); | 
| -  buffer_->OnMessageCheckpoint(2); | 
| -  ASSERT_EQ(0, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(0, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  EXPECT_EQ(net::OK, complete_cb_2.WaitForResult()); | 
| -} | 
| - | 
| -// Verify buffer writes from an empty state. | 
| -TEST_F(BlimpMessageOutputBufferTest, WritesFromEmptyBuffer) { | 
| -  net::TestCompletionCallback complete_cb_1; | 
| -  net::TestCompletionCallback complete_cb_2; | 
| - | 
| -  AddOutputExpectation(input_msg_); | 
| -  AddOutputExpectation(compositor_msg_); | 
| - | 
| -  ASSERT_TRUE(captured_cb_.is_null()); | 
| -  buffer_->SetOutputProcessor(&output_processor_); | 
| - | 
| -  // Message #0 is buffered, sent, acknowledged. | 
| -  buffer_->ProcessMessage(base::WrapUnique(new BlimpMessage(input_msg_)), | 
| -                          complete_cb_1.callback()); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_FALSE(captured_cb_.is_null()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::OK); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(1, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  buffer_->OnMessageCheckpoint(1); | 
| -  ASSERT_EQ(0, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(0, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| - | 
| -  buffer_->ProcessMessage(base::WrapUnique(new BlimpMessage(compositor_msg_)), | 
| -                          complete_cb_2.callback()); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_FALSE(captured_cb_.is_null()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::OK); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(1, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  buffer_->OnMessageCheckpoint(2); | 
| -  ASSERT_EQ(0, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(0, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -} | 
| - | 
| -// Verify that a single checkpoint can be used to acknowledge two writes. | 
| -TEST_F(BlimpMessageOutputBufferTest, SharedCheckpoint) { | 
| -  net::TestCompletionCallback complete_cb_1; | 
| -  net::TestCompletionCallback complete_cb_2; | 
| - | 
| -  AddOutputExpectation(input_msg_); | 
| -  AddOutputExpectation(compositor_msg_); | 
| - | 
| -  // Message #1 is written but unacknowledged. | 
| -  buffer_->ProcessMessage(base::WrapUnique(new BlimpMessage(input_msg_)), | 
| -                          complete_cb_1.callback()); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_TRUE(captured_cb_.is_null()); | 
| -  buffer_->SetOutputProcessor(&output_processor_); | 
| -  ASSERT_FALSE(captured_cb_.is_null()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::OK); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(1, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| - | 
| -  // Message #2 is written but unacknowledged. | 
| -  buffer_->ProcessMessage(base::WrapUnique(new BlimpMessage(compositor_msg_)), | 
| -                          complete_cb_2.callback()); | 
| -  ASSERT_EQ(2, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_FALSE(captured_cb_.is_null()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::OK); | 
| -  ASSERT_TRUE(captured_cb_.is_null()); | 
| -  ASSERT_EQ(2, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(2, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| - | 
| -  // Both messages are acknowledged in one checkpoint. | 
| -  buffer_->OnMessageCheckpoint(2); | 
| -  ASSERT_EQ(0, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(0, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  EXPECT_EQ(net::OK, complete_cb_1.WaitForResult()); | 
| -  EXPECT_EQ(net::OK, complete_cb_2.WaitForResult()); | 
| -} | 
| - | 
| -// Verify that messages that fail to write are kept in a pending write state. | 
| -TEST_F(BlimpMessageOutputBufferTest, WriteError) { | 
| -  net::TestCompletionCallback complete_cb_1; | 
| -  net::TestCompletionCallback complete_cb_2; | 
| - | 
| -  AddOutputExpectation(input_msg_); | 
| -  AddOutputExpectation(input_msg_); | 
| - | 
| -  // Accumulate two messages. | 
| -  buffer_->ProcessMessage(base::WrapUnique(new BlimpMessage(input_msg_)), | 
| -                          complete_cb_1.callback()); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| - | 
| -  // First write attempt, which fails. | 
| -  ASSERT_TRUE(captured_cb_.is_null()); | 
| -  buffer_->SetOutputProcessor(&output_processor_); | 
| -  ASSERT_FALSE(captured_cb_.is_null()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::ERR_FAILED); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(0, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| - | 
| -  // Simulate disconnect. | 
| -  buffer_->SetOutputProcessor(nullptr); | 
| - | 
| -  // Reconnect. Should immediately try to write the contents of the buffer. | 
| -  buffer_->SetOutputProcessor(&output_processor_); | 
| -  ASSERT_FALSE(captured_cb_.is_null()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::OK); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(1, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  buffer_->OnMessageCheckpoint(1); | 
| -  ASSERT_EQ(0, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(0, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  EXPECT_EQ(net::OK, complete_cb_1.WaitForResult()); | 
| -} | 
| - | 
| -// Verify that unacknowledged messages can be moved back to a pending write | 
| -// state (recovery after a lost connection.) | 
| -TEST_F(BlimpMessageOutputBufferTest, MessageRetransmit) { | 
| -  net::TestCompletionCallback complete_cb_1; | 
| -  net::TestCompletionCallback complete_cb_2; | 
| - | 
| -  AddOutputExpectation(input_msg_); | 
| -  AddOutputExpectation(compositor_msg_); | 
| -  AddOutputExpectation(compositor_msg_);  // Retransmitted message. | 
| - | 
| -  // Accumulate two messages. | 
| -  buffer_->ProcessMessage(base::WrapUnique(new BlimpMessage(input_msg_)), | 
| -                          complete_cb_1.callback()); | 
| -  buffer_->ProcessMessage(base::WrapUnique(new BlimpMessage(compositor_msg_)), | 
| -                          complete_cb_2.callback()); | 
| -  ASSERT_EQ(2, buffer_->GetBufferByteSizeForTest()); | 
| - | 
| -  // Write two messages. | 
| -  ASSERT_TRUE(captured_cb_.is_null()); | 
| -  buffer_->SetOutputProcessor(&output_processor_); | 
| -  ASSERT_FALSE(captured_cb_.is_null()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::OK); | 
| -  ASSERT_EQ(2, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(1, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::OK); | 
| -  ASSERT_EQ(2, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(2, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| - | 
| -  // Simulate disconnect & reconnect. | 
| -  buffer_->SetOutputProcessor(nullptr); | 
| -  buffer_->SetOutputProcessor(&output_processor_); | 
| - | 
| -  // Remote end indicates that it only received message #0. | 
| -  // Message #1 should be moved from an unacknowledged state to a pending write | 
| -  // state. | 
| -  ASSERT_TRUE(captured_cb_.is_null()); | 
| -  buffer_->OnMessageCheckpoint(1); | 
| -  buffer_->RetransmitBufferedMessages(); | 
| -  ASSERT_FALSE(captured_cb_.is_null()); | 
| -  ASSERT_EQ(1, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(0, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  base::ResetAndReturn(&captured_cb_).Run(net::OK); | 
| -  ASSERT_EQ(1, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| - | 
| -  // Remote end acknowledges #1, buffer should be empty. | 
| -  buffer_->OnMessageCheckpoint(2); | 
| -  ASSERT_EQ(0, buffer_->GetBufferByteSizeForTest()); | 
| -  ASSERT_EQ(0, buffer_->GetUnacknowledgedMessageCountForTest()); | 
| -  EXPECT_EQ(net::OK, complete_cb_2.WaitForResult()); | 
| -} | 
| - | 
| -}  // namespace | 
| -}  // namespace blimp | 
|  |