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

Side by Side Diff: net/quic/p2p/quic_p2p_session_test.cc

Issue 1273233002: Implement QuicChannel and QuicChannelFactory (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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
« no previous file with comments | « net/quic/p2p/quic_p2p_session.cc ('k') | net/quic/p2p/quic_p2p_stream.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "net/quic/p2p/quic_p2p_session.h" 5 #include "net/quic/p2p/quic_p2p_session.h"
6 6
7 #include "base/callback_helpers.h" 7 #include "base/callback_helpers.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 13 matching lines...) Expand all
24 24
25 namespace { 25 namespace {
26 26
27 const char kTestSharedKey[] = "Shared key exchanged out of bound."; 27 const char kTestSharedKey[] = "Shared key exchanged out of bound.";
28 28
29 class FakeP2PDatagramSocket : public Socket { 29 class FakeP2PDatagramSocket : public Socket {
30 public: 30 public:
31 FakeP2PDatagramSocket() : weak_factory_(this) {} 31 FakeP2PDatagramSocket() : weak_factory_(this) {}
32 ~FakeP2PDatagramSocket() override {} 32 ~FakeP2PDatagramSocket() override {}
33 33
34 base::WeakPtr<FakeP2PDatagramSocket> GetWeakPtr() {
35 return weak_factory_.GetWeakPtr();
36 }
37
34 void ConnectWith(FakeP2PDatagramSocket* peer_socket) { 38 void ConnectWith(FakeP2PDatagramSocket* peer_socket) {
35 peer_socket_ = peer_socket->weak_factory_.GetWeakPtr(); 39 peer_socket_ = peer_socket->GetWeakPtr();
36 peer_socket->peer_socket_ = weak_factory_.GetWeakPtr(); 40 peer_socket->peer_socket_ = GetWeakPtr();
37 } 41 }
38 42
39 void SetReadError(int error) { 43 void SetReadError(int error) {
40 read_error_ = error; 44 read_error_ = error;
41 if (!read_callback_.is_null()) { 45 if (!read_callback_.is_null()) {
42 base::ResetAndReturn(&read_callback_).Run(error); 46 base::ResetAndReturn(&read_callback_).Run(error);
43 } 47 }
44 } 48 }
45 49
46 void SetWriteError(int error) { write_error_ = error; } 50 void SetWriteError(int error) { write_error_ = error; }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 net::QuicRandom::GetInstance()) { 213 net::QuicRandom::GetInstance()) {
210 // Simulate out-of-bound config handshake. 214 // Simulate out-of-bound config handshake.
211 CryptoHandshakeMessage hello_message; 215 CryptoHandshakeMessage hello_message;
212 config_.ToHandshakeMessage(&hello_message); 216 config_.ToHandshakeMessage(&hello_message);
213 std::string error_detail; 217 std::string error_detail;
214 EXPECT_EQ(QUIC_NO_ERROR, 218 EXPECT_EQ(QUIC_NO_ERROR,
215 config_.ProcessPeerHello(hello_message, CLIENT, &error_detail)); 219 config_.ProcessPeerHello(hello_message, CLIENT, &error_detail));
216 } 220 }
217 221
218 void CreateSessions() { 222 void CreateSessions() {
219 socket1_ = new FakeP2PDatagramSocket(); 223 scoped_ptr<FakeP2PDatagramSocket> socket1(new FakeP2PDatagramSocket());
220 socket2_ = new FakeP2PDatagramSocket(); 224 scoped_ptr<FakeP2PDatagramSocket> socket2(new FakeP2PDatagramSocket());
221 socket1_->ConnectWith(socket2_); 225 socket1->ConnectWith(socket2.get());
226
227 socket1_ = socket1->GetWeakPtr();
228 socket2_ = socket2->GetWeakPtr();
222 229
223 QuicP2PCryptoConfig crypto_config(kTestSharedKey); 230 QuicP2PCryptoConfig crypto_config(kTestSharedKey);
224 231
225 session1_ = CreateP2PSession(make_scoped_ptr(socket1_), crypto_config, 232 session1_ =
226 Perspective::IS_SERVER); 233 CreateP2PSession(socket1.Pass(), crypto_config, Perspective::IS_SERVER);
227 session2_ = CreateP2PSession(make_scoped_ptr(socket2_), crypto_config, 234 session2_ =
228 Perspective::IS_CLIENT); 235 CreateP2PSession(socket2.Pass(), crypto_config, Perspective::IS_CLIENT);
229 } 236 }
230 237
231 scoped_ptr<QuicP2PSession> CreateP2PSession(scoped_ptr<Socket> socket, 238 scoped_ptr<QuicP2PSession> CreateP2PSession(scoped_ptr<Socket> socket,
232 QuicP2PCryptoConfig crypto_config, 239 QuicP2PCryptoConfig crypto_config,
233 Perspective perspective) { 240 Perspective perspective) {
234 DefaultPacketWriterFactory writer_factory(socket.get()); 241 DefaultPacketWriterFactory writer_factory(socket.get());
235 net::IPAddressNumber ip(net::kIPv4AddressSize, 0); 242 net::IPAddressNumber ip(net::kIPv4AddressSize, 0);
236 scoped_ptr<QuicConnection> quic_connection1( 243 scoped_ptr<QuicConnection> quic_connection1(
237 new QuicConnection(0, net::IPEndPoint(ip, 0), &quic_helper_, 244 new QuicConnection(0, net::IPEndPoint(ip, 0), &quic_helper_,
238 writer_factory, true /* owns_writer */, perspective, 245 writer_factory, true /* owns_writer */, perspective,
239 true /* is_secuire */, QuicSupportedVersions())); 246 true /* is_secuire */, QuicSupportedVersions()));
240 247
241 scoped_ptr<QuicP2PSession> result(new QuicP2PSession( 248 scoped_ptr<QuicP2PSession> result(new QuicP2PSession(
242 config_, crypto_config, quic_connection1.Pass(), socket.Pass())); 249 config_, crypto_config, quic_connection1.Pass(), socket.Pass()));
243 result->Initialize(); 250 result->Initialize();
244 return result.Pass(); 251 return result.Pass();
245 } 252 }
246 253
247 void TestStreamConnection(QuicP2PSession* from_session, 254 void TestStreamConnection(QuicP2PSession* from_session,
248 QuicP2PSession* to_session, 255 QuicP2PSession* to_session,
249 QuicStreamId expected_stream_id); 256 QuicStreamId expected_stream_id);
250 257
251 QuicClock quic_clock_; 258 QuicClock quic_clock_;
252 QuicConnectionHelper quic_helper_; 259 QuicConnectionHelper quic_helper_;
253 QuicConfig config_; 260 QuicConfig config_;
254 261
255 FakeP2PDatagramSocket* socket1_; 262 base::WeakPtr<FakeP2PDatagramSocket> socket1_;
256 scoped_ptr<QuicP2PSession> session1_; 263 scoped_ptr<QuicP2PSession> session1_;
257 264
258 FakeP2PDatagramSocket* socket2_; 265 base::WeakPtr<FakeP2PDatagramSocket> socket2_;
259 scoped_ptr<QuicP2PSession> session2_; 266 scoped_ptr<QuicP2PSession> session2_;
260 }; 267 };
261 268
262 void QuicP2PSessionTest::OnWriteResult(int result) { 269 void QuicP2PSessionTest::OnWriteResult(int result) {
263 EXPECT_EQ(OK, result); 270 EXPECT_EQ(OK, result);
264 } 271 }
265 272
266 void QuicP2PSessionTest::TestStreamConnection(QuicP2PSession* from_session, 273 void QuicP2PSessionTest::TestStreamConnection(QuicP2PSession* from_session,
267 QuicP2PSession* to_session, 274 QuicP2PSession* to_session,
268 QuicStreamId expected_stream_id) { 275 QuicStreamId expected_stream_id) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 TEST_F(QuicP2PSessionTest, ClientToServer) { 318 TEST_F(QuicP2PSessionTest, ClientToServer) {
312 CreateSessions(); 319 CreateSessions();
313 TestStreamConnection(session2_.get(), session1_.get(), 3); 320 TestStreamConnection(session2_.get(), session1_.get(), 3);
314 } 321 }
315 322
316 TEST_F(QuicP2PSessionTest, ServerToClient) { 323 TEST_F(QuicP2PSessionTest, ServerToClient) {
317 CreateSessions(); 324 CreateSessions();
318 TestStreamConnection(session1_.get(), session2_.get(), 2); 325 TestStreamConnection(session1_.get(), session2_.get(), 2);
319 } 326 }
320 327
328 TEST_F(QuicP2PSessionTest, DestroySocketWhenClosed) {
329 CreateSessions();
330
331 // The socket must be destroyed when connection is closed.
332 EXPECT_TRUE(socket1_);
333 session1_->connection()->CloseConnection(net::QUIC_NO_ERROR, false);
334 EXPECT_FALSE(socket1_);
335 }
336
321 TEST_F(QuicP2PSessionTest, TransportWriteError) { 337 TEST_F(QuicP2PSessionTest, TransportWriteError) {
322 CreateSessions(); 338 CreateSessions();
323 339
324 TestP2PSessionDelegate session_delegate; 340 TestP2PSessionDelegate session_delegate;
325 session1_->SetDelegate(&session_delegate); 341 session1_->SetDelegate(&session_delegate);
326 342
327 QuicP2PStream* stream = session1_->CreateOutgoingDynamicStream(); 343 QuicP2PStream* stream = session1_->CreateOutgoingDynamicStream();
328 EXPECT_TRUE(stream); 344 EXPECT_TRUE(stream);
329 TestP2PStreamDelegate stream_delegate; 345 TestP2PStreamDelegate stream_delegate;
330 stream->SetDelegate(&stream_delegate); 346 stream->SetDelegate(&stream_delegate);
331 EXPECT_EQ(2U, stream->id()); 347 EXPECT_EQ(2U, stream->id());
332 348
333 socket1_->SetWriteError(ERR_INTERNET_DISCONNECTED); 349 socket1_->SetWriteError(ERR_INTERNET_DISCONNECTED);
334 350
335 const char kTestMessage[] = "Hi"; 351 const char kTestMessage[] = "Hi";
336 stream->Write( 352 stream->Write(
337 std::string(kTestMessage), 353 std::string(kTestMessage),
338 base::Bind(&QuicP2PSessionTest::OnWriteResult, base::Unretained(this))); 354 base::Bind(&QuicP2PSessionTest::OnWriteResult, base::Unretained(this)));
339 355
340 base::RunLoop().RunUntilIdle(); 356 base::RunLoop().RunUntilIdle();
341 357
342 EXPECT_TRUE(stream_delegate.is_closed()); 358 EXPECT_TRUE(stream_delegate.is_closed());
343 EXPECT_EQ(QUIC_PACKET_WRITE_ERROR, stream_delegate.error()); 359 EXPECT_EQ(QUIC_PACKET_WRITE_ERROR, stream_delegate.error());
344 EXPECT_TRUE(session_delegate.is_closed()); 360 EXPECT_TRUE(session_delegate.is_closed());
345 EXPECT_EQ(QUIC_PACKET_WRITE_ERROR, session_delegate.error()); 361 EXPECT_EQ(QUIC_PACKET_WRITE_ERROR, session_delegate.error());
362
363 // Verify that the socket was destroyed.
364 EXPECT_FALSE(socket1_);
346 } 365 }
347 366
348 TEST_F(QuicP2PSessionTest, TransportReceiveError) { 367 TEST_F(QuicP2PSessionTest, TransportReceiveError) {
349 CreateSessions(); 368 CreateSessions();
350 369
351 TestP2PSessionDelegate session_delegate; 370 TestP2PSessionDelegate session_delegate;
352 session1_->SetDelegate(&session_delegate); 371 session1_->SetDelegate(&session_delegate);
353 372
354 QuicP2PStream* stream = session1_->CreateOutgoingDynamicStream(); 373 QuicP2PStream* stream = session1_->CreateOutgoingDynamicStream();
355 EXPECT_TRUE(stream); 374 EXPECT_TRUE(stream);
356 TestP2PStreamDelegate stream_delegate; 375 TestP2PStreamDelegate stream_delegate;
357 stream->SetDelegate(&stream_delegate); 376 stream->SetDelegate(&stream_delegate);
358 EXPECT_EQ(2U, stream->id()); 377 EXPECT_EQ(2U, stream->id());
359 378
360 socket1_->SetReadError(ERR_INTERNET_DISCONNECTED); 379 socket1_->SetReadError(ERR_INTERNET_DISCONNECTED);
361 380
362 base::RunLoop().RunUntilIdle(); 381 base::RunLoop().RunUntilIdle();
363 382
364 EXPECT_TRUE(stream_delegate.is_closed()); 383 EXPECT_TRUE(stream_delegate.is_closed());
365 EXPECT_EQ(QUIC_PACKET_READ_ERROR, stream_delegate.error()); 384 EXPECT_EQ(QUIC_PACKET_READ_ERROR, stream_delegate.error());
366 EXPECT_TRUE(session_delegate.is_closed()); 385 EXPECT_TRUE(session_delegate.is_closed());
367 EXPECT_EQ(QUIC_PACKET_READ_ERROR, session_delegate.error()); 386 EXPECT_EQ(QUIC_PACKET_READ_ERROR, session_delegate.error());
387
388 // Verify that the socket was destroyed.
389 EXPECT_FALSE(socket1_);
368 } 390 }
369 391
370 } // namespace net 392 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/p2p/quic_p2p_session.cc ('k') | net/quic/p2p/quic_p2p_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698