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

Side by Side Diff: chrome/browser/extensions/api/socket/tcp_socket_unittest.cc

Issue 10827390: Implement chrome.socket.bind/listen/accept for TCP server socket. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix tests Created 8 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
11 #include "net/base/io_buffer.h" 11 #include "net/base/io_buffer.h"
12 #include "net/base/net_errors.h" 12 #include "net/base/net_errors.h"
13 #include "net/base/rand_callback.h" 13 #include "net/base/rand_callback.h"
14 #include "net/socket/tcp_client_socket.h" 14 #include "net/socket/tcp_client_socket.h"
15 #include "net/socket/tcp_server_socket.h"
15 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
16 17
17 using testing::_; 18 using testing::_;
18 using testing::DoAll; 19 using testing::DoAll;
19 using testing::Return; 20 using testing::Return;
20 using testing::SaveArg; 21 using testing::SaveArg;
21 22
22 namespace extensions { 23 namespace extensions {
23 24
24 class MockTCPSocket : public net::TCPClientSocket { 25 class MockTCPSocket : public net::TCPClientSocket {
25 public: 26 public:
26 explicit MockTCPSocket(const net::AddressList& address_list) 27 explicit MockTCPSocket(const net::AddressList& address_list)
27 : net::TCPClientSocket(address_list, NULL, net::NetLog::Source()) { 28 : net::TCPClientSocket(address_list, NULL, net::NetLog::Source()) {
28 } 29 }
29 30
30 MOCK_METHOD3(Read, int(net::IOBuffer* buf, int buf_len, 31 MOCK_METHOD3(Read, int(net::IOBuffer* buf, int buf_len,
31 const net::CompletionCallback& callback)); 32 const net::CompletionCallback& callback));
32 MOCK_METHOD3(Write, int(net::IOBuffer* buf, int buf_len, 33 MOCK_METHOD3(Write, int(net::IOBuffer* buf, int buf_len,
33 const net::CompletionCallback& callback)); 34 const net::CompletionCallback& callback));
34 MOCK_METHOD2(SetKeepAlive, bool(bool enable, int delay)); 35 MOCK_METHOD2(SetKeepAlive, bool(bool enable, int delay));
35 MOCK_METHOD1(SetNoDelay, bool(bool no_delay)); 36 MOCK_METHOD1(SetNoDelay, bool(bool no_delay));
36 virtual bool IsConnected() const OVERRIDE { 37 virtual bool IsConnected() const OVERRIDE {
37 return true; 38 return true;
38 } 39 }
39 40
40 private: 41 private:
41 DISALLOW_COPY_AND_ASSIGN(MockTCPSocket); 42 DISALLOW_COPY_AND_ASSIGN(MockTCPSocket);
42 }; 43 };
43 44
45 class MockTCPServerSocket : public net::TCPServerSocket {
46 public:
47 explicit MockTCPServerSocket()
48 : net::TCPServerSocket(NULL, net::NetLog::Source()) {
49 }
50 MOCK_METHOD2(Listen, int(const net::IPEndPoint& address, int backlog));
51 MOCK_METHOD2(Accept, int(scoped_ptr<net::StreamSocket>* socket,
52 const net::CompletionCallback& callback));
53
54 private:
55 DISALLOW_COPY_AND_ASSIGN(MockTCPServerSocket);
56 };
57
44 class MockApiResourceEventNotifier : public ApiResourceEventNotifier { 58 class MockApiResourceEventNotifier : public ApiResourceEventNotifier {
45 public: 59 public:
46 MockApiResourceEventNotifier(const std::string& owner_extension_id) 60 explicit MockApiResourceEventNotifier(const std::string& owner_extension_id)
47 : ApiResourceEventNotifier(NULL, NULL, 61 : ApiResourceEventNotifier(NULL, NULL,
48 owner_extension_id, 62 owner_extension_id,
49 0, GURL()) {} 63 0, GURL()) {}
50 64
51 MOCK_METHOD2(OnReadComplete, void(int result_code, 65 MOCK_METHOD2(OnReadComplete, void(int result_code,
52 const std::string& message)); 66 const std::string& message));
53 MOCK_METHOD1(OnWriteComplete, void(int result_code)); 67 MOCK_METHOD1(OnWriteComplete, void(int result_code));
54 68
55 protected: 69 protected:
56 virtual ~MockApiResourceEventNotifier() {} 70 virtual ~MockApiResourceEventNotifier() {}
57 }; 71 };
58 72
59 class CompleteHandler { 73 class CompleteHandler {
60 public: 74 public:
61 CompleteHandler() {} 75 CompleteHandler() {}
62 MOCK_METHOD1(OnComplete, void(int result_code)); 76 MOCK_METHOD1(OnComplete, void(int result_code));
63 MOCK_METHOD2(OnReadComplete, void(int result_code, 77 MOCK_METHOD2(OnReadComplete, void(int result_code,
64 scoped_refptr<net::IOBuffer> io_buffer)); 78 scoped_refptr<net::IOBuffer> io_buffer));
79 MOCK_METHOD2(OnAccept, void(int, net::TCPClientSocket*));
65 private: 80 private:
66 DISALLOW_COPY_AND_ASSIGN(CompleteHandler); 81 DISALLOW_COPY_AND_ASSIGN(CompleteHandler);
67 }; 82 };
68 83
69 const std::string FAKE_ID = "abcdefghijklmnopqrst"; 84 const std::string FAKE_ID = "abcdefghijklmnopqrst";
70 85
71 TEST(SocketTest, TestTCPSocketRead) { 86 TEST(SocketTest, TestTCPSocketRead) {
72 net::AddressList address_list; 87 net::AddressList address_list;
73 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list); 88 MockTCPSocket* tcp_client_socket = new MockTCPSocket(address_list);
74 ApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier( 89 ApiResourceEventNotifier* notifier = new MockApiResourceEventNotifier(
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 EXPECT_CALL(*tcp_client_socket, SetKeepAlive(_, _)) 235 EXPECT_CALL(*tcp_client_socket, SetKeepAlive(_, _))
221 .WillOnce(testing::DoAll(SaveArg<0>(&enable), 236 .WillOnce(testing::DoAll(SaveArg<0>(&enable),
222 SaveArg<1>(&delay), 237 SaveArg<1>(&delay),
223 Return(false))); 238 Return(false)));
224 result = socket->SetKeepAlive(false, 0); 239 result = socket->SetKeepAlive(false, 0);
225 EXPECT_FALSE(result); 240 EXPECT_FALSE(result);
226 EXPECT_FALSE(enable); 241 EXPECT_FALSE(enable);
227 EXPECT_EQ(0, delay); 242 EXPECT_EQ(0, delay);
228 } 243 }
229 244
245 TEST(SocketTest, TestTCPServerSocketListenAccept) {
246 MockTCPServerSocket* tcp_server_socket = new MockTCPServerSocket();
247 CompleteHandler handler;
248
249 scoped_ptr<TCPSocket> socket(TCPSocket::CreateServerSocketForTesting(
250 tcp_server_socket, FAKE_ID));
251
252 EXPECT_CALL(*tcp_server_socket, Accept(_, _)).Times(1);
253 EXPECT_CALL(*tcp_server_socket, Listen(_, _)).Times(1);
254 EXPECT_CALL(handler, OnAccept(_, _));
255
256 std::string err_msg;
257 EXPECT_EQ(net::OK, socket->Listen("127.0.0.1", 9999, 10, &err_msg));
258 socket->Accept(base::Bind(&CompleteHandler::OnAccept,
259 base::Unretained(&handler)));
260 }
261
230 } // namespace extensions 262 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/socket/tcp_socket.cc ('k') | chrome/common/extensions/api/socket.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698