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

Unified Diff: webrtc/p2p/base/turnport_unittest.cc

Issue 2090833002: Revert of Do not delete a connection in the turn port with permission error or refresh error. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/p2p/base/turnport.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/base/turnport_unittest.cc
diff --git a/webrtc/p2p/base/turnport_unittest.cc b/webrtc/p2p/base/turnport_unittest.cc
index d6d75aad09e18cc57e246b7124af5228499af434..0e415a28147e4e9a6f9ef73b8fad56bba1f2caf3 100644
--- a/webrtc/p2p/base/turnport_unittest.cc
+++ b/webrtc/p2p/base/turnport_unittest.cc
@@ -195,6 +195,7 @@
const rtc::PacketTime& packet_time) {
udp_packets_.push_back(rtc::Buffer(data, size));
}
+ void OnConnectionDestroyed(Connection* conn) { connection_destroyed_ = true; }
void OnSocketReadPacket(rtc::AsyncPacketSocket* socket,
const char* data, size_t size,
const rtc::SocketAddress& remote_addr,
@@ -281,6 +282,9 @@
turn_port_->SignalTurnRefreshResult.connect(
this, &TurnPortTest::OnTurnRefreshResult);
}
+ void ConnectConnectionDestroyedSignal(Connection* conn) {
+ conn->SignalDestroyed.connect(this, &TurnPortTest::OnConnectionDestroyed);
+ }
void CreateUdpPort() { CreateUdpPort(kLocalAddr2); }
@@ -305,23 +309,10 @@
ASSERT_TRUE_WAIT(udp_ready_, kTimeout);
}
- bool CheckConnectionFailedAndPruned(Connection* conn) {
- return conn && !conn->active() && conn->state() == Connection::STATE_FAILED;
- }
-
- // Checks that |turn_port_| has a nonempty set of connections and they are all
- // failed and pruned.
- bool CheckAllConnectionsFailedAndPruned() {
- auto& connections = turn_port_->connections();
- if (connections.empty()) {
- return false;
- }
- for (auto kv : connections) {
- if (!CheckConnectionFailedAndPruned(kv.second)) {
- return false;
- }
- }
- return true;
+ bool CheckConnectionDestroyed() {
+ turn_port_->FlushRequests(cricket::kAllRequests);
+ rtc::Thread::Current()->ProcessMessages(50);
+ return connection_destroyed_;
}
void TestTurnAlternateServer(cricket::ProtocolType protocol_type) {
@@ -533,6 +524,7 @@
bool udp_ready_;
bool test_finish_;
bool turn_refresh_success_ = false;
+ bool connection_destroyed_ = false;
std::vector<rtc::Buffer> turn_packets_;
std::vector<rtc::Buffer> udp_packets_;
rtc::PacketOptions options;
@@ -741,7 +733,6 @@
}
TEST_F(TurnPortTest, TestRefreshRequestGetsErrorResponse) {
- rtc::ScopedFakeClock clock;
CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr);
PrepareTurnAndUdpPorts();
turn_port_->CreateConnection(udp_port_->Candidates()[0],
@@ -754,14 +745,13 @@
// When this succeeds, it will schedule a new RefreshRequest with the bad
// credential.
turn_port_->FlushRequests(cricket::TURN_REFRESH_REQUEST);
- EXPECT_TRUE_SIMULATED_WAIT(turn_refresh_success_, kTimeout, clock);
+ EXPECT_TRUE_WAIT(turn_refresh_success_, kTimeout);
// Flush it again, it will receive a bad response.
turn_port_->FlushRequests(cricket::TURN_REFRESH_REQUEST);
- EXPECT_TRUE_SIMULATED_WAIT(!turn_refresh_success_, kTimeout, clock);
- EXPECT_TRUE_SIMULATED_WAIT(!turn_port_->connected(), kTimeout, clock);
- EXPECT_TRUE_SIMULATED_WAIT(CheckAllConnectionsFailedAndPruned(), kTimeout,
- clock);
- EXPECT_TRUE_SIMULATED_WAIT(!turn_port_->HasRequests(), kTimeout, clock);
+ EXPECT_TRUE_WAIT(!turn_refresh_success_, kTimeout);
+ EXPECT_TRUE_WAIT(!turn_port_->connected(), kTimeout);
+ EXPECT_TRUE_WAIT(turn_port_->connections().empty(), kTimeout);
+ EXPECT_FALSE(turn_port_->HasRequests());
}
// Test that TurnPort will not handle any incoming packets once it has been
@@ -806,20 +796,6 @@
ASSERT_TRUE(conn1 == NULL);
}
-// Tests that when a TCP socket is closed, the respective TURN connection will
-// be destroyed.
-TEST_F(TurnPortTest, TestSocketCloseWillDestroyConnection) {
- turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP);
- CreateTurnPort(kTurnUsername, kTurnPassword, kTurnTcpProtoAddr);
- PrepareTurnAndUdpPorts();
- Connection* conn = turn_port_->CreateConnection(udp_port_->Candidates()[0],
- Port::ORIGIN_MESSAGE);
- EXPECT_NE(nullptr, conn);
- EXPECT_TRUE(!turn_port_->connections().empty());
- turn_port_->socket()->SignalClose(turn_port_->socket(), 1);
- EXPECT_TRUE_WAIT(turn_port_->connections().empty(), kTimeout);
-}
-
// Test try-alternate-server feature.
TEST_F(TurnPortTest, TestTurnAlternateServerUDP) {
TestTurnAlternateServer(cricket::PROTO_UDP);
@@ -923,8 +899,9 @@
Connection* conn = turn_port_->CreateConnection(udp_port_->Candidates()[0],
Port::ORIGIN_MESSAGE);
+ ConnectConnectionDestroyedSignal(conn);
ASSERT_TRUE(conn != NULL);
- EXPECT_TRUE_WAIT(turn_create_permission_success_, kTimeout);
+ ASSERT_TRUE_WAIT(turn_create_permission_success_, kTimeout);
turn_create_permission_success_ = false;
// A create-permission-request should be pending.
// After the next create-permission-response is received, it will schedule
@@ -932,15 +909,14 @@
cricket::RelayCredentials bad_credentials("bad_user", "bad_pwd");
turn_port_->set_credentials(bad_credentials);
turn_port_->FlushRequests(cricket::kAllRequests);
- EXPECT_TRUE_WAIT(turn_create_permission_success_, kTimeout);
+ ASSERT_TRUE_WAIT(turn_create_permission_success_, kTimeout);
// Flush the requests again; the create-permission-request will fail.
turn_port_->FlushRequests(cricket::kAllRequests);
EXPECT_TRUE_WAIT(!turn_create_permission_success_, kTimeout);
- EXPECT_TRUE_WAIT(CheckConnectionFailedAndPruned(conn), kTimeout);
+ EXPECT_TRUE_WAIT(connection_destroyed_, kTimeout);
}
TEST_F(TurnPortTest, TestChannelBindGetErrorResponse) {
- rtc::ScopedFakeClock clock;
CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr);
PrepareTurnAndUdpPorts();
Connection* conn1 = turn_port_->CreateConnection(udp_port_->Candidates()[0],
@@ -948,25 +924,18 @@
ASSERT_TRUE(conn1 != nullptr);
Connection* conn2 = udp_port_->CreateConnection(turn_port_->Candidates()[0],
Port::ORIGIN_MESSAGE);
-
ASSERT_TRUE(conn2 != nullptr);
+ ConnectConnectionDestroyedSignal(conn1);
conn1->Ping(0);
- EXPECT_TRUE_SIMULATED_WAIT(conn1->writable(), kTimeout, clock);
+ ASSERT_TRUE_WAIT(conn1->writable(), kTimeout);
+
+ std::string data = "ABC";
+ conn1->Send(data.data(), data.length(), options);
bool success =
turn_port_->SetEntryChannelId(udp_port_->Candidates()[0].address(), -1);
ASSERT_TRUE(success);
-
- std::string data = "ABC";
- conn1->Send(data.data(), data.length(), options);
-
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnectionFailedAndPruned(conn1), kTimeout,
- clock);
- // Verify that no packet can be sent after a bind request error.
- conn2->SignalReadPacket.connect(static_cast<TurnPortTest*>(this),
- &TurnPortTest::OnUdpReadPacket);
- conn1->Send(data.data(), data.length(), options);
- SIMULATED_WAIT(!udp_packets_.empty(), kTimeout, clock);
- EXPECT_TRUE(udp_packets_.empty());
+ // Next time when the binding request is sent, it will get an ErrorResponse.
+ EXPECT_TRUE_WAIT(CheckConnectionDestroyed(), kTimeout);
}
// Do a TURN allocation, establish a UDP connection, and send some data.
@@ -1026,32 +995,26 @@
}
// Test that a CreatePermission failure will result in the connection being
-// pruned and failed.
-TEST_F(TurnPortTest, TestConnectionFaildAndPrunedOnCreatePermissionFailure) {
- rtc::ScopedFakeClock clock;
- SIMULATED_WAIT(false, 101, clock);
+// destroyed.
+TEST_F(TurnPortTest, TestConnectionDestroyedOnCreatePermissionFailure) {
turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP);
turn_server_.server()->set_reject_private_addresses(true);
CreateTurnPort(kTurnUsername, kTurnPassword, kTurnTcpProtoAddr);
turn_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(turn_ready_, kTimeout, clock);
+ ASSERT_TRUE_WAIT(turn_ready_, kTimeout);
CreateUdpPort(SocketAddress("10.0.0.10", 0));
udp_port_->PrepareAddress();
- EXPECT_TRUE_SIMULATED_WAIT(udp_ready_, kTimeout, clock);
+ ASSERT_TRUE_WAIT(udp_ready_, kTimeout);
// Create a connection.
TestConnectionWrapper conn(turn_port_->CreateConnection(
udp_port_->Candidates()[0], Port::ORIGIN_MESSAGE));
- EXPECT_TRUE(conn.connection() != nullptr);
-
- // Asynchronously, CreatePermission request should be sent and fail, which
- // will make the connection pruned and failed.
- EXPECT_TRUE_SIMULATED_WAIT(CheckConnectionFailedAndPruned(conn.connection()),
- kTimeout, clock);
- EXPECT_TRUE_SIMULATED_WAIT(!turn_create_permission_success_, kTimeout, clock);
- // Check that the connection is not deleted asynchronously.
- SIMULATED_WAIT(conn.connection() == nullptr, kTimeout, clock);
- EXPECT_TRUE(conn.connection() != nullptr);
+ ASSERT_TRUE(conn.connection() != nullptr);
+
+ // Asynchronously, CreatePermission request should be sent and fail, closing
+ // the connection.
+ EXPECT_TRUE_WAIT(conn.connection() == nullptr, kTimeout);
+ EXPECT_FALSE(turn_create_permission_success_);
}
// Test that a TURN allocation is released when the port is closed.
« no previous file with comments | « webrtc/p2p/base/turnport.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698