| Index: webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| diff --git a/webrtc/p2p/base/p2ptransportchannel_unittest.cc b/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| index a0855c76050081be735a1e1657266fff3b11d549..e2ec44e5ab860194bd38c47e5362b6ec99695b06 100644
|
| --- a/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| +++ b/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| @@ -1920,6 +1920,8 @@ class P2PTransportChannelPingTest : public testing::Test,
|
| ch->SetIceRole(cricket::ICEROLE_CONTROLLING);
|
| ch->SetIceCredentials(kIceUfrag[0], kIcePwd[0]);
|
| ch->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]);
|
| + ch->SignalReadyToSend.connect(this,
|
| + &P2PTransportChannelPingTest::OnReadyToSend);
|
| }
|
|
|
| cricket::Candidate CreateHostCandidate(const std::string& ip,
|
| @@ -1969,10 +1971,18 @@ class P2PTransportChannelPingTest : public testing::Test,
|
| return conn;
|
| }
|
|
|
| + void OnReadyToSend(cricket::TransportChannel* channel) {
|
| + channel_ready_to_send_ = true;
|
| + }
|
| +
|
| + bool channel_ready_to_send() { return channel_ready_to_send_; }
|
| + void reset_channel_ready_to_send() { channel_ready_to_send_ = false; }
|
| +
|
| private:
|
| rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_;
|
| rtc::scoped_ptr<rtc::VirtualSocketServer> vss_;
|
| rtc::SocketServerScope ss_scope_;
|
| + bool channel_ready_to_send_ = false;
|
| };
|
|
|
| TEST_F(P2PTransportChannelPingTest, TestTriggeredChecks) {
|
| @@ -2162,7 +2172,8 @@ TEST_F(P2PTransportChannelPingTest, TestReceivingStateChange) {
|
| // The controlled side will select a connection as the "best connection" based
|
| // on priority until the controlling side nominates a connection, at which
|
| // point the controlled side will select that connection as the
|
| -// "best connection".
|
| +// "best connection". Plus, the channel will fire SignalReadyToSend if the new
|
| +// best connection is writable.
|
| TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBeforeNomination) {
|
| cricket::FakePortAllocator pa(rtc::Thread::Current(), nullptr);
|
| cricket::P2PTransportChannel ch("receiving state change", 1, &pa);
|
| @@ -2174,6 +2185,8 @@ TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBeforeNomination) {
|
| cricket::Connection* conn1 = WaitForConnectionTo(&ch, "1.1.1.1", 1);
|
| ASSERT_TRUE(conn1 != nullptr);
|
| EXPECT_EQ(conn1, ch.best_connection());
|
| + // Channel is not ready because it is not writable.
|
| + EXPECT_FALSE(channel_ready_to_send());
|
|
|
| // When a higher priority candidate comes in, the new connection is chosen
|
| // as the best connection.
|
| @@ -2181,6 +2194,7 @@ TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBeforeNomination) {
|
| cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
|
| ASSERT_TRUE(conn2 != nullptr);
|
| EXPECT_EQ(conn2, ch.best_connection());
|
| + EXPECT_FALSE(channel_ready_to_send());
|
|
|
| // If a stun request with use-candidate attribute arrives, the receiving
|
| // connection will be set as the best connection, even though
|
| @@ -2196,6 +2210,7 @@ TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBeforeNomination) {
|
| conn3->set_nominated(true);
|
| conn3->SignalNominated(conn3);
|
| EXPECT_EQ(conn3, ch.best_connection());
|
| + EXPECT_TRUE(channel_ready_to_send());
|
|
|
| // Even if another higher priority candidate arrives,
|
| // it will not be set as the best connection because the best connection
|
| @@ -2210,9 +2225,12 @@ TEST_F(P2PTransportChannelPingTest, TestSelectConnectionBeforeNomination) {
|
| conn4->SignalNominated(conn4);
|
| // Not switched yet because conn4 is not writable.
|
| EXPECT_EQ(conn3, ch.best_connection());
|
| + reset_channel_ready_to_send();
|
| // The best connection switches after conn4 becomes writable.
|
| conn4->ReceivedPingResponse();
|
| EXPECT_EQ(conn4, ch.best_connection());
|
| + // SignalReadyToSend is fired again because conn4 is writable.
|
| + EXPECT_TRUE(channel_ready_to_send());
|
| }
|
|
|
| // The controlled side will select a connection as the "best connection" based
|
|
|