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

Unified Diff: webrtc/p2p/client/basicportallocator_unittest.cc

Issue 1998813002: Fixing the behavior of the candidate filter with pooled candidates. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/p2p/client/basicportallocator_unittest.cc
diff --git a/webrtc/p2p/client/basicportallocator_unittest.cc b/webrtc/p2p/client/basicportallocator_unittest.cc
index 83d904f181480deca88bc1701af4e7e451e6208c..4557b1664a4fd28b3813e1a1b6132263f15ddbf3 100644
--- a/webrtc/p2p/client/basicportallocator_unittest.cc
+++ b/webrtc/p2p/client/basicportallocator_unittest.cc
@@ -965,6 +965,21 @@ TEST_F(BasicPortAllocatorTest, TestGetAllPortsRestarts) {
// TODO(deadbeef): Extend this to verify ICE restart.
}
+// Test that the allocator session uses the candidate filter it's created with,
+// rather than the filter of its parent allocator.
+// The filter of the allocator should only affect the next gathering phase,
+// according to JSEP, which means the *next* allocator session returned.
+TEST_F(BasicPortAllocatorTest, TestSessionUsesOwnCandidateFilter) {
+ AddInterface(kClientAddr);
+ EXPECT_TRUE(CreateSession(cricket::ICE_CANDIDATE_COMPONENT_RTP));
+ // Set candidate filter *after* creating the session. Should have no effect.
+ allocator().set_candidate_filter(cricket::CF_RELAY);
+ session_->StartGettingPorts();
+ EXPECT_EQ_WAIT(7U, candidates_.size(), kDefaultAllocationTimeout);
+ EXPECT_EQ(4U, ports_.size());
+ EXPECT_TRUE(candidate_allocation_done_);
+}
+
// Test ICE candidate filter mechanism with options Relay/Host/Reflexive.
// This test also verifies that when the allocator is only allowed to use
// relay (i.e. IceTransportsType is relay), the raddr is an empty
@@ -1498,3 +1513,37 @@ TEST_F(BasicPortAllocatorTest, TestTransportInformationUpdated) {
EXPECT_EQ(kIcePwd0, candidate.password());
}
}
+
+// Test that a new candidate filter takes effect even on already-gathered
+// candidates.
+TEST_F(BasicPortAllocatorTest, TestSetCandidateFilterAfterCandidatesGathered) {
+ AddInterface(kClientAddr);
+ int pool_size = 1;
+ allocator_->SetConfiguration(allocator_->stun_servers(),
+ allocator_->turn_servers(), pool_size);
+ const cricket::PortAllocatorSession* peeked_session =
+ allocator_->GetPooledSession();
+ ASSERT_NE(nullptr, peeked_session);
+ EXPECT_EQ_WAIT(true, peeked_session->CandidatesAllocationDone(),
+ kDefaultAllocationTimeout);
+ size_t initial_candidates_size = peeked_session->ReadyCandidates().size();
+ size_t initial_ports_size = peeked_session->ReadyPorts().size();
+ allocator_->set_candidate_filter(cricket::CF_RELAY);
+ // Assume that when TakePooledSession is called, the candidate filter will be
+ // applied to the pooled session. This is tested by PortAllocatorTest.
+ session_ =
+ allocator_->TakePooledSession(kContentName, 1, kIceUfrag0, kIcePwd0);
+ ASSERT_NE(nullptr, session_.get());
+ auto candidates = session_->ReadyCandidates();
+ // Check that the number of candidates and ports decreased.
+ EXPECT_GT(initial_candidates_size, candidates.size());
+ EXPECT_GT(initial_ports_size, session_->ReadyPorts().size());
+ for (size_t i = 0; i < candidates.size(); ++i) {
+ // Expect only relay candidates now that the filter is applied.
+ EXPECT_EQ(std::string(cricket::RELAY_PORT_TYPE), candidates[i].type());
+ // Expect that the raddr is emptied due to the CF_RELAY filter.
+ EXPECT_EQ(
+ candidates[0].related_address(),
+ rtc::EmptySocketAddressWithFamily(candidates[0].address().family()));
+ }
+}
« webrtc/p2p/client/basicportallocator.cc ('K') | « webrtc/p2p/client/basicportallocator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698