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

Side by Side Diff: webrtc/p2p/base/port_unittest.cc

Issue 2099783002: Fixing bug where Connection drops packets when presumed writable. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Merge with master. Created 4 years, 5 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 | « webrtc/p2p/base/port.cc ('k') | webrtc/p2p/base/transportchannel.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 2406 matching lines...) Expand 10 before | Expand all | Expand 10 after
2417 ASSERT_EQ_WAIT(1, ch2.complete_count(), kTimeout); 2417 ASSERT_EQ_WAIT(1, ch2.complete_count(), kTimeout);
2418 2418
2419 // Send a ping from src to dst. 2419 // Send a ping from src to dst.
2420 ch1.CreateConnection(GetCandidate(port2)); 2420 ch1.CreateConnection(GetCandidate(port2));
2421 ASSERT_TRUE(ch1.conn() != NULL); 2421 ASSERT_TRUE(ch1.conn() != NULL);
2422 EXPECT_EQ(Connection::STATE_WRITE_INIT, ch1.conn()->write_state()); 2422 EXPECT_EQ(Connection::STATE_WRITE_INIT, ch1.conn()->write_state());
2423 EXPECT_TRUE_WAIT(ch1.conn()->connected(), kTimeout); // for TCP connect 2423 EXPECT_TRUE_WAIT(ch1.conn()->connected(), kTimeout); // for TCP connect
2424 ch1.Ping(); 2424 ch1.Ping();
2425 WAIT(!ch2.remote_address().IsNil(), kTimeout); 2425 WAIT(!ch2.remote_address().IsNil(), kTimeout);
2426 2426
2427 // Data should be unsendable until the connection is accepted. 2427 // Data should be sendable before the connection is accepted.
2428 char data[] = "abcd"; 2428 char data[] = "abcd";
2429 int data_size = arraysize(data); 2429 int data_size = arraysize(data);
2430 rtc::PacketOptions options; 2430 rtc::PacketOptions options;
2431 EXPECT_EQ(SOCKET_ERROR, ch1.conn()->Send(data, data_size, options)); 2431 EXPECT_EQ(data_size, ch1.conn()->Send(data, data_size, options));
2432 2432
2433 // Accept the connection to return the binding response, transition to 2433 // Accept the connection to return the binding response, transition to
2434 // writable, and allow data to be sent. 2434 // writable, and allow data to be sent.
2435 ch2.AcceptConnection(GetCandidate(port1)); 2435 ch2.AcceptConnection(GetCandidate(port1));
2436 EXPECT_EQ_WAIT(Connection::STATE_WRITABLE, ch1.conn()->write_state(), 2436 EXPECT_EQ_WAIT(Connection::STATE_WRITABLE, ch1.conn()->write_state(),
2437 kTimeout); 2437 kTimeout);
2438 EXPECT_EQ(data_size, ch1.conn()->Send(data, data_size, options)); 2438 EXPECT_EQ(data_size, ch1.conn()->Send(data, data_size, options));
2439 2439
2440 // Ask the connection to update state as if enough time has passed to lose 2440 // Ask the connection to update state as if enough time has passed to lose
2441 // full writability and 5 pings went unresponded to. We'll accomplish the 2441 // full writability and 5 pings went unresponded to. We'll accomplish the
(...skipping 15 matching lines...) Expand all
2457 2457
2458 // Wait long enough for a full timeout (past however long we've already 2458 // Wait long enough for a full timeout (past however long we've already
2459 // waited). 2459 // waited).
2460 for (uint32_t i = 1; i <= CONNECTION_WRITE_CONNECT_FAILURES; ++i) { 2460 for (uint32_t i = 1; i <= CONNECTION_WRITE_CONNECT_FAILURES; ++i) {
2461 ch1.Ping(unreliable_timeout_delay + i); 2461 ch1.Ping(unreliable_timeout_delay + i);
2462 } 2462 }
2463 ch1.conn()->UpdateState(unreliable_timeout_delay + CONNECTION_WRITE_TIMEOUT + 2463 ch1.conn()->UpdateState(unreliable_timeout_delay + CONNECTION_WRITE_TIMEOUT +
2464 500u); 2464 500u);
2465 EXPECT_EQ(Connection::STATE_WRITE_TIMEOUT, ch1.conn()->write_state()); 2465 EXPECT_EQ(Connection::STATE_WRITE_TIMEOUT, ch1.conn()->write_state());
2466 2466
2467 // Now that the connection has completely timed out, data send should fail. 2467 // Even if the connection has timed out, the Connection shouldn't block
2468 EXPECT_EQ(SOCKET_ERROR, ch1.conn()->Send(data, data_size, options)); 2468 // the sending of data.
2469 EXPECT_EQ(data_size, ch1.conn()->Send(data, data_size, options));
2469 2470
2470 ch1.Stop(); 2471 ch1.Stop();
2471 ch2.Stop(); 2472 ch2.Stop();
2472 } 2473 }
2473 2474
2474 TEST_F(PortTest, TestTimeoutForNeverWritable) { 2475 TEST_F(PortTest, TestTimeoutForNeverWritable) {
2475 UDPPort* port1 = CreateUdpPort(kLocalAddr1); 2476 UDPPort* port1 = CreateUdpPort(kLocalAddr1);
2476 port1->SetIceRole(cricket::ICEROLE_CONTROLLING); 2477 port1->SetIceRole(cricket::ICEROLE_CONTROLLING);
2477 UDPPort* port2 = CreateUdpPort(kLocalAddr2); 2478 UDPPort* port2 = CreateUdpPort(kLocalAddr2);
2478 port2->SetIceRole(cricket::ICEROLE_CONTROLLED); 2479 port2->SetIceRole(cricket::ICEROLE_CONTROLLED);
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
2711 port->CreateConnection(candidate, Port::ORIGIN_MESSAGE); 2712 port->CreateConnection(candidate, Port::ORIGIN_MESSAGE);
2712 EXPECT_NE(conn1, conn2); 2713 EXPECT_NE(conn1, conn2);
2713 conn_in_use = port->GetConnection(address); 2714 conn_in_use = port->GetConnection(address);
2714 EXPECT_EQ(conn2, conn_in_use); 2715 EXPECT_EQ(conn2, conn_in_use);
2715 EXPECT_EQ(2u, conn_in_use->remote_candidate().generation()); 2716 EXPECT_EQ(2u, conn_in_use->remote_candidate().generation());
2716 2717
2717 // Make sure the new connection was not deleted. 2718 // Make sure the new connection was not deleted.
2718 rtc::Thread::Current()->ProcessMessages(300); 2719 rtc::Thread::Current()->ProcessMessages(300);
2719 EXPECT_TRUE(port->GetConnection(address) != nullptr); 2720 EXPECT_TRUE(port->GetConnection(address) != nullptr);
2720 } 2721 }
OLDNEW
« no previous file with comments | « webrtc/p2p/base/port.cc ('k') | webrtc/p2p/base/transportchannel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698