Chromium Code Reviews| Index: blimp/net/tcp_transport_unittest.cc |
| diff --git a/blimp/net/tcp_transport_unittest.cc b/blimp/net/tcp_transport_unittest.cc |
| index a692fd880c9b70b0435163d6bc2b84fa470b0e09..b6c18e89f21023c34d70f13a8b384d5a314a4819 100644 |
| --- a/blimp/net/tcp_transport_unittest.cc |
| +++ b/blimp/net/tcp_transport_unittest.cc |
| @@ -28,27 +28,39 @@ namespace blimp { |
| namespace { |
| +// The length of |kPayload1| and |kPayload2| must be identical. |
|
CJ
2016/08/12 23:59:15
Perhaps add why they must be identical? It seems t
Kevin M
2016/08/15 17:35:09
You're right, it does seem arbitrary. I removed th
|
| +const char kPayload1[] = "foo"; |
| +const char kPayload2[] = "bar"; |
| + |
| // Integration test for TCPEngineTransport and TCPClientTransport. |
| class TCPTransportTest : public testing::Test { |
| protected: |
| - TCPTransportTest() { |
| - net::IPEndPoint local_address(net::IPAddress(127, 0, 0, 1), 0); |
| - engine_.reset(new TCPEngineTransport(local_address, nullptr)); |
| + TCPTransportTest() |
| + : local_address_(net::IPAddress(127, 0, 0, 1), 0), |
| + engine_(local_address_, nullptr), |
| + write_buffer_( |
| + new net::DrainableIOBuffer(new net::IOBuffer(arraysize(kPayload1)), |
| + arraysize(kPayload1))), |
| + read_buffer_(new net::GrowableIOBuffer) { |
| + read_buffer_->SetCapacity(arraysize(kPayload1)); |
| } |
| net::IPEndPoint GetLocalEndpoint() const { |
| net::IPEndPoint local_address; |
| - CHECK_EQ(net::OK, engine_->GetLocalAddress(&local_address)); |
| + CHECK_EQ(net::OK, engine_.GetLocalAddress(&local_address)); |
| return local_address; |
| } |
| base::MessageLoopForIO message_loop_; |
| - std::unique_ptr<TCPEngineTransport> engine_; |
| + net::IPEndPoint local_address_; |
| + TCPEngineTransport engine_; |
| + scoped_refptr<net::DrainableIOBuffer> write_buffer_; |
| + scoped_refptr<net::GrowableIOBuffer> read_buffer_; |
| }; |
| TEST_F(TCPTransportTest, Connect) { |
| net::TestCompletionCallback accept_callback; |
| - engine_->Connect(accept_callback.callback()); |
| + engine_.Connect(accept_callback.callback()); |
| net::TestCompletionCallback connect_callback; |
| TCPClientTransport client(GetLocalEndpoint(), nullptr); |
| @@ -56,90 +68,69 @@ TEST_F(TCPTransportTest, Connect) { |
| EXPECT_EQ(net::OK, connect_callback.WaitForResult()); |
| EXPECT_EQ(net::OK, accept_callback.WaitForResult()); |
| - EXPECT_TRUE(engine_->TakeConnection() != nullptr); |
| + EXPECT_NE(nullptr, client.TakeMessagePort()); |
| } |
| TEST_F(TCPTransportTest, TwoClientConnections) { |
| net::TestCompletionCallback accept_callback1; |
| - engine_->Connect(accept_callback1.callback()); |
| + engine_.Connect(accept_callback1.callback()); |
| net::TestCompletionCallback connect_callback1; |
| - TCPClientTransport client1(GetLocalEndpoint(), nullptr); |
| - client1.Connect(connect_callback1.callback()); |
| - |
| - net::TestCompletionCallback connect_callback2; |
| - TCPClientTransport client2(GetLocalEndpoint(), nullptr); |
| - client2.Connect(connect_callback2.callback()); |
| - |
| + TCPClientTransport client(GetLocalEndpoint(), nullptr); |
| + client.Connect(connect_callback1.callback()); |
| EXPECT_EQ(net::OK, connect_callback1.WaitForResult()); |
| EXPECT_EQ(net::OK, accept_callback1.WaitForResult()); |
| - EXPECT_TRUE(engine_->TakeConnection() != nullptr); |
| + EXPECT_NE(nullptr, engine_.TakeMessagePort()); |
| net::TestCompletionCallback accept_callback2; |
| - engine_->Connect(accept_callback2.callback()); |
| + engine_.Connect(accept_callback2.callback()); |
| + |
| + net::TestCompletionCallback connect_callback2; |
| + TCPClientTransport client2(GetLocalEndpoint(), nullptr); |
| + client2.Connect(connect_callback2.callback()); |
| EXPECT_EQ(net::OK, connect_callback2.WaitForResult()); |
| EXPECT_EQ(net::OK, accept_callback2.WaitForResult()); |
| - EXPECT_TRUE(engine_->TakeConnection() != nullptr); |
| + EXPECT_NE(nullptr, engine_.TakeMessagePort()); |
| } |
| TEST_F(TCPTransportTest, ExchangeMessages) { |
| // Start the Engine transport and connect a client to it. |
| net::TestCompletionCallback accept_callback; |
| - engine_->Connect(accept_callback.callback()); |
| - net::TestCompletionCallback client_connect_callback; |
| + engine_.Connect(accept_callback.callback()); |
| + net::TestCompletionCallback clientconnect_callback; |
|
CJ
2016/08/12 23:59:15
Is there a reason to remove the underscore?
Kevin M
2016/08/15 17:35:09
Looks like I typo'd. :\
Thanks, fixed!
|
| TCPClientTransport client(GetLocalEndpoint(), nullptr); |
| - client.Connect(client_connect_callback.callback()); |
| - EXPECT_EQ(net::OK, client_connect_callback.WaitForResult()); |
| + client.Connect(clientconnect_callback.callback()); |
| EXPECT_EQ(net::OK, accept_callback.WaitForResult()); |
| - |
| - // Expect the engine to get two messages from the client, and the client to |
| - // get one from the engine. |
| - MockBlimpMessageProcessor engine_incoming_processor; |
| - MockBlimpMessageProcessor client_incoming_processor; |
| - net::CompletionCallback engine_process_message_cb; |
| - std::unique_ptr<BlimpMessage> client_message1 = |
| - CreateStartConnectionMessage("", 0); |
| - int client_message1_size = client_message1->ByteSize(); |
| - std::unique_ptr<BlimpMessage> client_message2 = CreateCheckpointAckMessage(5); |
| - std::unique_ptr<BlimpMessage> engine_message = CreateCheckpointAckMessage(10); |
| - EXPECT_CALL(engine_incoming_processor, |
| - MockableProcessMessage(EqualsProto(*client_message1), _)) |
| - .WillOnce(SaveArg<1>(&engine_process_message_cb)); |
| - EXPECT_CALL(engine_incoming_processor, |
| - MockableProcessMessage(EqualsProto(*client_message2), _)) |
| - .Times(1); |
| - EXPECT_CALL(client_incoming_processor, |
| - MockableProcessMessage(EqualsProto(*engine_message), _)) |
| - .Times(1); |
| - |
| - // Attach the ends of the connection to our mock message-processors. |
| - std::unique_ptr<BlimpConnection> engine_connnection = |
| - engine_->TakeConnection(); |
| - std::unique_ptr<BlimpConnection> client_connnection = client.TakeConnection(); |
| - engine_connnection->SetIncomingMessageProcessor(&engine_incoming_processor); |
| - client_connnection->SetIncomingMessageProcessor(&client_incoming_processor); |
| - |
| - // Client sends the first message. |
| - net::TestCompletionCallback client_send_callback1; |
| - client_connnection->GetOutgoingMessageProcessor()->ProcessMessage( |
| - std::move(client_message1), client_send_callback1.callback()); |
| - EXPECT_EQ(net::OK, client_send_callback1.WaitForResult()); |
| - |
| - // Engine finishes processing the client message. |
| - EXPECT_FALSE(engine_process_message_cb.is_null()); |
| - engine_process_message_cb.Run(client_message1_size); |
| - |
| - // Engine sends one message. |
| - net::TestCompletionCallback engine_send_callback; |
| - engine_connnection->GetOutgoingMessageProcessor()->ProcessMessage( |
| - std::move(engine_message), engine_send_callback.callback()); |
| - EXPECT_EQ(net::OK, engine_send_callback.WaitForResult()); |
| - |
| - // Client sends the second message. |
| - net::TestCompletionCallback client_send_callback2; |
| - client_connnection->GetOutgoingMessageProcessor()->ProcessMessage( |
| - std::move(client_message2), client_send_callback2.callback()); |
| - EXPECT_EQ(net::OK, client_send_callback2.WaitForResult()); |
| + EXPECT_EQ(net::OK, clientconnect_callback.WaitForResult()); |
| + |
| + std::unique_ptr<MessagePort> engine_message_port = engine_.TakeMessagePort(); |
| + std::unique_ptr<MessagePort> clientmessage_port = client.TakeMessagePort(); |
|
CJ
2016/08/12 23:59:15
why are engine variables following the underscore
Kevin M
2016/08/15 17:35:09
"engine_" is a class member, which have trailing u
CJ
2016/08/15 18:17:42
I was more meaning the typo issue, since it was re
|
| + |
| + // Engine sends kPayload1 to client. |
| + net::TestCompletionCallback read_cb1; |
| + net::TestCompletionCallback write_cb1; |
| + memcpy(write_buffer_->data(), kPayload1, arraysize(kPayload1)); |
| + engine_message_port->writer()->WritePacket(write_buffer_, |
| + write_cb1.callback()); |
| + clientmessage_port->reader()->ReadPacket(read_buffer_, read_cb1.callback()); |
| + EXPECT_EQ(arraysize(kPayload1), |
| + static_cast<size_t>(read_cb1.WaitForResult())); |
| + EXPECT_EQ(net::OK, write_cb1.WaitForResult()); |
| + EXPECT_TRUE( |
| + BufferStartsWith(read_buffer_.get(), arraysize(kPayload1), kPayload1)); |
| + |
| + // Client sends kPayload2 to engine. |
| + net::TestCompletionCallback read_cb2; |
| + net::TestCompletionCallback write_cb2; |
| + memcpy(write_buffer_->data(), kPayload2, arraysize(kPayload2)); |
| + clientmessage_port->writer()->WritePacket(write_buffer_, |
| + write_cb2.callback()); |
| + engine_message_port->reader()->ReadPacket(read_buffer_, read_cb2.callback()); |
| + EXPECT_EQ(arraysize(kPayload2), |
| + static_cast<size_t>(read_cb2.WaitForResult())); |
| + EXPECT_EQ(net::OK, write_cb2.WaitForResult()); |
| + EXPECT_TRUE( |
| + BufferStartsWith(read_buffer_.get(), arraysize(kPayload2), kPayload2)); |
| } |
| } // namespace |