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

Side by Side Diff: jingle/glue/pseudotcp_adapter_unittest.cc

Issue 14307021: jingle: Use base::MessageLoop. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 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 "jingle/glue/pseudotcp_adapter.h" 5 #include "jingle/glue/pseudotcp_adapter.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 read_buffer_ = buf; 129 read_buffer_ = buf;
130 read_buffer_size_ = buf_len; 130 read_buffer_size_ = buf_len;
131 return net::ERR_IO_PENDING; 131 return net::ERR_IO_PENDING;
132 } 132 }
133 } 133 }
134 134
135 virtual int Write(net::IOBuffer* buf, int buf_len, 135 virtual int Write(net::IOBuffer* buf, int buf_len,
136 const net::CompletionCallback& callback) OVERRIDE { 136 const net::CompletionCallback& callback) OVERRIDE {
137 DCHECK(buf); 137 DCHECK(buf);
138 if (peer_socket_) { 138 if (peer_socket_) {
139 MessageLoop::current()->PostDelayedTask( 139 base::MessageLoop::current()->PostDelayedTask(
140 FROM_HERE, 140 FROM_HERE,
141 base::Bind(&FakeSocket::AppendInputPacket, 141 base::Bind(&FakeSocket::AppendInputPacket,
142 base::Unretained(peer_socket_), 142 base::Unretained(peer_socket_),
143 std::vector<char>(buf->data(), buf->data() + buf_len)), 143 std::vector<char>(buf->data(), buf->data() + buf_len)),
144 base::TimeDelta::FromMilliseconds(latency_ms_)); 144 base::TimeDelta::FromMilliseconds(latency_ms_));
145 } 145 }
146 146
147 return buf_len; 147 return buf_len;
148 } 148 }
149 149
(...skipping 13 matching lines...) Expand all
163 163
164 std::deque<std::vector<char> > incoming_packets_; 164 std::deque<std::vector<char> > incoming_packets_;
165 165
166 FakeSocket* peer_socket_; 166 FakeSocket* peer_socket_;
167 RateLimiter* rate_limiter_; 167 RateLimiter* rate_limiter_;
168 int latency_ms_; 168 int latency_ms_;
169 }; 169 };
170 170
171 class TCPChannelTester : public base::RefCountedThreadSafe<TCPChannelTester> { 171 class TCPChannelTester : public base::RefCountedThreadSafe<TCPChannelTester> {
172 public: 172 public:
173 TCPChannelTester(MessageLoop* message_loop, 173 TCPChannelTester(base::MessageLoop* message_loop,
174 net::Socket* client_socket, 174 net::Socket* client_socket,
175 net::Socket* host_socket) 175 net::Socket* host_socket)
176 : message_loop_(message_loop), 176 : message_loop_(message_loop),
177 host_socket_(host_socket), 177 host_socket_(host_socket),
178 client_socket_(client_socket), 178 client_socket_(client_socket),
179 done_(false), 179 done_(false),
180 write_errors_(0), 180 write_errors_(0),
181 read_errors_(0) { 181 read_errors_(0) {}
182 }
183 182
184 void Start() { 183 void Start() {
185 message_loop_->PostTask( 184 message_loop_->PostTask(
186 FROM_HERE, base::Bind(&TCPChannelTester::DoStart, this)); 185 FROM_HERE, base::Bind(&TCPChannelTester::DoStart, this));
187 } 186 }
188 187
189 void CheckResults() { 188 void CheckResults() {
190 EXPECT_EQ(0, write_errors_); 189 EXPECT_EQ(0, write_errors_);
191 EXPECT_EQ(0, read_errors_); 190 EXPECT_EQ(0, read_errors_);
192 191
193 ASSERT_EQ(kTestDataSize + kMessageSize, input_buffer_->capacity()); 192 ASSERT_EQ(kTestDataSize + kMessageSize, input_buffer_->capacity());
194 193
195 output_buffer_->SetOffset(0); 194 output_buffer_->SetOffset(0);
196 ASSERT_EQ(kTestDataSize, output_buffer_->size()); 195 ASSERT_EQ(kTestDataSize, output_buffer_->size());
197 196
198 EXPECT_EQ(0, memcmp(output_buffer_->data(), 197 EXPECT_EQ(0, memcmp(output_buffer_->data(),
199 input_buffer_->StartOfBuffer(), kTestDataSize)); 198 input_buffer_->StartOfBuffer(), kTestDataSize));
200 } 199 }
201 200
202 protected: 201 protected:
203 virtual ~TCPChannelTester() {} 202 virtual ~TCPChannelTester() {}
204 203
205 void Done() { 204 void Done() {
206 done_ = true; 205 done_ = true;
207 message_loop_->PostTask(FROM_HERE, MessageLoop::QuitClosure()); 206 message_loop_->PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
208 } 207 }
209 208
210 void DoStart() { 209 void DoStart() {
211 InitBuffers(); 210 InitBuffers();
212 DoRead(); 211 DoRead();
213 DoWrite(); 212 DoWrite();
214 } 213 }
215 214
216 void InitBuffers() { 215 void InitBuffers() {
217 output_buffer_ = new net::DrainableIOBuffer( 216 output_buffer_ = new net::DrainableIOBuffer(
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 // Allocate memory for the next read. 280 // Allocate memory for the next read.
282 input_buffer_->SetCapacity(input_buffer_->capacity() + result); 281 input_buffer_->SetCapacity(input_buffer_->capacity() + result);
283 if (input_buffer_->capacity() == kTestDataSize + kMessageSize) 282 if (input_buffer_->capacity() == kTestDataSize + kMessageSize)
284 Done(); 283 Done();
285 } 284 }
286 } 285 }
287 286
288 private: 287 private:
289 friend class base::RefCountedThreadSafe<TCPChannelTester>; 288 friend class base::RefCountedThreadSafe<TCPChannelTester>;
290 289
291 MessageLoop* message_loop_; 290 base::MessageLoop* message_loop_;
292 net::Socket* host_socket_; 291 net::Socket* host_socket_;
293 net::Socket* client_socket_; 292 net::Socket* client_socket_;
294 bool done_; 293 bool done_;
295 294
296 scoped_refptr<net::DrainableIOBuffer> output_buffer_; 295 scoped_refptr<net::DrainableIOBuffer> output_buffer_;
297 scoped_refptr<net::GrowableIOBuffer> input_buffer_; 296 scoped_refptr<net::GrowableIOBuffer> input_buffer_;
298 297
299 int write_errors_; 298 int write_errors_;
300 int read_errors_; 299 int read_errors_;
301 }; 300 };
(...skipping 11 matching lines...) Expand all
313 312
314 host_pseudotcp_.reset(new PseudoTcpAdapter(host_socket_)); 313 host_pseudotcp_.reset(new PseudoTcpAdapter(host_socket_));
315 client_pseudotcp_.reset(new PseudoTcpAdapter(client_socket_)); 314 client_pseudotcp_.reset(new PseudoTcpAdapter(client_socket_));
316 } 315 }
317 316
318 FakeSocket* host_socket_; 317 FakeSocket* host_socket_;
319 FakeSocket* client_socket_; 318 FakeSocket* client_socket_;
320 319
321 scoped_ptr<PseudoTcpAdapter> host_pseudotcp_; 320 scoped_ptr<PseudoTcpAdapter> host_pseudotcp_;
322 scoped_ptr<PseudoTcpAdapter> client_pseudotcp_; 321 scoped_ptr<PseudoTcpAdapter> client_pseudotcp_;
323 MessageLoop message_loop_; 322 base::MessageLoop message_loop_;
324 }; 323 };
325 324
326 TEST_F(PseudoTcpAdapterTest, DataTransfer) { 325 TEST_F(PseudoTcpAdapterTest, DataTransfer) {
327 net::TestCompletionCallback host_connect_cb; 326 net::TestCompletionCallback host_connect_cb;
328 net::TestCompletionCallback client_connect_cb; 327 net::TestCompletionCallback client_connect_cb;
329 328
330 int rv1 = host_pseudotcp_->Connect(host_connect_cb.callback()); 329 int rv1 = host_pseudotcp_->Connect(host_connect_cb.callback());
331 int rv2 = client_pseudotcp_->Connect(client_connect_cb.callback()); 330 int rv2 = client_pseudotcp_->Connect(client_connect_cb.callback());
332 331
333 if (rv1 == net::ERR_IO_PENDING) 332 if (rv1 == net::ERR_IO_PENDING)
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 new TCPChannelTester(&message_loop_, host_pseudotcp_.get(), 375 new TCPChannelTester(&message_loop_, host_pseudotcp_.get(),
377 client_pseudotcp_.get()); 376 client_pseudotcp_.get());
378 377
379 tester->Start(); 378 tester->Start();
380 message_loop_.Run(); 379 message_loop_.Run();
381 tester->CheckResults(); 380 tester->CheckResults();
382 } 381 }
383 382
384 class DeleteOnConnected { 383 class DeleteOnConnected {
385 public: 384 public:
386 DeleteOnConnected(MessageLoop* message_loop, 385 DeleteOnConnected(base::MessageLoop* message_loop,
387 scoped_ptr<PseudoTcpAdapter>* adapter) 386 scoped_ptr<PseudoTcpAdapter>* adapter)
388 : message_loop_(message_loop), adapter_(adapter) {} 387 : message_loop_(message_loop), adapter_(adapter) {}
389 void OnConnected(int error) { 388 void OnConnected(int error) {
390 adapter_->reset(); 389 adapter_->reset();
391 message_loop_->PostTask(FROM_HERE, MessageLoop::QuitClosure()); 390 message_loop_->PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
392 } 391 }
393 MessageLoop* message_loop_; 392 base::MessageLoop* message_loop_;
394 scoped_ptr<PseudoTcpAdapter>* adapter_; 393 scoped_ptr<PseudoTcpAdapter>* adapter_;
395 }; 394 };
396 395
397 TEST_F(PseudoTcpAdapterTest, DeleteOnConnected) { 396 TEST_F(PseudoTcpAdapterTest, DeleteOnConnected) {
398 // This test verifies that deleting the adapter mid-callback doesn't lead 397 // This test verifies that deleting the adapter mid-callback doesn't lead
399 // to deleted structures being touched as the stack unrolls, so the failure 398 // to deleted structures being touched as the stack unrolls, so the failure
400 // mode is a crash rather than a normal test failure. 399 // mode is a crash rather than a normal test failure.
401 net::TestCompletionCallback client_connect_cb; 400 net::TestCompletionCallback client_connect_cb;
402 DeleteOnConnected host_delete(&message_loop_, &host_pseudotcp_); 401 DeleteOnConnected host_delete(&message_loop_, &host_pseudotcp_);
403 402
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 client_pseudotcp_.get()); 436 client_pseudotcp_.get());
438 437
439 tester->Start(); 438 tester->Start();
440 message_loop_.Run(); 439 message_loop_.Run();
441 tester->CheckResults(); 440 tester->CheckResults();
442 } 441 }
443 442
444 } // namespace 443 } // namespace
445 444
446 } // namespace jingle_glue 445 } // namespace jingle_glue
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698