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

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

Issue 2086203004: Allow receiving a packet on a TURN port from an unknown address. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing memory leak found by ASan bot. 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 | « no previous file | webrtc/p2p/base/testturnserver.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/base/p2ptransportchannel_unittest.cc
diff --git a/webrtc/p2p/base/p2ptransportchannel_unittest.cc b/webrtc/p2p/base/p2ptransportchannel_unittest.cc
index 0420535cce55004ac9720462e63391f445d19efe..98b0b8dae56e8938d547dda0c707e0272d784d76 100644
--- a/webrtc/p2p/base/p2ptransportchannel_unittest.cc
+++ b/webrtc/p2p/base/p2ptransportchannel_unittest.cc
@@ -292,7 +292,7 @@ class P2PTransportChannelTestBase : public testing::Test,
uint64_t tiebreaker_;
bool role_conflict_;
bool save_candidates_;
- std::vector<CandidatesData*> saved_candidates_;
+ std::vector<std::unique_ptr<CandidatesData>> saved_candidates_;
bool ready_to_send_ = false;
};
@@ -369,6 +369,8 @@ class P2PTransportChannelTestBase : public testing::Test,
P2PTransportChannel* ep2_ch1() { return ep2_.cd1_.ch_.get(); }
P2PTransportChannel* ep2_ch2() { return ep2_.cd2_.ch_.get(); }
+ TestTurnServer* test_turn_server() { return &turn_server_; }
+
// Common results.
static const Result kLocalUdpToLocalUdp;
static const Result kLocalUdpToStunUdp;
@@ -675,7 +677,8 @@ class P2PTransportChannelTestBase : public testing::Test,
return;
if (GetEndpoint(ch)->save_candidates_) {
- GetEndpoint(ch)->saved_candidates_.push_back(new CandidatesData(ch, c));
+ GetEndpoint(ch)->saved_candidates_.push_back(
+ std::unique_ptr<CandidatesData>(new CandidatesData(ch, c)));
} else {
main_->Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES,
new CandidatesData(ch, c));
@@ -712,9 +715,8 @@ class P2PTransportChannelTestBase : public testing::Test,
void ResumeCandidates(int endpoint) {
Endpoint* ed = GetEndpoint(endpoint);
- std::vector<CandidatesData*>::iterator it = ed->saved_candidates_.begin();
- for (; it != ed->saved_candidates_.end(); ++it) {
- main_->Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES, *it);
+ for (auto& candidate : ed->saved_candidates_) {
+ main_->Post(RTC_FROM_HERE, this, MSG_ADD_CANDIDATES, candidate.release());
}
ed->saved_candidates_.clear();
ed->save_candidates_ = false;
@@ -1665,7 +1667,7 @@ TEST_F(P2PTransportChannelTest, TestUsingPooledSessionAfterDoneGathering) {
}
// Test that when the "presume_writable_when_fully_relayed" flag is set to
-// false and there's a TURN-TURN candidate pair, it's presume to be writable
+// true and there's a TURN-TURN candidate pair, it's presumed to be writable
// as soon as it's created.
TEST_F(P2PTransportChannelTest, TurnToTurnPresumedWritable) {
ConfigureEndpoints(OPEN, OPEN, kDefaultPortAllocatorFlags,
@@ -1698,6 +1700,50 @@ TEST_F(P2PTransportChannelTest, TurnToTurnPresumedWritable) {
EXPECT_TRUE(GetEndpoint(0)->ready_to_send_);
}
+// Test that a TURN/peer reflexive candidate pair is also presumed writable.
+TEST_F(P2PTransportChannelTest, TurnToPrflxPresumedWritable) {
+ rtc::ScopedFakeClock fake_clock;
+
+ ConfigureEndpoints(NAT_SYMMETRIC, NAT_SYMMETRIC, kDefaultPortAllocatorFlags,
+ kDefaultPortAllocatorFlags);
+ // We want the remote TURN candidate to show up as prflx. To do this we need
+ // to configure the server to accept packets from an address we haven't
+ // explicitly installed permission for.
+ test_turn_server()->set_enable_permission_checks(false);
+ IceConfig config;
+ config.presume_writable_when_fully_relayed = true;
+ GetEndpoint(0)->cd1_.ch_.reset(
+ CreateChannel(0, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceUfrag[0],
+ kIcePwd[0], kIceUfrag[1], kIcePwd[1]));
+ GetEndpoint(1)->cd1_.ch_.reset(
+ CreateChannel(1, ICE_CANDIDATE_COMPONENT_DEFAULT, kIceUfrag[1],
+ kIcePwd[1], kIceUfrag[0], kIcePwd[0]));
+ ep1_ch1()->SetIceConfig(config);
+ ep2_ch1()->SetIceConfig(config);
+ // Don't signal candidates from channel 2, so that channel 1 sees the TURN
+ // candidate as peer reflexive.
+ PauseCandidates(1);
+ ep1_ch1()->MaybeStartGathering();
+ ep2_ch1()->MaybeStartGathering();
+
+ // Wait for the TURN<->prflx connection.
+ EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable(),
+ 1000, fake_clock);
+ ASSERT_NE(nullptr, ep1_ch1()->selected_connection());
+ EXPECT_EQ(RELAY_PORT_TYPE, LocalCandidate(ep1_ch1())->type());
+ EXPECT_EQ(PRFLX_PORT_TYPE, RemoteCandidate(ep1_ch1())->type());
+ // Make sure that at this point the connection is only presumed writable,
+ // not fully writable.
+ EXPECT_FALSE(ep1_ch1()->selected_connection()->writable());
+
+ // Now wait for it to actually become writable.
+ EXPECT_TRUE_SIMULATED_WAIT(ep1_ch1()->selected_connection()->writable(), 1000,
+ fake_clock);
+
+ // Explitly destroy channels, before fake clock is destroyed.
+ DestroyChannels();
+}
+
// Test that a presumed-writable TURN<->TURN connection is preferred above an
// unreliable connection (one that has failed to be pinged for some time).
TEST_F(P2PTransportChannelTest, PresumedWritablePreferredOverUnreliable) {
« no previous file with comments | « no previous file | webrtc/p2p/base/testturnserver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698