| Index: webrtc/p2p/base/turnport_unittest.cc
|
| diff --git a/webrtc/p2p/base/turnport_unittest.cc b/webrtc/p2p/base/turnport_unittest.cc
|
| index a503c2baa1c48390c3d147c7617b36dc089c723b..7649b5a0d153ed344e34510199792692b0c8b862 100644
|
| --- a/webrtc/p2p/base/turnport_unittest.cc
|
| +++ b/webrtc/p2p/base/turnport_unittest.cc
|
| @@ -605,6 +605,39 @@ TEST_F(TurnPortTest, TestTurnAllocateBadPassword) {
|
| ASSERT_EQ(0U, turn_port_->Candidates().size());
|
| }
|
|
|
| +// Tests that TURN port nonce will be reset when receiving an ALLOCATE MISMATCH
|
| +// error.
|
| +TEST_F(TurnPortTest, TestTurnAllocateNonceResetAfterAllocateMismatch) {
|
| + // Do a normal allocation first.
|
| + CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr);
|
| + turn_port_->PrepareAddress();
|
| + EXPECT_TRUE_WAIT(turn_ready_, kTimeout);
|
| + rtc::SocketAddress first_addr(turn_port_->socket()->GetLocalAddress());
|
| + // Destroy the turnport while keeping the drop probability to 1 to
|
| + // suppress the release of the allocation at the server.
|
| + ss_->set_drop_probability(1.0);
|
| + turn_port_.reset();
|
| + rtc::Thread::Current()->ProcessMessages(0);
|
| + ss_->set_drop_probability(0.0);
|
| +
|
| + // Force the socket server to assign the same port.
|
| + ss_->SetNextPortForTesting(first_addr.port());
|
| + turn_ready_ = false;
|
| + CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr);
|
| +
|
| + // It is expected that the turn port will first get a nonce from the server
|
| + // using timestamp |ts_before| but then get an allocate mismatch error and
|
| + // receive an even newer nonce based on the system clock. |ts_before| is
|
| + // chosen so that the two NONCEs generated by the server will be different.
|
| + uint32_t ts_before = rtc::Time() - 1;
|
| + std::string first_nonce =
|
| + turn_server_.server()->SetTimestampForNextNonce(ts_before);
|
| + turn_port_->PrepareAddress();
|
| +
|
| + EXPECT_TRUE_WAIT(turn_ready_, kTimeout);
|
| + EXPECT_NE(first_nonce, turn_port_->nonce());
|
| +}
|
| +
|
| // Tests that a new local address is created after
|
| // STUN_ERROR_ALLOCATION_MISMATCH.
|
| TEST_F(TurnPortTest, TestTurnAllocateMismatch) {
|
|
|