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 "remoting/protocol/connection_tester.h" | 5 #include "remoting/protocol/connection_tester.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "net/base/io_buffer.h" | 9 #include "net/base/io_buffer.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
11 #include "net/socket/stream_socket.h" | 11 #include "remoting/protocol/p2p_datagram_socket.h" |
| 12 #include "remoting/protocol/p2p_stream_socket.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
13 | 14 |
14 namespace remoting { | 15 namespace remoting { |
15 namespace protocol { | 16 namespace protocol { |
16 | 17 |
17 StreamConnectionTester::StreamConnectionTester(net::StreamSocket* client_socket, | 18 StreamConnectionTester::StreamConnectionTester(P2PStreamSocket* client_socket, |
18 net::StreamSocket* host_socket, | 19 P2PStreamSocket* host_socket, |
19 int message_size, | 20 int message_size, |
20 int message_count) | 21 int message_count) |
21 : message_loop_(base::MessageLoop::current()), | 22 : message_loop_(base::MessageLoop::current()), |
22 host_socket_(host_socket), | 23 host_socket_(host_socket), |
23 client_socket_(client_socket), | 24 client_socket_(client_socket), |
24 message_size_(message_size), | 25 message_size_(message_size), |
25 test_data_size_(message_size * message_count), | 26 test_data_size_(message_size * message_count), |
26 done_(false), | 27 done_(false), |
27 write_errors_(0), | 28 write_errors_(0), |
28 read_errors_(0) { | 29 read_errors_(0) { |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 read_errors_++; | 121 read_errors_++; |
121 Done(); | 122 Done(); |
122 } else if (result > 0) { | 123 } else if (result > 0) { |
123 // Allocate memory for the next read. | 124 // Allocate memory for the next read. |
124 input_buffer_->set_offset(input_buffer_->offset() + result); | 125 input_buffer_->set_offset(input_buffer_->offset() + result); |
125 if (input_buffer_->offset() == test_data_size_) | 126 if (input_buffer_->offset() == test_data_size_) |
126 Done(); | 127 Done(); |
127 } | 128 } |
128 } | 129 } |
129 | 130 |
130 DatagramConnectionTester::DatagramConnectionTester(net::Socket* client_socket, | 131 DatagramConnectionTester::DatagramConnectionTester( |
131 net::Socket* host_socket, | 132 P2PDatagramSocket* client_socket, |
132 int message_size, | 133 P2PDatagramSocket* host_socket, |
133 int message_count, | 134 int message_size, |
134 int delay_ms) | 135 int message_count, |
| 136 int delay_ms) |
135 : message_loop_(base::MessageLoop::current()), | 137 : message_loop_(base::MessageLoop::current()), |
136 host_socket_(host_socket), | 138 host_socket_(host_socket), |
137 client_socket_(client_socket), | 139 client_socket_(client_socket), |
138 message_size_(message_size), | 140 message_size_(message_size), |
139 message_count_(message_count), | 141 message_count_(message_count), |
140 delay_ms_(delay_ms), | 142 delay_ms_(delay_ms), |
141 done_(false), | 143 done_(false), |
142 write_errors_(0), | 144 write_errors_(0), |
143 read_errors_(0), | 145 read_errors_(0), |
144 packets_sent_(0), | 146 packets_sent_(0), |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 } | 181 } |
180 | 182 |
181 scoped_refptr<net::IOBuffer> packet(new net::IOBuffer(message_size_)); | 183 scoped_refptr<net::IOBuffer> packet(new net::IOBuffer(message_size_)); |
182 for (int i = 0; i < message_size_; ++i) { | 184 for (int i = 0; i < message_size_; ++i) { |
183 packet->data()[i] = static_cast<char>(i); | 185 packet->data()[i] = static_cast<char>(i); |
184 } | 186 } |
185 sent_packets_[packets_sent_] = packet; | 187 sent_packets_[packets_sent_] = packet; |
186 // Put index of this packet in the beginning of the packet body. | 188 // Put index of this packet in the beginning of the packet body. |
187 memcpy(packet->data(), &packets_sent_, sizeof(packets_sent_)); | 189 memcpy(packet->data(), &packets_sent_, sizeof(packets_sent_)); |
188 | 190 |
189 int result = client_socket_->Write( | 191 int result = client_socket_->Send( |
190 packet.get(), | 192 packet.get(), message_size_, |
191 message_size_, | |
192 base::Bind(&DatagramConnectionTester::OnWritten, base::Unretained(this))); | 193 base::Bind(&DatagramConnectionTester::OnWritten, base::Unretained(this))); |
193 HandleWriteResult(result); | 194 HandleWriteResult(result); |
194 } | 195 } |
195 | 196 |
196 void DatagramConnectionTester::OnWritten(int result) { | 197 void DatagramConnectionTester::OnWritten(int result) { |
197 HandleWriteResult(result); | 198 HandleWriteResult(result); |
198 } | 199 } |
199 | 200 |
200 void DatagramConnectionTester::HandleWriteResult(int result) { | 201 void DatagramConnectionTester::HandleWriteResult(int result) { |
201 if (result <= 0 && result != net::ERR_IO_PENDING) { | 202 if (result <= 0 && result != net::ERR_IO_PENDING) { |
202 LOG(ERROR) << "Received error " << result << " when trying to write"; | 203 LOG(ERROR) << "Received error " << result << " when trying to write"; |
203 write_errors_++; | 204 write_errors_++; |
204 Done(); | 205 Done(); |
205 } else if (result > 0) { | 206 } else if (result > 0) { |
206 EXPECT_EQ(message_size_, result); | 207 EXPECT_EQ(message_size_, result); |
207 packets_sent_++; | 208 packets_sent_++; |
208 message_loop_->PostDelayedTask( | 209 message_loop_->PostDelayedTask( |
209 FROM_HERE, | 210 FROM_HERE, |
210 base::Bind(&DatagramConnectionTester::DoWrite, base::Unretained(this)), | 211 base::Bind(&DatagramConnectionTester::DoWrite, base::Unretained(this)), |
211 base::TimeDelta::FromMilliseconds(delay_ms_)); | 212 base::TimeDelta::FromMilliseconds(delay_ms_)); |
212 } | 213 } |
213 } | 214 } |
214 | 215 |
215 void DatagramConnectionTester::DoRead() { | 216 void DatagramConnectionTester::DoRead() { |
216 int result = 1; | 217 int result = 1; |
217 while (result > 0) { | 218 while (result > 0) { |
218 int kReadSize = message_size_ * 2; | 219 int kReadSize = message_size_ * 2; |
219 read_buffer_ = new net::IOBuffer(kReadSize); | 220 read_buffer_ = new net::IOBuffer(kReadSize); |
220 | 221 |
221 result = host_socket_->Read( | 222 result = host_socket_->Recv( |
222 read_buffer_.get(), | 223 read_buffer_.get(), kReadSize, |
223 kReadSize, | |
224 base::Bind(&DatagramConnectionTester::OnRead, base::Unretained(this))); | 224 base::Bind(&DatagramConnectionTester::OnRead, base::Unretained(this))); |
225 HandleReadResult(result); | 225 HandleReadResult(result); |
226 }; | 226 }; |
227 } | 227 } |
228 | 228 |
229 void DatagramConnectionTester::OnRead(int result) { | 229 void DatagramConnectionTester::OnRead(int result) { |
230 HandleReadResult(result); | 230 HandleReadResult(result); |
231 DoRead(); | 231 DoRead(); |
232 } | 232 } |
233 | 233 |
(...skipping 18 matching lines...) Expand all Loading... |
252 if (memcmp(read_buffer_->data(), sent_packets_[packet_id]->data(), | 252 if (memcmp(read_buffer_->data(), sent_packets_[packet_id]->data(), |
253 message_size_) != 0) | 253 message_size_) != 0) |
254 bad_packets_received_++; | 254 bad_packets_received_++; |
255 } | 255 } |
256 } | 256 } |
257 } | 257 } |
258 } | 258 } |
259 | 259 |
260 } // namespace protocol | 260 } // namespace protocol |
261 } // namespace remoting | 261 } // namespace remoting |
OLD | NEW |