OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "net/base/net_errors.h" | 7 #include "net/base/net_errors.h" |
8 #include "net/dns/mock_mdns_socket_factory.h" | 8 #include "net/dns/mock_mdns_socket_factory.h" |
9 | 9 |
10 using testing::_; | 10 using testing::_; |
11 using testing::Invoke; | 11 using testing::Invoke; |
12 | 12 |
13 namespace net { | 13 namespace net { |
14 | 14 |
15 MockMDnsDatagramServerSocket::MockMDnsDatagramServerSocket( | 15 MockMDnsDatagramServerSocket::MockMDnsDatagramServerSocket( |
16 AddressFamily address_family) { | 16 AddressFamily address_family) { |
17 local_address_ = GetMDnsIPEndPoint(address_family); | 17 local_address_ = GetMDnsIPEndPoint(address_family); |
18 } | 18 } |
19 | 19 |
20 MockMDnsDatagramServerSocket::~MockMDnsDatagramServerSocket() { | 20 MockMDnsDatagramServerSocket::~MockMDnsDatagramServerSocket() { |
21 } | 21 } |
22 | 22 |
23 int MockMDnsDatagramServerSocket::SendTo(IOBuffer* buf, int buf_len, | 23 int MockMDnsDatagramServerSocket::SendTo(IOBuffer* buf, |
| 24 int buf_len, |
24 const IPEndPoint& address, | 25 const IPEndPoint& address, |
25 const CompletionCallback& callback) { | 26 const CompletionCallback& callback) { |
26 return SendToInternal(std::string(buf->data(), buf_len), address.ToString(), | 27 return SendToInternal( |
27 callback); | 28 std::string(buf->data(), buf_len), address.ToString(), callback); |
28 } | 29 } |
29 | 30 |
30 int MockMDnsDatagramServerSocket::GetLocalAddress(IPEndPoint* address) const { | 31 int MockMDnsDatagramServerSocket::GetLocalAddress(IPEndPoint* address) const { |
31 *address = local_address_; | 32 *address = local_address_; |
32 return OK; | 33 return OK; |
33 } | 34 } |
34 | 35 |
35 void MockMDnsDatagramServerSocket::SetResponsePacket( | 36 void MockMDnsDatagramServerSocket::SetResponsePacket( |
36 std::string response_packet) { | 37 std::string response_packet) { |
37 response_packet_ = response_packet; | 38 response_packet_ = response_packet; |
38 } | 39 } |
39 | 40 |
40 int MockMDnsDatagramServerSocket::HandleRecvNow( | 41 int MockMDnsDatagramServerSocket::HandleRecvNow( |
41 IOBuffer* buffer, int size, IPEndPoint* address, | 42 IOBuffer* buffer, |
| 43 int size, |
| 44 IPEndPoint* address, |
42 const CompletionCallback& callback) { | 45 const CompletionCallback& callback) { |
43 int size_returned = | 46 int size_returned = |
44 std::min(response_packet_.size(), static_cast<size_t>(size)); | 47 std::min(response_packet_.size(), static_cast<size_t>(size)); |
45 memcpy(buffer->data(), response_packet_.data(), size_returned); | 48 memcpy(buffer->data(), response_packet_.data(), size_returned); |
46 return size_returned; | 49 return size_returned; |
47 } | 50 } |
48 | 51 |
49 int MockMDnsDatagramServerSocket::HandleRecvLater( | 52 int MockMDnsDatagramServerSocket::HandleRecvLater( |
50 IOBuffer* buffer, int size, IPEndPoint* address, | 53 IOBuffer* buffer, |
| 54 int size, |
| 55 IPEndPoint* address, |
51 const CompletionCallback& callback) { | 56 const CompletionCallback& callback) { |
52 int rv = HandleRecvNow(buffer, size, address, callback); | 57 int rv = HandleRecvNow(buffer, size, address, callback); |
53 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback, rv)); | 58 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback, rv)); |
54 return ERR_IO_PENDING; | 59 return ERR_IO_PENDING; |
55 } | 60 } |
56 | 61 |
57 MockMDnsSocketFactory::MockMDnsSocketFactory() { | 62 MockMDnsSocketFactory::MockMDnsSocketFactory() { |
58 } | 63 } |
59 | 64 |
60 MockMDnsSocketFactory::~MockMDnsSocketFactory() { | 65 MockMDnsSocketFactory::~MockMDnsSocketFactory() { |
61 } | 66 } |
62 | 67 |
63 void MockMDnsSocketFactory::CreateSockets( | 68 void MockMDnsSocketFactory::CreateSockets( |
64 ScopedVector<DatagramServerSocket>* sockets) { | 69 ScopedVector<DatagramServerSocket>* sockets) { |
65 CreateSocket(ADDRESS_FAMILY_IPV4, sockets); | 70 CreateSocket(ADDRESS_FAMILY_IPV4, sockets); |
66 CreateSocket(ADDRESS_FAMILY_IPV6, sockets); | 71 CreateSocket(ADDRESS_FAMILY_IPV6, sockets); |
67 } | 72 } |
68 | 73 |
69 void MockMDnsSocketFactory::CreateSocket( | 74 void MockMDnsSocketFactory::CreateSocket( |
70 AddressFamily address_family, | 75 AddressFamily address_family, |
71 ScopedVector<DatagramServerSocket>* sockets) { | 76 ScopedVector<DatagramServerSocket>* sockets) { |
72 scoped_ptr<testing::NiceMock<MockMDnsDatagramServerSocket> > new_socket( | 77 scoped_ptr<testing::NiceMock<MockMDnsDatagramServerSocket> > new_socket( |
73 new testing::NiceMock<MockMDnsDatagramServerSocket>(address_family)); | 78 new testing::NiceMock<MockMDnsDatagramServerSocket>(address_family)); |
74 | 79 |
75 ON_CALL(*new_socket, SendToInternal(_, _, _)) | 80 ON_CALL(*new_socket, SendToInternal(_, _, _)) |
76 .WillByDefault(Invoke( | 81 .WillByDefault(Invoke(this, &MockMDnsSocketFactory::SendToInternal)); |
77 this, | |
78 &MockMDnsSocketFactory::SendToInternal)); | |
79 | 82 |
80 ON_CALL(*new_socket, RecvFrom(_, _, _, _)) | 83 ON_CALL(*new_socket, RecvFrom(_, _, _, _)) |
81 .WillByDefault(Invoke( | 84 .WillByDefault(Invoke(this, &MockMDnsSocketFactory::RecvFromInternal)); |
82 this, | |
83 &MockMDnsSocketFactory::RecvFromInternal)); | |
84 | 85 |
85 sockets->push_back(new_socket.release()); | 86 sockets->push_back(new_socket.release()); |
86 } | 87 } |
87 | 88 |
88 void MockMDnsSocketFactory::SimulateReceive(const uint8* packet, int size) { | 89 void MockMDnsSocketFactory::SimulateReceive(const uint8* packet, int size) { |
89 DCHECK(recv_buffer_size_ >= size); | 90 DCHECK(recv_buffer_size_ >= size); |
90 DCHECK(recv_buffer_.get()); | 91 DCHECK(recv_buffer_.get()); |
91 DCHECK(!recv_callback_.is_null()); | 92 DCHECK(!recv_callback_.is_null()); |
92 | 93 |
93 memcpy(recv_buffer_->data(), packet, size); | 94 memcpy(recv_buffer_->data(), packet, size); |
94 CompletionCallback recv_callback = recv_callback_; | 95 CompletionCallback recv_callback = recv_callback_; |
95 recv_callback_.Reset(); | 96 recv_callback_.Reset(); |
96 recv_callback.Run(size); | 97 recv_callback.Run(size); |
97 } | 98 } |
98 | 99 |
99 int MockMDnsSocketFactory::RecvFromInternal( | 100 int MockMDnsSocketFactory::RecvFromInternal( |
100 IOBuffer* buffer, int size, | 101 IOBuffer* buffer, |
| 102 int size, |
101 IPEndPoint* address, | 103 IPEndPoint* address, |
102 const CompletionCallback& callback) { | 104 const CompletionCallback& callback) { |
103 recv_buffer_ = buffer; | 105 recv_buffer_ = buffer; |
104 recv_buffer_size_ = size; | 106 recv_buffer_size_ = size; |
105 recv_callback_ = callback; | 107 recv_callback_ = callback; |
106 return ERR_IO_PENDING; | 108 return ERR_IO_PENDING; |
107 } | 109 } |
108 | 110 |
109 int MockMDnsSocketFactory::SendToInternal( | 111 int MockMDnsSocketFactory::SendToInternal(const std::string& packet, |
110 const std::string& packet, const std::string& address, | 112 const std::string& address, |
111 const CompletionCallback& callback) { | 113 const CompletionCallback& callback) { |
112 OnSendTo(packet); | 114 OnSendTo(packet); |
113 return packet.size(); | 115 return packet.size(); |
114 } | 116 } |
115 | 117 |
116 } // namespace net | 118 } // namespace net |
OLD | NEW |