| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2012 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 #if defined(WEBRTC_POSIX) | 10 #if defined(WEBRTC_POSIX) |
| 11 #include <dirent.h> | 11 #include <dirent.h> |
| 12 #endif | 12 #endif |
| 13 | 13 |
| 14 #include "webrtc/p2p/base/basicpacketsocketfactory.h" | 14 #include "webrtc/p2p/base/basicpacketsocketfactory.h" |
| 15 #include "webrtc/p2p/base/constants.h" | 15 #include "webrtc/p2p/base/constants.h" |
| 16 #include "webrtc/p2p/base/portallocator.h" |
| 16 #include "webrtc/p2p/base/tcpport.h" | 17 #include "webrtc/p2p/base/tcpport.h" |
| 17 #include "webrtc/p2p/base/testturnserver.h" | 18 #include "webrtc/p2p/base/testturnserver.h" |
| 18 #include "webrtc/p2p/base/turnport.h" | 19 #include "webrtc/p2p/base/turnport.h" |
| 19 #include "webrtc/p2p/base/udpport.h" | 20 #include "webrtc/p2p/base/udpport.h" |
| 20 #include "webrtc/base/asynctcpsocket.h" | 21 #include "webrtc/base/asynctcpsocket.h" |
| 21 #include "webrtc/base/buffer.h" | 22 #include "webrtc/base/buffer.h" |
| 22 #include "webrtc/base/dscp.h" | 23 #include "webrtc/base/dscp.h" |
| 23 #include "webrtc/base/firewallsocketserver.h" | 24 #include "webrtc/base/firewallsocketserver.h" |
| 24 #include "webrtc/base/gunit.h" | 25 #include "webrtc/base/gunit.h" |
| 25 #include "webrtc/base/helpers.h" | 26 #include "webrtc/base/helpers.h" |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 } | 166 } |
| 166 void OnTurnPortError(Port* port) { | 167 void OnTurnPortError(Port* port) { |
| 167 turn_error_ = true; | 168 turn_error_ = true; |
| 168 } | 169 } |
| 169 void OnTurnUnknownAddress(PortInterface* port, const SocketAddress& addr, | 170 void OnTurnUnknownAddress(PortInterface* port, const SocketAddress& addr, |
| 170 cricket::ProtocolType proto, | 171 cricket::ProtocolType proto, |
| 171 cricket::IceMessage* msg, const std::string& rf, | 172 cricket::IceMessage* msg, const std::string& rf, |
| 172 bool /*port_muxed*/) { | 173 bool /*port_muxed*/) { |
| 173 turn_unknown_address_ = true; | 174 turn_unknown_address_ = true; |
| 174 } | 175 } |
| 175 void OnTurnCreatePermissionResult(TurnPort* port, const SocketAddress& addr, | 176 void OnTurnCreatePermissionResult(TurnPort* port, |
| 176 int code) { | 177 const SocketAddress& addr, |
| 178 int code) { |
| 177 // Ignoring the address. | 179 // Ignoring the address. |
| 178 if (code == 0) { | 180 turn_create_permission_success_ = (code == 0); |
| 179 turn_create_permission_success_ = true; | 181 } |
| 180 } | 182 |
| 183 void OnTurnRefreshResult(TurnPort* port, int code) { |
| 184 turn_refresh_success_ = (code == 0); |
| 181 } | 185 } |
| 182 void OnTurnReadPacket(Connection* conn, const char* data, size_t size, | 186 void OnTurnReadPacket(Connection* conn, const char* data, size_t size, |
| 183 const rtc::PacketTime& packet_time) { | 187 const rtc::PacketTime& packet_time) { |
| 184 turn_packets_.push_back(rtc::Buffer(data, size)); | 188 turn_packets_.push_back(rtc::Buffer(data, size)); |
| 185 } | 189 } |
| 186 void OnUdpPortComplete(Port* port) { | 190 void OnUdpPortComplete(Port* port) { |
| 187 udp_ready_ = true; | 191 udp_ready_ = true; |
| 188 } | 192 } |
| 189 void OnUdpReadPacket(Connection* conn, const char* data, size_t size, | 193 void OnUdpReadPacket(Connection* conn, const char* data, size_t size, |
| 190 const rtc::PacketTime& packet_time) { | 194 const rtc::PacketTime& packet_time) { |
| 191 udp_packets_.push_back(rtc::Buffer(data, size)); | 195 udp_packets_.push_back(rtc::Buffer(data, size)); |
| 192 } | 196 } |
| 197 void OnConnectionDestroyed(Connection* conn) { connection_destroyed_ = true; } |
| 193 void OnSocketReadPacket(rtc::AsyncPacketSocket* socket, | 198 void OnSocketReadPacket(rtc::AsyncPacketSocket* socket, |
| 194 const char* data, size_t size, | 199 const char* data, size_t size, |
| 195 const rtc::SocketAddress& remote_addr, | 200 const rtc::SocketAddress& remote_addr, |
| 196 const rtc::PacketTime& packet_time) { | 201 const rtc::PacketTime& packet_time) { |
| 197 turn_port_->HandleIncomingPacket(socket, data, size, remote_addr, | 202 turn_port_->HandleIncomingPacket(socket, data, size, remote_addr, |
| 198 packet_time); | 203 packet_time); |
| 199 } | 204 } |
| 200 rtc::AsyncSocket* CreateServerSocket(const SocketAddress addr) { | 205 rtc::AsyncSocket* CreateServerSocket(const SocketAddress addr) { |
| 201 rtc::AsyncSocket* socket = ss_->CreateAsyncSocket(SOCK_STREAM); | 206 rtc::AsyncSocket* socket = ss_->CreateAsyncSocket(SOCK_STREAM); |
| 202 EXPECT_GE(socket->Bind(addr), 0); | 207 EXPECT_GE(socket->Bind(addr), 0); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 | 271 |
| 267 void ConnectSignals() { | 272 void ConnectSignals() { |
| 268 turn_port_->SignalPortComplete.connect(this, | 273 turn_port_->SignalPortComplete.connect(this, |
| 269 &TurnPortTest::OnTurnPortComplete); | 274 &TurnPortTest::OnTurnPortComplete); |
| 270 turn_port_->SignalPortError.connect(this, | 275 turn_port_->SignalPortError.connect(this, |
| 271 &TurnPortTest::OnTurnPortError); | 276 &TurnPortTest::OnTurnPortError); |
| 272 turn_port_->SignalUnknownAddress.connect(this, | 277 turn_port_->SignalUnknownAddress.connect(this, |
| 273 &TurnPortTest::OnTurnUnknownAddress); | 278 &TurnPortTest::OnTurnUnknownAddress); |
| 274 turn_port_->SignalCreatePermissionResult.connect(this, | 279 turn_port_->SignalCreatePermissionResult.connect(this, |
| 275 &TurnPortTest::OnTurnCreatePermissionResult); | 280 &TurnPortTest::OnTurnCreatePermissionResult); |
| 281 turn_port_->SignalTurnRefreshResult.connect( |
| 282 this, &TurnPortTest::OnTurnRefreshResult); |
| 283 } |
| 284 void ConnectConnectionDestroyedSignal(Connection* conn) { |
| 285 conn->SignalDestroyed.connect(this, &TurnPortTest::OnConnectionDestroyed); |
| 276 } | 286 } |
| 277 | 287 |
| 278 void CreateUdpPort() { CreateUdpPort(kLocalAddr2); } | 288 void CreateUdpPort() { CreateUdpPort(kLocalAddr2); } |
| 279 | 289 |
| 280 void CreateUdpPort(const SocketAddress& address) { | 290 void CreateUdpPort(const SocketAddress& address) { |
| 281 udp_port_.reset(UDPPort::Create(main_, &socket_factory_, &network_, | 291 udp_port_.reset(UDPPort::Create(main_, &socket_factory_, &network_, |
| 282 address.ipaddr(), 0, 0, kIceUfrag2, | 292 address.ipaddr(), 0, 0, kIceUfrag2, |
| 283 kIcePwd2, std::string(), false)); | 293 kIcePwd2, std::string(), false)); |
| 284 // UDP port will be controlled. | 294 // UDP port will be controlled. |
| 285 udp_port_->SetIceRole(cricket::ICEROLE_CONTROLLED); | 295 udp_port_->SetIceRole(cricket::ICEROLE_CONTROLLED); |
| 286 udp_port_->SignalPortComplete.connect( | 296 udp_port_->SignalPortComplete.connect( |
| 287 this, &TurnPortTest::OnUdpPortComplete); | 297 this, &TurnPortTest::OnUdpPortComplete); |
| 288 } | 298 } |
| 289 | 299 |
| 300 void PrepareTurnAndUdpPorts() { |
| 301 // turn_port_ should have been created. |
| 302 ASSERT_TRUE(turn_port_ != nullptr); |
| 303 turn_port_->PrepareAddress(); |
| 304 ASSERT_TRUE_WAIT(turn_ready_, kTimeout); |
| 305 |
| 306 CreateUdpPort(); |
| 307 udp_port_->PrepareAddress(); |
| 308 ASSERT_TRUE_WAIT(udp_ready_, kTimeout); |
| 309 } |
| 310 |
| 311 bool CheckConnectionDestroyed() { |
| 312 turn_port_->FlushRequests(); |
| 313 rtc::Thread::Current()->ProcessMessages(50); |
| 314 return connection_destroyed_; |
| 315 } |
| 316 |
| 290 void TestTurnAlternateServer(cricket::ProtocolType protocol_type) { | 317 void TestTurnAlternateServer(cricket::ProtocolType protocol_type) { |
| 291 std::vector<rtc::SocketAddress> redirect_addresses; | 318 std::vector<rtc::SocketAddress> redirect_addresses; |
| 292 redirect_addresses.push_back(kTurnAlternateIntAddr); | 319 redirect_addresses.push_back(kTurnAlternateIntAddr); |
| 293 | 320 |
| 294 cricket::TestTurnRedirector redirector(redirect_addresses); | 321 cricket::TestTurnRedirector redirector(redirect_addresses); |
| 295 | 322 |
| 296 turn_server_.AddInternalSocket(kTurnIntAddr, protocol_type); | 323 turn_server_.AddInternalSocket(kTurnIntAddr, protocol_type); |
| 297 turn_server_.AddInternalSocket(kTurnAlternateIntAddr, protocol_type); | 324 turn_server_.AddInternalSocket(kTurnAlternateIntAddr, protocol_type); |
| 298 turn_server_.set_redirect_hook(&redirector); | 325 turn_server_.set_redirect_hook(&redirector); |
| 299 CreateTurnPort(kTurnUsername, kTurnPassword, | 326 CreateTurnPort(kTurnUsername, kTurnPassword, |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 CreateTurnPort(kTurnUsername, kTurnPassword, | 390 CreateTurnPort(kTurnUsername, kTurnPassword, |
| 364 cricket::ProtocolAddress(kTurnIntAddr, protocol_type)); | 391 cricket::ProtocolAddress(kTurnIntAddr, protocol_type)); |
| 365 | 392 |
| 366 turn_port_->PrepareAddress(); | 393 turn_port_->PrepareAddress(); |
| 367 EXPECT_TRUE_WAIT(turn_error_, kTimeout); | 394 EXPECT_TRUE_WAIT(turn_error_, kTimeout); |
| 368 ASSERT_EQ(0U, turn_port_->Candidates().size()); | 395 ASSERT_EQ(0U, turn_port_->Candidates().size()); |
| 369 } | 396 } |
| 370 | 397 |
| 371 void TestTurnConnection() { | 398 void TestTurnConnection() { |
| 372 // Create ports and prepare addresses. | 399 // Create ports and prepare addresses. |
| 373 ASSERT_TRUE(turn_port_ != NULL); | 400 PrepareTurnAndUdpPorts(); |
| 374 turn_port_->PrepareAddress(); | |
| 375 ASSERT_TRUE_WAIT(turn_ready_, kTimeout); | |
| 376 CreateUdpPort(); | |
| 377 udp_port_->PrepareAddress(); | |
| 378 ASSERT_TRUE_WAIT(udp_ready_, kTimeout); | |
| 379 | 401 |
| 380 // Send ping from UDP to TURN. | 402 // Send ping from UDP to TURN. |
| 381 Connection* conn1 = udp_port_->CreateConnection( | 403 Connection* conn1 = udp_port_->CreateConnection( |
| 382 turn_port_->Candidates()[0], Port::ORIGIN_MESSAGE); | 404 turn_port_->Candidates()[0], Port::ORIGIN_MESSAGE); |
| 383 ASSERT_TRUE(conn1 != NULL); | 405 ASSERT_TRUE(conn1 != NULL); |
| 384 conn1->Ping(0); | 406 conn1->Ping(0); |
| 385 WAIT(!turn_unknown_address_, kTimeout); | 407 WAIT(!turn_unknown_address_, kTimeout); |
| 386 EXPECT_FALSE(turn_unknown_address_); | 408 EXPECT_FALSE(turn_unknown_address_); |
| 387 EXPECT_FALSE(conn1->receiving()); | 409 EXPECT_FALSE(conn1->receiving()); |
| 388 EXPECT_EQ(Connection::STATE_WRITE_INIT, conn1->write_state()); | 410 EXPECT_EQ(Connection::STATE_WRITE_INIT, conn1->write_state()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 399 EXPECT_TRUE(conn2->receiving()); | 421 EXPECT_TRUE(conn2->receiving()); |
| 400 EXPECT_EQ(Connection::STATE_WRITE_INIT, conn1->write_state()); | 422 EXPECT_EQ(Connection::STATE_WRITE_INIT, conn1->write_state()); |
| 401 | 423 |
| 402 // Send another ping from UDP to TURN. | 424 // Send another ping from UDP to TURN. |
| 403 conn1->Ping(0); | 425 conn1->Ping(0); |
| 404 EXPECT_EQ_WAIT(Connection::STATE_WRITABLE, conn1->write_state(), kTimeout); | 426 EXPECT_EQ_WAIT(Connection::STATE_WRITABLE, conn1->write_state(), kTimeout); |
| 405 EXPECT_TRUE(conn2->receiving()); | 427 EXPECT_TRUE(conn2->receiving()); |
| 406 } | 428 } |
| 407 | 429 |
| 408 void TestDestroyTurnConnection() { | 430 void TestDestroyTurnConnection() { |
| 409 turn_port_->PrepareAddress(); | 431 PrepareTurnAndUdpPorts(); |
| 410 ASSERT_TRUE_WAIT(turn_ready_, kTimeout); | |
| 411 // Create a remote UDP port | |
| 412 CreateUdpPort(); | |
| 413 udp_port_->PrepareAddress(); | |
| 414 ASSERT_TRUE_WAIT(udp_ready_, kTimeout); | |
| 415 | 432 |
| 416 // Create connections on both ends. | 433 // Create connections on both ends. |
| 417 Connection* conn1 = udp_port_->CreateConnection(turn_port_->Candidates()[0], | 434 Connection* conn1 = udp_port_->CreateConnection(turn_port_->Candidates()[0], |
| 418 Port::ORIGIN_MESSAGE); | 435 Port::ORIGIN_MESSAGE); |
| 419 Connection* conn2 = turn_port_->CreateConnection(udp_port_->Candidates()[0], | 436 Connection* conn2 = turn_port_->CreateConnection(udp_port_->Candidates()[0], |
| 420 Port::ORIGIN_MESSAGE); | 437 Port::ORIGIN_MESSAGE); |
| 421 ASSERT_TRUE(conn2 != NULL); | 438 ASSERT_TRUE(conn2 != NULL); |
| 422 ASSERT_TRUE_WAIT(turn_create_permission_success_, kTimeout); | 439 ASSERT_TRUE_WAIT(turn_create_permission_success_, kTimeout); |
| 423 // Make sure turn connection can receive. | 440 // Make sure turn connection can receive. |
| 424 conn1->Ping(0); | 441 conn1->Ping(0); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 441 | 458 |
| 442 // If the connection is created again, it will start to receive pings. | 459 // If the connection is created again, it will start to receive pings. |
| 443 conn2 = turn_port_->CreateConnection(udp_port_->Candidates()[0], | 460 conn2 = turn_port_->CreateConnection(udp_port_->Candidates()[0], |
| 444 Port::ORIGIN_MESSAGE); | 461 Port::ORIGIN_MESSAGE); |
| 445 conn1->Ping(0); | 462 conn1->Ping(0); |
| 446 EXPECT_TRUE_WAIT(conn2->receiving(), kTimeout); | 463 EXPECT_TRUE_WAIT(conn2->receiving(), kTimeout); |
| 447 EXPECT_FALSE(turn_unknown_address_); | 464 EXPECT_FALSE(turn_unknown_address_); |
| 448 } | 465 } |
| 449 | 466 |
| 450 void TestTurnSendData() { | 467 void TestTurnSendData() { |
| 451 turn_port_->PrepareAddress(); | 468 PrepareTurnAndUdpPorts(); |
| 452 EXPECT_TRUE_WAIT(turn_ready_, kTimeout); | 469 |
| 453 CreateUdpPort(); | |
| 454 udp_port_->PrepareAddress(); | |
| 455 EXPECT_TRUE_WAIT(udp_ready_, kTimeout); | |
| 456 // Create connections and send pings. | 470 // Create connections and send pings. |
| 457 Connection* conn1 = turn_port_->CreateConnection( | 471 Connection* conn1 = turn_port_->CreateConnection( |
| 458 udp_port_->Candidates()[0], Port::ORIGIN_MESSAGE); | 472 udp_port_->Candidates()[0], Port::ORIGIN_MESSAGE); |
| 459 Connection* conn2 = udp_port_->CreateConnection( | 473 Connection* conn2 = udp_port_->CreateConnection( |
| 460 turn_port_->Candidates()[0], Port::ORIGIN_MESSAGE); | 474 turn_port_->Candidates()[0], Port::ORIGIN_MESSAGE); |
| 461 ASSERT_TRUE(conn1 != NULL); | 475 ASSERT_TRUE(conn1 != NULL); |
| 462 ASSERT_TRUE(conn2 != NULL); | 476 ASSERT_TRUE(conn2 != NULL); |
| 463 conn1->SignalReadPacket.connect(static_cast<TurnPortTest*>(this), | 477 conn1->SignalReadPacket.connect(static_cast<TurnPortTest*>(this), |
| 464 &TurnPortTest::OnTurnReadPacket); | 478 &TurnPortTest::OnTurnReadPacket); |
| 465 conn2->SignalReadPacket.connect(static_cast<TurnPortTest*>(this), | 479 conn2->SignalReadPacket.connect(static_cast<TurnPortTest*>(this), |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 rtc::scoped_ptr<rtc::AsyncPacketSocket> socket_; | 515 rtc::scoped_ptr<rtc::AsyncPacketSocket> socket_; |
| 502 cricket::TestTurnServer turn_server_; | 516 cricket::TestTurnServer turn_server_; |
| 503 rtc::scoped_ptr<TurnPort> turn_port_; | 517 rtc::scoped_ptr<TurnPort> turn_port_; |
| 504 rtc::scoped_ptr<UDPPort> udp_port_; | 518 rtc::scoped_ptr<UDPPort> udp_port_; |
| 505 bool turn_ready_; | 519 bool turn_ready_; |
| 506 bool turn_error_; | 520 bool turn_error_; |
| 507 bool turn_unknown_address_; | 521 bool turn_unknown_address_; |
| 508 bool turn_create_permission_success_; | 522 bool turn_create_permission_success_; |
| 509 bool udp_ready_; | 523 bool udp_ready_; |
| 510 bool test_finish_; | 524 bool test_finish_; |
| 525 bool turn_refresh_success_ = false; |
| 526 bool connection_destroyed_ = false; |
| 511 std::vector<rtc::Buffer> turn_packets_; | 527 std::vector<rtc::Buffer> turn_packets_; |
| 512 std::vector<rtc::Buffer> udp_packets_; | 528 std::vector<rtc::Buffer> udp_packets_; |
| 513 rtc::PacketOptions options; | 529 rtc::PacketOptions options; |
| 514 }; | 530 }; |
| 515 | 531 |
| 516 // Do a normal TURN allocation. | 532 // Do a normal TURN allocation. |
| 517 TEST_F(TurnPortTest, TestTurnAllocate) { | 533 TEST_F(TurnPortTest, TestTurnAllocate) { |
| 518 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr); | 534 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr); |
| 519 EXPECT_EQ(0, turn_port_->SetOption(rtc::Socket::OPT_SNDBUF, 10*1024)); | 535 EXPECT_EQ(0, turn_port_->SetOption(rtc::Socket::OPT_SNDBUF, 10*1024)); |
| 520 turn_port_->PrepareAddress(); | 536 turn_port_->PrepareAddress(); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 | 684 |
| 669 // Verifies that the new port has the same address. | 685 // Verifies that the new port has the same address. |
| 670 EXPECT_EQ(first_addr, turn_port_->socket()->GetLocalAddress()); | 686 EXPECT_EQ(first_addr, turn_port_->socket()->GetLocalAddress()); |
| 671 | 687 |
| 672 EXPECT_TRUE_WAIT(turn_ready_, kTimeout); | 688 EXPECT_TRUE_WAIT(turn_ready_, kTimeout); |
| 673 | 689 |
| 674 // Verifies that the new port has a different address now. | 690 // Verifies that the new port has a different address now. |
| 675 EXPECT_NE(first_addr, turn_port_->socket()->GetLocalAddress()); | 691 EXPECT_NE(first_addr, turn_port_->socket()->GetLocalAddress()); |
| 676 } | 692 } |
| 677 | 693 |
| 694 TEST_F(TurnPortTest, TestRefreshRequestGetsErrorResponse) { |
| 695 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr); |
| 696 turn_port_->PrepareAddress(); |
| 697 EXPECT_TRUE_WAIT(turn_ready_, kTimeout); |
| 698 // Set bad credentials. |
| 699 cricket::RelayCredentials bad_credentials("bad_user", "bad_pwd"); |
| 700 turn_port_->set_credentials(bad_credentials); |
| 701 turn_refresh_success_ = false; |
| 702 // This sends out the first RefreshRequest with correct credentials. |
| 703 // When this succeeds, it will schedule a new RefreshRequest with the bad |
| 704 // credential. |
| 705 turn_port_->FlushRequests(); |
| 706 EXPECT_TRUE_WAIT(turn_refresh_success_, kTimeout); |
| 707 // Flush it again, it will receive a bad response. |
| 708 turn_port_->FlushRequests(); |
| 709 EXPECT_TRUE_WAIT(!turn_refresh_success_, kTimeout); |
| 710 EXPECT_TRUE(turn_port_->connections().empty()); |
| 711 EXPECT_FALSE(turn_port_->connected()); |
| 712 } |
| 713 |
| 678 // Test that CreateConnection will return null if port becomes disconnected. | 714 // Test that CreateConnection will return null if port becomes disconnected. |
| 679 TEST_F(TurnPortTest, TestCreateConnectionWhenSocketClosed) { | 715 TEST_F(TurnPortTest, TestCreateConnectionWhenSocketClosed) { |
| 680 turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP); | 716 turn_server_.AddInternalSocket(kTurnTcpIntAddr, cricket::PROTO_TCP); |
| 681 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnTcpProtoAddr); | 717 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnTcpProtoAddr); |
| 682 turn_port_->PrepareAddress(); | 718 PrepareTurnAndUdpPorts(); |
| 683 ASSERT_TRUE_WAIT(turn_ready_, kTimeout); | |
| 684 | |
| 685 CreateUdpPort(); | |
| 686 udp_port_->PrepareAddress(); | |
| 687 ASSERT_TRUE_WAIT(udp_ready_, kTimeout); | |
| 688 // Create a connection. | 719 // Create a connection. |
| 689 Connection* conn1 = turn_port_->CreateConnection(udp_port_->Candidates()[0], | 720 Connection* conn1 = turn_port_->CreateConnection(udp_port_->Candidates()[0], |
| 690 Port::ORIGIN_MESSAGE); | 721 Port::ORIGIN_MESSAGE); |
| 691 ASSERT_TRUE(conn1 != NULL); | 722 ASSERT_TRUE(conn1 != NULL); |
| 692 | 723 |
| 693 // Close the socket and create a connection again. | 724 // Close the socket and create a connection again. |
| 694 turn_port_->OnSocketClose(turn_port_->socket(), 1); | 725 turn_port_->OnSocketClose(turn_port_->socket(), 1); |
| 695 conn1 = turn_port_->CreateConnection(udp_port_->Candidates()[0], | 726 conn1 = turn_port_->CreateConnection(udp_port_->Candidates()[0], |
| 696 Port::ORIGIN_MESSAGE); | 727 Port::ORIGIN_MESSAGE); |
| 697 ASSERT_TRUE(conn1 == NULL); | 728 ASSERT_TRUE(conn1 == NULL); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 785 // Run TurnConnectionTest with one-time-use nonce feature. | 816 // Run TurnConnectionTest with one-time-use nonce feature. |
| 786 // Here server will send a 438 STALE_NONCE error message for | 817 // Here server will send a 438 STALE_NONCE error message for |
| 787 // every TURN transaction. | 818 // every TURN transaction. |
| 788 TEST_F(TurnPortTest, TestTurnConnectionUsingOTUNonce) { | 819 TEST_F(TurnPortTest, TestTurnConnectionUsingOTUNonce) { |
| 789 turn_server_.set_enable_otu_nonce(true); | 820 turn_server_.set_enable_otu_nonce(true); |
| 790 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr); | 821 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr); |
| 791 TestTurnConnection(); | 822 TestTurnConnection(); |
| 792 } | 823 } |
| 793 | 824 |
| 794 // Test that CreatePermissionRequest will be scheduled after the success | 825 // Test that CreatePermissionRequest will be scheduled after the success |
| 795 // of the first create permission request. | 826 // of the first create permission request and the request will get an |
| 827 // ErrorResponse if the ufrag and pwd are incorrect. |
| 796 TEST_F(TurnPortTest, TestRefreshCreatePermissionRequest) { | 828 TEST_F(TurnPortTest, TestRefreshCreatePermissionRequest) { |
| 797 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr); | 829 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr); |
| 798 | 830 PrepareTurnAndUdpPorts(); |
| 799 ASSERT_TRUE(turn_port_ != NULL); | |
| 800 turn_port_->PrepareAddress(); | |
| 801 ASSERT_TRUE_WAIT(turn_ready_, kTimeout); | |
| 802 CreateUdpPort(); | |
| 803 udp_port_->PrepareAddress(); | |
| 804 ASSERT_TRUE_WAIT(udp_ready_, kTimeout); | |
| 805 | 831 |
| 806 Connection* conn = turn_port_->CreateConnection(udp_port_->Candidates()[0], | 832 Connection* conn = turn_port_->CreateConnection(udp_port_->Candidates()[0], |
| 807 Port::ORIGIN_MESSAGE); | 833 Port::ORIGIN_MESSAGE); |
| 834 ConnectConnectionDestroyedSignal(conn); |
| 808 ASSERT_TRUE(conn != NULL); | 835 ASSERT_TRUE(conn != NULL); |
| 809 ASSERT_TRUE_WAIT(turn_create_permission_success_, kTimeout); | 836 ASSERT_TRUE_WAIT(turn_create_permission_success_, kTimeout); |
| 810 turn_create_permission_success_ = false; | 837 turn_create_permission_success_ = false; |
| 811 // A create-permission-request should be pending. | 838 // A create-permission-request should be pending. |
| 839 // After the next create-permission-response is received, it will schedule |
| 840 // another request with bad_ufrag and bad_pwd. |
| 841 cricket::RelayCredentials bad_credentials("bad_user", "bad_pwd"); |
| 842 turn_port_->set_credentials(bad_credentials); |
| 812 turn_port_->FlushRequests(); | 843 turn_port_->FlushRequests(); |
| 813 ASSERT_TRUE_WAIT(turn_create_permission_success_, kTimeout); | 844 ASSERT_TRUE_WAIT(turn_create_permission_success_, kTimeout); |
| 845 // Flush the requests again; the create-permission-request will fail. |
| 846 turn_port_->FlushRequests(); |
| 847 EXPECT_TRUE_WAIT(!turn_create_permission_success_, kTimeout); |
| 848 EXPECT_TRUE_WAIT(connection_destroyed_, kTimeout); |
| 849 } |
| 850 |
| 851 TEST_F(TurnPortTest, TestChannelBindGetErrorResponse) { |
| 852 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr); |
| 853 PrepareTurnAndUdpPorts(); |
| 854 Connection* conn1 = turn_port_->CreateConnection(udp_port_->Candidates()[0], |
| 855 Port::ORIGIN_MESSAGE); |
| 856 ASSERT_TRUE(conn1 != nullptr); |
| 857 Connection* conn2 = udp_port_->CreateConnection(turn_port_->Candidates()[0], |
| 858 Port::ORIGIN_MESSAGE); |
| 859 ASSERT_TRUE(conn2 != nullptr); |
| 860 ConnectConnectionDestroyedSignal(conn1); |
| 861 conn1->Ping(0); |
| 862 ASSERT_TRUE_WAIT(conn1->writable(), kTimeout); |
| 863 |
| 864 std::string data = "ABC"; |
| 865 conn1->Send(data.data(), data.length(), options); |
| 866 bool success = |
| 867 turn_port_->SetEntryChannelId(udp_port_->Candidates()[0].address(), -1); |
| 868 ASSERT_TRUE(success); |
| 869 // Next time when the binding request is sent, it will get an ErrorResponse. |
| 870 EXPECT_TRUE_WAIT(CheckConnectionDestroyed(), kTimeout); |
| 814 } | 871 } |
| 815 | 872 |
| 816 // Do a TURN allocation, establish a UDP connection, and send some data. | 873 // Do a TURN allocation, establish a UDP connection, and send some data. |
| 817 TEST_F(TurnPortTest, TestTurnSendDataTurnUdpToUdp) { | 874 TEST_F(TurnPortTest, TestTurnSendDataTurnUdpToUdp) { |
| 818 // Create ports and prepare addresses. | 875 // Create ports and prepare addresses. |
| 819 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr); | 876 CreateTurnPort(kTurnUsername, kTurnPassword, kTurnUdpProtoAddr); |
| 820 TestTurnSendData(); | 877 TestTurnSendData(); |
| 821 EXPECT_EQ(cricket::UDP_PROTOCOL_NAME, | 878 EXPECT_EQ(cricket::UDP_PROTOCOL_NAME, |
| 822 turn_port_->Candidates()[0].relay_protocol()); | 879 turn_port_->Candidates()[0].relay_protocol()); |
| 823 } | 880 } |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 928 turn_port_->PrepareAddress(); | 985 turn_port_->PrepareAddress(); |
| 929 ASSERT_TRUE_WAIT(turn_error_, kTimeout); | 986 ASSERT_TRUE_WAIT(turn_error_, kTimeout); |
| 930 EXPECT_TRUE(turn_port_->Candidates().empty()); | 987 EXPECT_TRUE(turn_port_->Candidates().empty()); |
| 931 turn_port_.reset(); | 988 turn_port_.reset(); |
| 932 rtc::Thread::Current()->Post(this, MSG_TESTFINISH); | 989 rtc::Thread::Current()->Post(this, MSG_TESTFINISH); |
| 933 // Waiting for above message to be processed. | 990 // Waiting for above message to be processed. |
| 934 ASSERT_TRUE_WAIT(test_finish_, kTimeout); | 991 ASSERT_TRUE_WAIT(test_finish_, kTimeout); |
| 935 EXPECT_EQ(last_fd_count, GetFDCount()); | 992 EXPECT_EQ(last_fd_count, GetFDCount()); |
| 936 } | 993 } |
| 937 #endif | 994 #endif |
| OLD | NEW |