Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/api/socket/tcp_socket.h" | 5 #include "chrome/browser/extensions/api/socket/tcp_socket.h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "chrome/browser/extensions/api/api_resource_event_notifier.h" | 8 #include "chrome/browser/extensions/api/api_resource_event_notifier.h" |
| 9 #include "net/base/address_list.h" | 9 #include "net/base/address_list.h" |
| 10 #include "net/base/completion_callback.h" | 10 #include "net/base/completion_callback.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 66 }; | 66 }; |
| 67 | 67 |
| 68 | 68 |
| 69 TEST(SocketTest, TestTCPSocketRead) { | 69 TEST(SocketTest, TestTCPSocketRead) { |
| 70 net::AddressList address_list; | 70 net::AddressList address_list; |
| 71 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); | 71 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); |
| 72 ApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); | 72 ApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); |
| 73 CompleteHandler handler; | 73 CompleteHandler handler; |
| 74 | 74 |
| 75 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( | 75 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( |
| 76 tcp_client_socket, notifier)); | 76 tcp_client_socket, "fake_id", notifier)); |
|
Mihai Parparita -not on Chrome
2012/09/11 07:18:19
Extension IDs are always 20 characters long, other
| |
| 77 | 77 |
| 78 EXPECT_CALL(*tcp_client_socket, Read(_, _, _)) | 78 EXPECT_CALL(*tcp_client_socket, Read(_, _, _)) |
| 79 .Times(1); | 79 .Times(1); |
| 80 EXPECT_CALL(handler, OnReadComplete(_, _)) | 80 EXPECT_CALL(handler, OnReadComplete(_, _)) |
| 81 .Times(1); | 81 .Times(1); |
| 82 | 82 |
| 83 const int count = 512; | 83 const int count = 512; |
| 84 socket->Read(count, base::Bind(&CompleteHandler::OnReadComplete, | 84 socket->Read(count, base::Bind(&CompleteHandler::OnReadComplete, |
| 85 base::Unretained(&handler))); | 85 base::Unretained(&handler))); |
| 86 } | 86 } |
| 87 | 87 |
| 88 TEST(SocketTest, TestTCPSocketWrite) { | 88 TEST(SocketTest, TestTCPSocketWrite) { |
| 89 net::AddressList address_list; | 89 net::AddressList address_list; |
| 90 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); | 90 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); |
| 91 ApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); | 91 ApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); |
| 92 CompleteHandler handler; | 92 CompleteHandler handler; |
| 93 | 93 |
| 94 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( | 94 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( |
| 95 tcp_client_socket, notifier)); | 95 tcp_client_socket, "fake_id", notifier)); |
| 96 | 96 |
| 97 net::CompletionCallback callback; | 97 net::CompletionCallback callback; |
| 98 EXPECT_CALL(*tcp_client_socket, Write(_, _, _)) | 98 EXPECT_CALL(*tcp_client_socket, Write(_, _, _)) |
| 99 .Times(2) | 99 .Times(2) |
| 100 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback), | 100 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback), |
| 101 Return(128))); | 101 Return(128))); |
| 102 EXPECT_CALL(handler, OnComplete(_)) | 102 EXPECT_CALL(handler, OnComplete(_)) |
| 103 .Times(1); | 103 .Times(1); |
| 104 | 104 |
| 105 scoped_refptr<net::IOBufferWithSize> io_buffer( | 105 scoped_refptr<net::IOBufferWithSize> io_buffer( |
| 106 new net::IOBufferWithSize(256)); | 106 new net::IOBufferWithSize(256)); |
| 107 socket->Write(io_buffer.get(), io_buffer->size(), | 107 socket->Write(io_buffer.get(), io_buffer->size(), |
| 108 base::Bind(&CompleteHandler::OnComplete, base::Unretained(&handler))); | 108 base::Bind(&CompleteHandler::OnComplete, base::Unretained(&handler))); |
| 109 } | 109 } |
| 110 | 110 |
| 111 TEST(SocketTest, TestTCPSocketBlockedWrite) { | 111 TEST(SocketTest, TestTCPSocketBlockedWrite) { |
| 112 net::AddressList address_list; | 112 net::AddressList address_list; |
| 113 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); | 113 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); |
| 114 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); | 114 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); |
| 115 CompleteHandler handler; | 115 CompleteHandler handler; |
| 116 | 116 |
| 117 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( | 117 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( |
| 118 tcp_client_socket, notifier)); | 118 tcp_client_socket, "fake_id", notifier)); |
| 119 | 119 |
| 120 net::CompletionCallback callback; | 120 net::CompletionCallback callback; |
| 121 EXPECT_CALL(*tcp_client_socket, Write(_, _, _)) | 121 EXPECT_CALL(*tcp_client_socket, Write(_, _, _)) |
| 122 .Times(2) | 122 .Times(2) |
| 123 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback), | 123 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback), |
| 124 Return(net::ERR_IO_PENDING))); | 124 Return(net::ERR_IO_PENDING))); |
| 125 scoped_refptr<net::IOBufferWithSize> io_buffer(new net::IOBufferWithSize(42)); | 125 scoped_refptr<net::IOBufferWithSize> io_buffer(new net::IOBufferWithSize(42)); |
| 126 socket->Write(io_buffer.get(), io_buffer->size(), | 126 socket->Write(io_buffer.get(), io_buffer->size(), |
| 127 base::Bind(&CompleteHandler::OnComplete, base::Unretained(&handler))); | 127 base::Bind(&CompleteHandler::OnComplete, base::Unretained(&handler))); |
| 128 | 128 |
| 129 // Good. Original call came back unable to complete. Now pretend the socket | 129 // Good. Original call came back unable to complete. Now pretend the socket |
| 130 // finished, and confirm that we passed the error back. | 130 // finished, and confirm that we passed the error back. |
| 131 EXPECT_CALL(handler, OnComplete(42)) | 131 EXPECT_CALL(handler, OnComplete(42)) |
| 132 .Times(1); | 132 .Times(1); |
| 133 callback.Run(40); | 133 callback.Run(40); |
| 134 callback.Run(2); | 134 callback.Run(2); |
| 135 } | 135 } |
| 136 | 136 |
| 137 TEST(SocketTest, TestTCPSocketBlockedWriteReentry) { | 137 TEST(SocketTest, TestTCPSocketBlockedWriteReentry) { |
| 138 net::AddressList address_list; | 138 net::AddressList address_list; |
| 139 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); | 139 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); |
| 140 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); | 140 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); |
| 141 CompleteHandler handlers[5]; | 141 CompleteHandler handlers[5]; |
| 142 | 142 |
| 143 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( | 143 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( |
| 144 tcp_client_socket, notifier)); | 144 tcp_client_socket, "fake_id", notifier)); |
| 145 | 145 |
| 146 net::CompletionCallback callback; | 146 net::CompletionCallback callback; |
| 147 EXPECT_CALL(*tcp_client_socket, Write(_, _, _)) | 147 EXPECT_CALL(*tcp_client_socket, Write(_, _, _)) |
| 148 .Times(5) | 148 .Times(5) |
| 149 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback), | 149 .WillRepeatedly(testing::DoAll(SaveArg<2>(&callback), |
| 150 Return(net::ERR_IO_PENDING))); | 150 Return(net::ERR_IO_PENDING))); |
| 151 scoped_refptr<net::IOBufferWithSize> io_buffers[5]; | 151 scoped_refptr<net::IOBufferWithSize> io_buffers[5]; |
| 152 int i; | 152 int i; |
| 153 for (i = 0; i < 5; i++) { | 153 for (i = 0; i < 5; i++) { |
| 154 io_buffers[i] = new net::IOBufferWithSize(128 + i * 50); | 154 io_buffers[i] = new net::IOBufferWithSize(128 + i * 50); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 166 callback.Run(128 + i * 50); | 166 callback.Run(128 + i * 50); |
| 167 } | 167 } |
| 168 } | 168 } |
| 169 | 169 |
| 170 TEST(SocketTest, TestTCPSocketSetNoDelay) { | 170 TEST(SocketTest, TestTCPSocketSetNoDelay) { |
| 171 net::AddressList address_list; | 171 net::AddressList address_list; |
| 172 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); | 172 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); |
| 173 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); | 173 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); |
| 174 | 174 |
| 175 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( | 175 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( |
| 176 tcp_client_socket, notifier)); | 176 tcp_client_socket, "fake_id", notifier)); |
| 177 | 177 |
| 178 bool no_delay = false; | 178 bool no_delay = false; |
| 179 EXPECT_CALL(*tcp_client_socket, SetNoDelay(_)) | 179 EXPECT_CALL(*tcp_client_socket, SetNoDelay(_)) |
| 180 .WillOnce(testing::DoAll(SaveArg<0>(&no_delay), Return(true))); | 180 .WillOnce(testing::DoAll(SaveArg<0>(&no_delay), Return(true))); |
| 181 int result = socket->SetNoDelay(true); | 181 int result = socket->SetNoDelay(true); |
| 182 EXPECT_TRUE(result); | 182 EXPECT_TRUE(result); |
| 183 EXPECT_TRUE(no_delay); | 183 EXPECT_TRUE(no_delay); |
| 184 | 184 |
| 185 EXPECT_CALL(*tcp_client_socket, SetNoDelay(_)) | 185 EXPECT_CALL(*tcp_client_socket, SetNoDelay(_)) |
| 186 .WillOnce(testing::DoAll(SaveArg<0>(&no_delay), Return(false))); | 186 .WillOnce(testing::DoAll(SaveArg<0>(&no_delay), Return(false))); |
| 187 | 187 |
| 188 result = socket->SetNoDelay(false); | 188 result = socket->SetNoDelay(false); |
| 189 EXPECT_FALSE(result); | 189 EXPECT_FALSE(result); |
| 190 EXPECT_FALSE(no_delay); | 190 EXPECT_FALSE(no_delay); |
| 191 } | 191 } |
| 192 | 192 |
| 193 TEST(SocketTest, TestTCPSocketSetKeepAlive) { | 193 TEST(SocketTest, TestTCPSocketSetKeepAlive) { |
| 194 net::AddressList address_list; | 194 net::AddressList address_list; |
| 195 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); | 195 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); |
| 196 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); | 196 MockApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(); |
| 197 | 197 |
| 198 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( | 198 scoped_ptr<TCPSocket> socket(TCPSocket::CreateSocketForTesting( |
| 199 tcp_client_socket, notifier)); | 199 tcp_client_socket, "fake_id", notifier)); |
| 200 | 200 |
| 201 bool enable = false; | 201 bool enable = false; |
| 202 int delay = 0; | 202 int delay = 0; |
| 203 EXPECT_CALL(*tcp_client_socket, SetKeepAlive(_, _)) | 203 EXPECT_CALL(*tcp_client_socket, SetKeepAlive(_, _)) |
| 204 .WillOnce(testing::DoAll(SaveArg<0>(&enable), | 204 .WillOnce(testing::DoAll(SaveArg<0>(&enable), |
| 205 SaveArg<1>(&delay), | 205 SaveArg<1>(&delay), |
| 206 Return(true))); | 206 Return(true))); |
| 207 int result = socket->SetKeepAlive(true, 4500); | 207 int result = socket->SetKeepAlive(true, 4500); |
| 208 EXPECT_TRUE(result); | 208 EXPECT_TRUE(result); |
| 209 EXPECT_TRUE(enable); | 209 EXPECT_TRUE(enable); |
| 210 EXPECT_EQ(4500, delay); | 210 EXPECT_EQ(4500, delay); |
| 211 | 211 |
| 212 EXPECT_CALL(*tcp_client_socket, SetKeepAlive(_, _)) | 212 EXPECT_CALL(*tcp_client_socket, SetKeepAlive(_, _)) |
| 213 .WillOnce(testing::DoAll(SaveArg<0>(&enable), | 213 .WillOnce(testing::DoAll(SaveArg<0>(&enable), |
| 214 SaveArg<1>(&delay), | 214 SaveArg<1>(&delay), |
| 215 Return(false))); | 215 Return(false))); |
| 216 result = socket->SetKeepAlive(false, 0); | 216 result = socket->SetKeepAlive(false, 0); |
| 217 EXPECT_FALSE(result); | 217 EXPECT_FALSE(result); |
| 218 EXPECT_FALSE(enable); | 218 EXPECT_FALSE(enable); |
| 219 EXPECT_EQ(0, delay); | 219 EXPECT_EQ(0, delay); |
| 220 } | 220 } |
| 221 | 221 |
| 222 } // namespace extensions | 222 } // namespace extensions |
| OLD | NEW |