Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2666)

Unified Diff: chrome/browser/extensions/api/socket/tcp_socket_unittest.cc

Issue 10310170: Improve socket.write() to make sure all data will be sent out. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix compile error on Mac Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/socket/tcp_socket_unittest.cc
diff --git a/chrome/browser/extensions/api/socket/tcp_socket_unittest.cc b/chrome/browser/extensions/api/socket/tcp_socket_unittest.cc
index 5052e66fa333c9ffd63b0281ed02a3bb0897c1fe..7066d6bc519f984b2e1fe84d5f3b1054ab8405a9 100644
--- a/chrome/browser/extensions/api/socket/tcp_socket_unittest.cc
+++ b/chrome/browser/extensions/api/socket/tcp_socket_unittest.cc
@@ -92,8 +92,11 @@ TEST(SocketTest, TestTCPSocketWrite) {
scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting(
tcp_client_socket, notifier));
+ net::CompletionCallback callback;
EXPECT_CALL(*tcp_client_socket, Write(_, _, _))
- .Times(1);
+ .Times(2)
+ .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback),
+ Return(128)));
EXPECT_CALL(handler, OnComplete(_))
.Times(1);
@@ -114,11 +117,10 @@ TEST(SocketTest, TestTCPSocketBlockedWrite) {
net::CompletionCallback callback;
EXPECT_CALL(*tcp_client_socket, Write(_, _, _))
- .Times(1)
- .WillOnce(testing::DoAll(SaveArg<2>(&callback),
- Return(net::ERR_IO_PENDING)));
- scoped_refptr<net::IOBufferWithSize> io_buffer(new net::IOBufferWithSize(
- 1));
+ .Times(2)
+ .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback),
+ Return(net::ERR_IO_PENDING)));
+ scoped_refptr<net::IOBufferWithSize> io_buffer(new net::IOBufferWithSize(42));
socket->Write(io_buffer.get(), io_buffer->size(),
base::Bind(&CompleteHandler::OnComplete, base::Unretained(&handler)));
@@ -126,7 +128,41 @@ TEST(SocketTest, TestTCPSocketBlockedWrite) {
// finished, and confirm that we passed the error back.
EXPECT_CALL(handler, OnComplete(42))
.Times(1);
- callback.Run(42);
+ callback.Run(40);
+ callback.Run(2);
+}
+
+TEST(SocketTest, TestTCPSocketBlockedWriteReentry) {
+ net::AddressList address_list;
+ MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list);
+ MockAPIResourceEventNotifier* notifier = new MockAPIResourceEventNotifier();
+ CompleteHandler handlers[5];
+
+ scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting(
+ tcp_client_socket, notifier));
+
+ net::CompletionCallback callback;
+ EXPECT_CALL(*tcp_client_socket, Write(_, _, _))
+ .Times(5)
+ .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback),
+ Return(net::ERR_IO_PENDING)));
+ scoped_refptr<net::IOBufferWithSize> io_buffers[5];
+ int i;
+ for (i = 0; i < 5; i++) {
+ io_buffers[i] = new net::IOBufferWithSize(128 + i * 50);
+ scoped_refptr<net::IOBufferWithSize> io_buffer1(
+ new net::IOBufferWithSize(42));
+ socket->Write(io_buffers[i].get(), io_buffers[i]->size(),
+ base::Bind(&CompleteHandler::OnComplete,
+ base::Unretained(&handlers[i])));
+
+ EXPECT_CALL(handlers[i], OnComplete(io_buffers[i]->size()))
+ .Times(1);
+ }
+
+ for (i = 0; i < 5; i++) {
+ callback.Run(128 + i * 50);
+ }
}
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/socket/tcp_socket.cc ('k') | chrome/browser/extensions/api/socket/udp_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698