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