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 | 10 |
(...skipping 2598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2609 delete set_receiving_client(nullptr); | 2609 delete set_receiving_client(nullptr); |
2610 } | 2610 } |
2611 | 2611 |
2612 class IceServerParsingTest : public testing::Test { | 2612 class IceServerParsingTest : public testing::Test { |
2613 public: | 2613 public: |
2614 // Convenience for parsing a single URL. | 2614 // Convenience for parsing a single URL. |
2615 bool ParseUrl(const std::string& url) { | 2615 bool ParseUrl(const std::string& url) { |
2616 return ParseUrl(url, std::string(), std::string()); | 2616 return ParseUrl(url, std::string(), std::string()); |
2617 } | 2617 } |
2618 | 2618 |
2619 bool ParseTurnUrl(const std::string& url) { | |
2620 return ParseUrl(url, "username", "password"); | |
2621 } | |
2622 | |
2623 bool ParseUrl(const std::string& url, | 2619 bool ParseUrl(const std::string& url, |
2624 const std::string& username, | 2620 const std::string& username, |
2625 const std::string& password) { | 2621 const std::string& password) { |
2626 PeerConnectionInterface::IceServers servers; | 2622 PeerConnectionInterface::IceServers servers; |
2627 PeerConnectionInterface::IceServer server; | 2623 PeerConnectionInterface::IceServer server; |
2628 server.urls.push_back(url); | 2624 server.urls.push_back(url); |
2629 server.username = username; | 2625 server.username = username; |
2630 server.password = password; | 2626 server.password = password; |
2631 servers.push_back(server); | 2627 servers.push_back(server); |
2632 return webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_) == | 2628 return webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_); |
2633 webrtc::RTCErrorType::NONE; | |
2634 } | 2629 } |
2635 | 2630 |
2636 protected: | 2631 protected: |
2637 cricket::ServerAddresses stun_servers_; | 2632 cricket::ServerAddresses stun_servers_; |
2638 std::vector<cricket::RelayServerConfig> turn_servers_; | 2633 std::vector<cricket::RelayServerConfig> turn_servers_; |
2639 }; | 2634 }; |
2640 | 2635 |
2641 // Make sure all STUN/TURN prefixes are parsed correctly. | 2636 // Make sure all STUN/TURN prefixes are parsed correctly. |
2642 TEST_F(IceServerParsingTest, ParseStunPrefixes) { | 2637 TEST_F(IceServerParsingTest, ParseStunPrefixes) { |
2643 EXPECT_TRUE(ParseUrl("stun:hostname")); | 2638 EXPECT_TRUE(ParseUrl("stun:hostname")); |
2644 EXPECT_EQ(1U, stun_servers_.size()); | 2639 EXPECT_EQ(1U, stun_servers_.size()); |
2645 EXPECT_EQ(0U, turn_servers_.size()); | 2640 EXPECT_EQ(0U, turn_servers_.size()); |
2646 stun_servers_.clear(); | 2641 stun_servers_.clear(); |
2647 | 2642 |
2648 EXPECT_TRUE(ParseUrl("stuns:hostname")); | 2643 EXPECT_TRUE(ParseUrl("stuns:hostname")); |
2649 EXPECT_EQ(1U, stun_servers_.size()); | 2644 EXPECT_EQ(1U, stun_servers_.size()); |
2650 EXPECT_EQ(0U, turn_servers_.size()); | 2645 EXPECT_EQ(0U, turn_servers_.size()); |
2651 stun_servers_.clear(); | 2646 stun_servers_.clear(); |
2652 | 2647 |
2653 EXPECT_TRUE(ParseTurnUrl("turn:hostname")); | 2648 EXPECT_TRUE(ParseUrl("turn:hostname")); |
2654 EXPECT_EQ(0U, stun_servers_.size()); | 2649 EXPECT_EQ(0U, stun_servers_.size()); |
2655 EXPECT_EQ(1U, turn_servers_.size()); | 2650 EXPECT_EQ(1U, turn_servers_.size()); |
2656 EXPECT_EQ(cricket::PROTO_UDP, turn_servers_[0].ports[0].proto); | 2651 EXPECT_EQ(cricket::PROTO_UDP, turn_servers_[0].ports[0].proto); |
2657 turn_servers_.clear(); | 2652 turn_servers_.clear(); |
2658 | 2653 |
2659 EXPECT_TRUE(ParseTurnUrl("turns:hostname")); | 2654 EXPECT_TRUE(ParseUrl("turns:hostname")); |
2660 EXPECT_EQ(0U, stun_servers_.size()); | 2655 EXPECT_EQ(0U, stun_servers_.size()); |
2661 EXPECT_EQ(1U, turn_servers_.size()); | 2656 EXPECT_EQ(1U, turn_servers_.size()); |
2662 EXPECT_EQ(cricket::PROTO_TLS, turn_servers_[0].ports[0].proto); | 2657 EXPECT_EQ(cricket::PROTO_TLS, turn_servers_[0].ports[0].proto); |
2663 turn_servers_.clear(); | 2658 turn_servers_.clear(); |
2664 | 2659 |
2665 // invalid prefixes | 2660 // invalid prefixes |
2666 EXPECT_FALSE(ParseUrl("stunn:hostname")); | 2661 EXPECT_FALSE(ParseUrl("stunn:hostname")); |
2667 EXPECT_FALSE(ParseUrl(":hostname")); | 2662 EXPECT_FALSE(ParseUrl(":hostname")); |
2668 EXPECT_FALSE(ParseUrl(":")); | 2663 EXPECT_FALSE(ParseUrl(":")); |
2669 EXPECT_FALSE(ParseUrl("")); | 2664 EXPECT_FALSE(ParseUrl("")); |
2670 } | 2665 } |
2671 | 2666 |
2672 TEST_F(IceServerParsingTest, VerifyDefaults) { | 2667 TEST_F(IceServerParsingTest, VerifyDefaults) { |
2673 // TURNS defaults | 2668 // TURNS defaults |
2674 EXPECT_TRUE(ParseTurnUrl("turns:hostname")); | 2669 EXPECT_TRUE(ParseUrl("turns:hostname")); |
2675 EXPECT_EQ(1U, turn_servers_.size()); | 2670 EXPECT_EQ(1U, turn_servers_.size()); |
2676 EXPECT_EQ(5349, turn_servers_[0].ports[0].address.port()); | 2671 EXPECT_EQ(5349, turn_servers_[0].ports[0].address.port()); |
2677 EXPECT_EQ(cricket::PROTO_TLS, turn_servers_[0].ports[0].proto); | 2672 EXPECT_EQ(cricket::PROTO_TLS, turn_servers_[0].ports[0].proto); |
2678 turn_servers_.clear(); | 2673 turn_servers_.clear(); |
2679 | 2674 |
2680 // TURN defaults | 2675 // TURN defaults |
2681 EXPECT_TRUE(ParseTurnUrl("turn:hostname")); | 2676 EXPECT_TRUE(ParseUrl("turn:hostname")); |
2682 EXPECT_EQ(1U, turn_servers_.size()); | 2677 EXPECT_EQ(1U, turn_servers_.size()); |
2683 EXPECT_EQ(3478, turn_servers_[0].ports[0].address.port()); | 2678 EXPECT_EQ(3478, turn_servers_[0].ports[0].address.port()); |
2684 EXPECT_EQ(cricket::PROTO_UDP, turn_servers_[0].ports[0].proto); | 2679 EXPECT_EQ(cricket::PROTO_UDP, turn_servers_[0].ports[0].proto); |
2685 turn_servers_.clear(); | 2680 turn_servers_.clear(); |
2686 | 2681 |
2687 // STUN defaults | 2682 // STUN defaults |
2688 EXPECT_TRUE(ParseUrl("stun:hostname")); | 2683 EXPECT_TRUE(ParseUrl("stun:hostname")); |
2689 EXPECT_EQ(1U, stun_servers_.size()); | 2684 EXPECT_EQ(1U, stun_servers_.size()); |
2690 EXPECT_EQ(3478, stun_servers_.begin()->port()); | 2685 EXPECT_EQ(3478, stun_servers_.begin()->port()); |
2691 stun_servers_.clear(); | 2686 stun_servers_.clear(); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2736 EXPECT_FALSE(ParseUrl("stun:hostname:port:more")); | 2731 EXPECT_FALSE(ParseUrl("stun:hostname:port:more")); |
2737 EXPECT_FALSE(ParseUrl("stun:hostname:port more")); | 2732 EXPECT_FALSE(ParseUrl("stun:hostname:port more")); |
2738 EXPECT_FALSE(ParseUrl("stun:hostname:")); | 2733 EXPECT_FALSE(ParseUrl("stun:hostname:")); |
2739 EXPECT_FALSE(ParseUrl("stun:[1:2:3:4:5:6:7:8]junk:1000")); | 2734 EXPECT_FALSE(ParseUrl("stun:[1:2:3:4:5:6:7:8]junk:1000")); |
2740 EXPECT_FALSE(ParseUrl("stun::5555")); | 2735 EXPECT_FALSE(ParseUrl("stun::5555")); |
2741 EXPECT_FALSE(ParseUrl("stun:")); | 2736 EXPECT_FALSE(ParseUrl("stun:")); |
2742 } | 2737 } |
2743 | 2738 |
2744 // Test parsing the "?transport=xxx" part of the URL. | 2739 // Test parsing the "?transport=xxx" part of the URL. |
2745 TEST_F(IceServerParsingTest, ParseTransport) { | 2740 TEST_F(IceServerParsingTest, ParseTransport) { |
2746 EXPECT_TRUE(ParseTurnUrl("turn:hostname:1234?transport=tcp")); | 2741 EXPECT_TRUE(ParseUrl("turn:hostname:1234?transport=tcp")); |
2747 EXPECT_EQ(1U, turn_servers_.size()); | 2742 EXPECT_EQ(1U, turn_servers_.size()); |
2748 EXPECT_EQ(cricket::PROTO_TCP, turn_servers_[0].ports[0].proto); | 2743 EXPECT_EQ(cricket::PROTO_TCP, turn_servers_[0].ports[0].proto); |
2749 turn_servers_.clear(); | 2744 turn_servers_.clear(); |
2750 | 2745 |
2751 EXPECT_TRUE(ParseTurnUrl("turn:hostname?transport=udp")); | 2746 EXPECT_TRUE(ParseUrl("turn:hostname?transport=udp")); |
2752 EXPECT_EQ(1U, turn_servers_.size()); | 2747 EXPECT_EQ(1U, turn_servers_.size()); |
2753 EXPECT_EQ(cricket::PROTO_UDP, turn_servers_[0].ports[0].proto); | 2748 EXPECT_EQ(cricket::PROTO_UDP, turn_servers_[0].ports[0].proto); |
2754 turn_servers_.clear(); | 2749 turn_servers_.clear(); |
2755 | 2750 |
2756 EXPECT_FALSE(ParseTurnUrl("turn:hostname?transport=invalid")); | 2751 EXPECT_FALSE(ParseUrl("turn:hostname?transport=invalid")); |
2757 EXPECT_FALSE(ParseTurnUrl("turn:hostname?transport=")); | 2752 EXPECT_FALSE(ParseUrl("turn:hostname?transport=")); |
2758 EXPECT_FALSE(ParseTurnUrl("turn:hostname?=")); | 2753 EXPECT_FALSE(ParseUrl("turn:hostname?=")); |
2759 EXPECT_FALSE(ParseTurnUrl("?")); | 2754 EXPECT_FALSE(ParseUrl("?")); |
2760 } | 2755 } |
2761 | 2756 |
2762 // Test parsing ICE username contained in URL. | 2757 // Test parsing ICE username contained in URL. |
2763 TEST_F(IceServerParsingTest, ParseUsername) { | 2758 TEST_F(IceServerParsingTest, ParseUsername) { |
2764 EXPECT_TRUE(ParseTurnUrl("turn:user@hostname")); | 2759 EXPECT_TRUE(ParseUrl("turn:user@hostname")); |
2765 EXPECT_EQ(1U, turn_servers_.size()); | 2760 EXPECT_EQ(1U, turn_servers_.size()); |
2766 EXPECT_EQ("user", turn_servers_[0].credentials.username); | 2761 EXPECT_EQ("user", turn_servers_[0].credentials.username); |
2767 turn_servers_.clear(); | 2762 turn_servers_.clear(); |
2768 | 2763 |
2769 EXPECT_FALSE(ParseTurnUrl("turn:@hostname")); | 2764 EXPECT_FALSE(ParseUrl("turn:@hostname")); |
2770 EXPECT_FALSE(ParseTurnUrl("turn:username@")); | 2765 EXPECT_FALSE(ParseUrl("turn:username@")); |
2771 EXPECT_FALSE(ParseTurnUrl("turn:@")); | 2766 EXPECT_FALSE(ParseUrl("turn:@")); |
2772 EXPECT_FALSE(ParseTurnUrl("turn:user@name@hostname")); | 2767 EXPECT_FALSE(ParseUrl("turn:user@name@hostname")); |
2773 } | 2768 } |
2774 | 2769 |
2775 // Test that username and password from IceServer is copied into the resulting | 2770 // Test that username and password from IceServer is copied into the resulting |
2776 // RelayServerConfig. | 2771 // RelayServerConfig. |
2777 TEST_F(IceServerParsingTest, CopyUsernameAndPasswordFromIceServer) { | 2772 TEST_F(IceServerParsingTest, CopyUsernameAndPasswordFromIceServer) { |
2778 EXPECT_TRUE(ParseUrl("turn:hostname", "username", "password")); | 2773 EXPECT_TRUE(ParseUrl("turn:hostname", "username", "password")); |
2779 EXPECT_EQ(1U, turn_servers_.size()); | 2774 EXPECT_EQ(1U, turn_servers_.size()); |
2780 EXPECT_EQ("username", turn_servers_[0].credentials.username); | 2775 EXPECT_EQ("username", turn_servers_[0].credentials.username); |
2781 EXPECT_EQ("password", turn_servers_[0].credentials.password); | 2776 EXPECT_EQ("password", turn_servers_[0].credentials.password); |
2782 } | 2777 } |
2783 | 2778 |
2784 // Ensure that if a server has multiple URLs, each one is parsed. | 2779 // Ensure that if a server has multiple URLs, each one is parsed. |
2785 TEST_F(IceServerParsingTest, ParseMultipleUrls) { | 2780 TEST_F(IceServerParsingTest, ParseMultipleUrls) { |
2786 PeerConnectionInterface::IceServers servers; | 2781 PeerConnectionInterface::IceServers servers; |
2787 PeerConnectionInterface::IceServer server; | 2782 PeerConnectionInterface::IceServer server; |
2788 server.urls.push_back("stun:hostname"); | 2783 server.urls.push_back("stun:hostname"); |
2789 server.urls.push_back("turn:hostname"); | 2784 server.urls.push_back("turn:hostname"); |
2790 server.username = "foo"; | |
2791 server.password = "bar"; | |
2792 servers.push_back(server); | 2785 servers.push_back(server); |
2793 EXPECT_EQ(webrtc::RTCErrorType::NONE, | 2786 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_)); |
2794 webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_)); | |
2795 EXPECT_EQ(1U, stun_servers_.size()); | 2787 EXPECT_EQ(1U, stun_servers_.size()); |
2796 EXPECT_EQ(1U, turn_servers_.size()); | 2788 EXPECT_EQ(1U, turn_servers_.size()); |
2797 } | 2789 } |
2798 | 2790 |
2799 // Ensure that TURN servers are given unique priorities, | 2791 // Ensure that TURN servers are given unique priorities, |
2800 // so that their resulting candidates have unique priorities. | 2792 // so that their resulting candidates have unique priorities. |
2801 TEST_F(IceServerParsingTest, TurnServerPrioritiesUnique) { | 2793 TEST_F(IceServerParsingTest, TurnServerPrioritiesUnique) { |
2802 PeerConnectionInterface::IceServers servers; | 2794 PeerConnectionInterface::IceServers servers; |
2803 PeerConnectionInterface::IceServer server; | 2795 PeerConnectionInterface::IceServer server; |
2804 server.urls.push_back("turn:hostname"); | 2796 server.urls.push_back("turn:hostname"); |
2805 server.urls.push_back("turn:hostname2"); | 2797 server.urls.push_back("turn:hostname2"); |
2806 server.username = "foo"; | |
2807 server.password = "bar"; | |
2808 servers.push_back(server); | 2798 servers.push_back(server); |
2809 EXPECT_EQ(webrtc::RTCErrorType::NONE, | 2799 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_)); |
2810 webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_)); | |
2811 EXPECT_EQ(2U, turn_servers_.size()); | 2800 EXPECT_EQ(2U, turn_servers_.size()); |
2812 EXPECT_NE(turn_servers_[0].priority, turn_servers_[1].priority); | 2801 EXPECT_NE(turn_servers_[0].priority, turn_servers_[1].priority); |
2813 } | 2802 } |
2814 | 2803 |
2815 #endif // if !defined(THREAD_SANITIZER) | 2804 #endif // if !defined(THREAD_SANITIZER) |
2816 | 2805 |
2817 } // namespace | 2806 } // namespace |
OLD | NEW |