| Index: webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| diff --git a/webrtc/p2p/base/p2ptransportchannel_unittest.cc b/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| index d0277f481461015f67320fc6f1eadc4166a59813..aaf34734d71b08e6cd53b2251ab94095fb5da004 100644
|
| --- a/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| +++ b/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| @@ -1123,6 +1123,32 @@ TEST_F(P2PTransportChannelTest, GetStats) {
|
| DestroyChannels();
|
| }
|
|
|
| +
|
| +// Test that p2ptransportchannel returns the state correctly.
|
| +TEST_F(P2PTransportChannelTest, TestGetState) {
|
| + ConfigureEndpoints(OPEN, OPEN,
|
| + kDefaultPortAllocatorFlags,
|
| + kDefaultPortAllocatorFlags);
|
| + CreateChannels(1);
|
| + EXPECT_TRUE_WAIT(ep1_ch1()->writable() && ep2_ch1()->writable(), 1000);
|
| + EXPECT_EQ_WAIT(cricket::TransportChannelState::STATE_COMPLETED,
|
| + ep1_ch1()->GetState(), 1000);
|
| + const std::vector<cricket::Connection*>& connections =
|
| + ep1_ch1()->connections();
|
| +
|
| + ASSERT_TRUE(connections.size() >= 2);
|
| + connections[0]->Unprune();
|
| + connections[1]->Unprune();
|
| + EXPECT_EQ(cricket::TransportChannelState::STATE_CONNECTING,
|
| + ep1_ch1()->GetState());
|
| +
|
| + for (cricket::Connection* conn : connections) {
|
| + conn->Prune();
|
| + }
|
| + EXPECT_EQ(cricket::TransportChannelState::STATE_FAILED,
|
| + ep1_ch1()->GetState());
|
| +}
|
| +
|
| // Test that we properly create a connection on a STUN ping from unknown address
|
| // when the signaling is slow.
|
| TEST_F(P2PTransportChannelTest, PeerReflexiveCandidateBeforeSignaling) {
|
| @@ -1426,8 +1452,10 @@ TEST_F(P2PTransportChannelTest, TestForceTurn) {
|
|
|
| CreateChannels(1);
|
|
|
| - EXPECT_TRUE_WAIT(ep1_ch1()->receiving() && ep1_ch1()->writable() &&
|
| - ep2_ch1()->receiving() && ep2_ch1()->writable(),
|
| + EXPECT_TRUE_WAIT(ep1_ch1()->receiving() &&
|
| + ep1_ch1()->writable() &&
|
| + ep2_ch1()->receiving() &&
|
| + ep2_ch1()->writable(),
|
| 2000);
|
|
|
| EXPECT_TRUE(ep1_ch1()->best_connection() &&
|
| @@ -1519,16 +1547,21 @@ TEST_F(P2PTransportChannelMultihomedTest, TestFailover) {
|
| fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY,
|
| kPublicAddrs[1]);
|
|
|
| - // We should detect loss of connectivity within 5 seconds or so.
|
| - EXPECT_TRUE_WAIT(!ep1_ch1()->writable(), 7000);
|
| + // We should detect loss of connectivity within 2.5 seconds or so.
|
| + // The best connection will be switched. So keep a reference to the
|
| + // current best connection.
|
| + const cricket::Connection* best_connection = ep1_ch1()->best_connection();
|
| + EXPECT_TRUE_WAIT(!best_connection->receiving(), 3000);
|
| + // The channel is still receiving because the backup connection is receiving.
|
| + EXPECT_TRUE(ep1_ch1()->receiving());
|
|
|
| // We should switch over to use the alternate addr immediately
|
| - // when we lose writability.
|
| + // when we lose receiving.
|
| EXPECT_TRUE_WAIT(
|
| ep1_ch1()->best_connection() && ep2_ch1()->best_connection() &&
|
| LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) &&
|
| RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]),
|
| - 3000);
|
| + 1000);
|
|
|
| DestroyChannels();
|
| }
|
| @@ -1709,11 +1742,18 @@ TEST_F(P2PTransportChannelPingTest, ConnectionResurrection) {
|
| cricket::Connection* conn2 = WaitForConnectionTo(&ch, "2.2.2.2", 2);
|
| ASSERT_TRUE(conn2 != nullptr);
|
| conn2->ReceivedPing();
|
| + // Need Ping to set the last_ping_sent so that the write state will not
|
| + // become stale.
|
| + conn2->Ping(rtc::Time());
|
| conn2->ReceivedPingResponse();
|
|
|
| - // Wait for conn1 to be destroyed.
|
| + // Wait for conn1 being pruned.
|
| + ASSERT_EQ(conn1, GetConnectionTo(&ch, "1.1.1.1", 1));
|
| + EXPECT_TRUE_WAIT(
|
| + conn1 == GetConnectionTo(&ch, "1.1.1.1", 1) && conn1->pruned(), 3000);
|
| + // conn1 won't be deleted right away. Destroy it.
|
| + conn1->Destroy();
|
| EXPECT_TRUE_WAIT(GetConnectionTo(&ch, "1.1.1.1", 1) == nullptr, 3000);
|
| - cricket::Port* port = GetPort(&ch);
|
|
|
| // Create a minimal STUN message with prflx priority.
|
| cricket::IceMessage request;
|
| @@ -1725,6 +1765,7 @@ TEST_F(P2PTransportChannelPingTest, ConnectionResurrection) {
|
| cricket::STUN_ATTR_PRIORITY, prflx_priority));
|
| EXPECT_NE(prflx_priority, remote_priority);
|
|
|
| + cricket::Port* port = GetPort(&ch);
|
| // conn1 should be resurrected with original priority.
|
| port->SignalUnknownAddress(port, rtc::SocketAddress("1.1.1.1", 1),
|
| cricket::PROTO_UDP, &request, kIceUfrag[1], false);
|
|
|