xref: /aosp_15_r20/external/webrtc/pc/ice_server_parsing_unittest.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright 2012 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #include "pc/ice_server_parsing.h"
12*d9f75844SAndroid Build Coastguard Worker 
13*d9f75844SAndroid Build Coastguard Worker #include <string>
14*d9f75844SAndroid Build Coastguard Worker #include <vector>
15*d9f75844SAndroid Build Coastguard Worker 
16*d9f75844SAndroid Build Coastguard Worker #include "p2p/base/port_interface.h"
17*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/ip_address.h"
18*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/socket_address.h"
19*d9f75844SAndroid Build Coastguard Worker #include "test/gtest.h"
20*d9f75844SAndroid Build Coastguard Worker 
21*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
22*d9f75844SAndroid Build Coastguard Worker 
23*d9f75844SAndroid Build Coastguard Worker class IceServerParsingTest : public ::testing::Test {
24*d9f75844SAndroid Build Coastguard Worker  public:
25*d9f75844SAndroid Build Coastguard Worker   // Convenience functions for parsing a single URL. Result is stored in
26*d9f75844SAndroid Build Coastguard Worker   // `stun_servers_` and `turn_servers_`.
ParseUrl(const std::string & url)27*d9f75844SAndroid Build Coastguard Worker   bool ParseUrl(const std::string& url) {
28*d9f75844SAndroid Build Coastguard Worker     return ParseUrl(url, std::string(), std::string());
29*d9f75844SAndroid Build Coastguard Worker   }
30*d9f75844SAndroid Build Coastguard Worker 
ParseTurnUrl(const std::string & url)31*d9f75844SAndroid Build Coastguard Worker   bool ParseTurnUrl(const std::string& url) {
32*d9f75844SAndroid Build Coastguard Worker     return ParseUrl(url, "username", "password");
33*d9f75844SAndroid Build Coastguard Worker   }
34*d9f75844SAndroid Build Coastguard Worker 
ParseUrl(const std::string & url,const std::string & username,const std::string & password)35*d9f75844SAndroid Build Coastguard Worker   bool ParseUrl(const std::string& url,
36*d9f75844SAndroid Build Coastguard Worker                 const std::string& username,
37*d9f75844SAndroid Build Coastguard Worker                 const std::string& password) {
38*d9f75844SAndroid Build Coastguard Worker     return ParseUrl(
39*d9f75844SAndroid Build Coastguard Worker         url, username, password,
40*d9f75844SAndroid Build Coastguard Worker         PeerConnectionInterface::TlsCertPolicy::kTlsCertPolicySecure);
41*d9f75844SAndroid Build Coastguard Worker   }
42*d9f75844SAndroid Build Coastguard Worker 
ParseUrl(const std::string & url,const std::string & username,const std::string & password,PeerConnectionInterface::TlsCertPolicy tls_certificate_policy)43*d9f75844SAndroid Build Coastguard Worker   bool ParseUrl(const std::string& url,
44*d9f75844SAndroid Build Coastguard Worker                 const std::string& username,
45*d9f75844SAndroid Build Coastguard Worker                 const std::string& password,
46*d9f75844SAndroid Build Coastguard Worker                 PeerConnectionInterface::TlsCertPolicy tls_certificate_policy) {
47*d9f75844SAndroid Build Coastguard Worker     return ParseUrl(url, username, password, tls_certificate_policy, "");
48*d9f75844SAndroid Build Coastguard Worker   }
49*d9f75844SAndroid Build Coastguard Worker 
ParseUrl(const std::string & url,const std::string & username,const std::string & password,PeerConnectionInterface::TlsCertPolicy tls_certificate_policy,const std::string & hostname)50*d9f75844SAndroid Build Coastguard Worker   bool ParseUrl(const std::string& url,
51*d9f75844SAndroid Build Coastguard Worker                 const std::string& username,
52*d9f75844SAndroid Build Coastguard Worker                 const std::string& password,
53*d9f75844SAndroid Build Coastguard Worker                 PeerConnectionInterface::TlsCertPolicy tls_certificate_policy,
54*d9f75844SAndroid Build Coastguard Worker                 const std::string& hostname) {
55*d9f75844SAndroid Build Coastguard Worker     stun_servers_.clear();
56*d9f75844SAndroid Build Coastguard Worker     turn_servers_.clear();
57*d9f75844SAndroid Build Coastguard Worker     PeerConnectionInterface::IceServers servers;
58*d9f75844SAndroid Build Coastguard Worker     PeerConnectionInterface::IceServer server;
59*d9f75844SAndroid Build Coastguard Worker     server.urls.push_back(url);
60*d9f75844SAndroid Build Coastguard Worker     server.username = username;
61*d9f75844SAndroid Build Coastguard Worker     server.password = password;
62*d9f75844SAndroid Build Coastguard Worker     server.tls_cert_policy = tls_certificate_policy;
63*d9f75844SAndroid Build Coastguard Worker     server.hostname = hostname;
64*d9f75844SAndroid Build Coastguard Worker     servers.push_back(server);
65*d9f75844SAndroid Build Coastguard Worker     return webrtc::ParseIceServersOrError(servers, &stun_servers_,
66*d9f75844SAndroid Build Coastguard Worker                                           &turn_servers_)
67*d9f75844SAndroid Build Coastguard Worker         .ok();
68*d9f75844SAndroid Build Coastguard Worker   }
69*d9f75844SAndroid Build Coastguard Worker 
70*d9f75844SAndroid Build Coastguard Worker  protected:
71*d9f75844SAndroid Build Coastguard Worker   cricket::ServerAddresses stun_servers_;
72*d9f75844SAndroid Build Coastguard Worker   std::vector<cricket::RelayServerConfig> turn_servers_;
73*d9f75844SAndroid Build Coastguard Worker };
74*d9f75844SAndroid Build Coastguard Worker 
75*d9f75844SAndroid Build Coastguard Worker // Make sure all STUN/TURN prefixes are parsed correctly.
TEST_F(IceServerParsingTest,ParseStunPrefixes)76*d9f75844SAndroid Build Coastguard Worker TEST_F(IceServerParsingTest, ParseStunPrefixes) {
77*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl("stun:hostname"));
78*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, stun_servers_.size());
79*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0U, turn_servers_.size());
80*d9f75844SAndroid Build Coastguard Worker 
81*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl("stuns:hostname"));
82*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, stun_servers_.size());
83*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0U, turn_servers_.size());
84*d9f75844SAndroid Build Coastguard Worker 
85*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseTurnUrl("turn:hostname"));
86*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0U, stun_servers_.size());
87*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, turn_servers_.size());
88*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(cricket::PROTO_UDP, turn_servers_[0].ports[0].proto);
89*d9f75844SAndroid Build Coastguard Worker 
90*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseTurnUrl("turns:hostname"));
91*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0U, stun_servers_.size());
92*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, turn_servers_.size());
93*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(cricket::PROTO_TLS, turn_servers_[0].ports[0].proto);
94*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(turn_servers_[0].tls_cert_policy ==
95*d9f75844SAndroid Build Coastguard Worker               cricket::TlsCertPolicy::TLS_CERT_POLICY_SECURE);
96*d9f75844SAndroid Build Coastguard Worker 
97*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl(
98*d9f75844SAndroid Build Coastguard Worker       "turns:hostname", "username", "password",
99*d9f75844SAndroid Build Coastguard Worker       PeerConnectionInterface::TlsCertPolicy::kTlsCertPolicyInsecureNoCheck));
100*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(0U, stun_servers_.size());
101*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, turn_servers_.size());
102*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(turn_servers_[0].tls_cert_policy ==
103*d9f75844SAndroid Build Coastguard Worker               cricket::TlsCertPolicy::TLS_CERT_POLICY_INSECURE_NO_CHECK);
104*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(cricket::PROTO_TLS, turn_servers_[0].ports[0].proto);
105*d9f75844SAndroid Build Coastguard Worker 
106*d9f75844SAndroid Build Coastguard Worker   // invalid prefixes
107*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stunn:hostname"));
108*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl(":hostname"));
109*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl(":"));
110*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl(""));
111*d9f75844SAndroid Build Coastguard Worker }
112*d9f75844SAndroid Build Coastguard Worker 
TEST_F(IceServerParsingTest,VerifyDefaults)113*d9f75844SAndroid Build Coastguard Worker TEST_F(IceServerParsingTest, VerifyDefaults) {
114*d9f75844SAndroid Build Coastguard Worker   // TURNS defaults
115*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseTurnUrl("turns:hostname"));
116*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, turn_servers_.size());
117*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(5349, turn_servers_[0].ports[0].address.port());
118*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(cricket::PROTO_TLS, turn_servers_[0].ports[0].proto);
119*d9f75844SAndroid Build Coastguard Worker 
120*d9f75844SAndroid Build Coastguard Worker   // TURN defaults
121*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseTurnUrl("turn:hostname"));
122*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, turn_servers_.size());
123*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(3478, turn_servers_[0].ports[0].address.port());
124*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(cricket::PROTO_UDP, turn_servers_[0].ports[0].proto);
125*d9f75844SAndroid Build Coastguard Worker 
126*d9f75844SAndroid Build Coastguard Worker   // STUN defaults
127*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl("stun:hostname"));
128*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, stun_servers_.size());
129*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(3478, stun_servers_.begin()->port());
130*d9f75844SAndroid Build Coastguard Worker }
131*d9f75844SAndroid Build Coastguard Worker 
132*d9f75844SAndroid Build Coastguard Worker // Check that the 6 combinations of IPv4/IPv6/hostname and with/without port
133*d9f75844SAndroid Build Coastguard Worker // can be parsed correctly.
TEST_F(IceServerParsingTest,ParseHostnameAndPort)134*d9f75844SAndroid Build Coastguard Worker TEST_F(IceServerParsingTest, ParseHostnameAndPort) {
135*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl("stun:1.2.3.4:1234"));
136*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, stun_servers_.size());
137*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", stun_servers_.begin()->hostname());
138*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1234, stun_servers_.begin()->port());
139*d9f75844SAndroid Build Coastguard Worker 
140*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl("stun:[1:2:3:4:5:6:7:8]:4321"));
141*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, stun_servers_.size());
142*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1:2:3:4:5:6:7:8", stun_servers_.begin()->hostname());
143*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(4321, stun_servers_.begin()->port());
144*d9f75844SAndroid Build Coastguard Worker 
145*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl("stun:hostname:9999"));
146*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, stun_servers_.size());
147*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("hostname", stun_servers_.begin()->hostname());
148*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(9999, stun_servers_.begin()->port());
149*d9f75844SAndroid Build Coastguard Worker 
150*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl("stun:1.2.3.4"));
151*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, stun_servers_.size());
152*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", stun_servers_.begin()->hostname());
153*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(3478, stun_servers_.begin()->port());
154*d9f75844SAndroid Build Coastguard Worker 
155*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl("stun:[1:2:3:4:5:6:7:8]"));
156*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, stun_servers_.size());
157*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1:2:3:4:5:6:7:8", stun_servers_.begin()->hostname());
158*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(3478, stun_servers_.begin()->port());
159*d9f75844SAndroid Build Coastguard Worker 
160*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl("stun:hostname"));
161*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, stun_servers_.size());
162*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("hostname", stun_servers_.begin()->hostname());
163*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(3478, stun_servers_.begin()->port());
164*d9f75844SAndroid Build Coastguard Worker 
165*d9f75844SAndroid Build Coastguard Worker   // Both TURN IP and host exist
166*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(
167*d9f75844SAndroid Build Coastguard Worker       ParseUrl("turn:1.2.3.4:1234", "username", "password",
168*d9f75844SAndroid Build Coastguard Worker                PeerConnectionInterface::TlsCertPolicy::kTlsCertPolicySecure,
169*d9f75844SAndroid Build Coastguard Worker                "hostname"));
170*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, turn_servers_.size());
171*d9f75844SAndroid Build Coastguard Worker   rtc::SocketAddress address = turn_servers_[0].ports[0].address;
172*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("hostname", address.hostname());
173*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1234, address.port());
174*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(address.IsUnresolvedIP());
175*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("1.2.3.4", address.ipaddr().ToString());
176*d9f75844SAndroid Build Coastguard Worker 
177*d9f75844SAndroid Build Coastguard Worker   // Try some invalid hostname:port strings.
178*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun:hostname:99a99"));
179*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun:hostname:-1"));
180*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun:hostname:port:more"));
181*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun:hostname:port more"));
182*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun:hostname:"));
183*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun:[1:2:3:4:5:6:7:8]junk:1000"));
184*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun::5555"));
185*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun:"));
186*d9f75844SAndroid Build Coastguard Worker   // Test illegal URLs according to RFC 3986 (URI generic syntax)
187*d9f75844SAndroid Build Coastguard Worker   // and RFC 7064 (URI schemes for STUN and TURN)
188*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun:/hostname"));  // / is not allowed
189*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun:?hostname"));  // ? is not allowed
190*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseUrl("stun:#hostname"));  // # is not allowed
191*d9f75844SAndroid Build Coastguard Worker }
192*d9f75844SAndroid Build Coastguard Worker 
193*d9f75844SAndroid Build Coastguard Worker // Test parsing the "?transport=xxx" part of the URL.
TEST_F(IceServerParsingTest,ParseTransport)194*d9f75844SAndroid Build Coastguard Worker TEST_F(IceServerParsingTest, ParseTransport) {
195*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseTurnUrl("turn:hostname:1234?transport=tcp"));
196*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, turn_servers_.size());
197*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(cricket::PROTO_TCP, turn_servers_[0].ports[0].proto);
198*d9f75844SAndroid Build Coastguard Worker 
199*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseTurnUrl("turn:hostname?transport=udp"));
200*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, turn_servers_.size());
201*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(cricket::PROTO_UDP, turn_servers_[0].ports[0].proto);
202*d9f75844SAndroid Build Coastguard Worker 
203*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseTurnUrl("turn:hostname?transport=invalid"));
204*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseTurnUrl("turn:hostname?transport="));
205*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseTurnUrl("turn:hostname?="));
206*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseTurnUrl("turn:hostname?"));
207*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseTurnUrl("?"));
208*d9f75844SAndroid Build Coastguard Worker }
209*d9f75844SAndroid Build Coastguard Worker 
210*d9f75844SAndroid Build Coastguard Worker // Reject pre-RFC 7065 syntax with ICE username contained in URL.
TEST_F(IceServerParsingTest,ParseRejectsUsername)211*d9f75844SAndroid Build Coastguard Worker TEST_F(IceServerParsingTest, ParseRejectsUsername) {
212*d9f75844SAndroid Build Coastguard Worker   EXPECT_FALSE(ParseTurnUrl("turn:user@hostname"));
213*d9f75844SAndroid Build Coastguard Worker }
214*d9f75844SAndroid Build Coastguard Worker 
215*d9f75844SAndroid Build Coastguard Worker // Test that username and password from IceServer is copied into the resulting
216*d9f75844SAndroid Build Coastguard Worker // RelayServerConfig.
TEST_F(IceServerParsingTest,CopyUsernameAndPasswordFromIceServer)217*d9f75844SAndroid Build Coastguard Worker TEST_F(IceServerParsingTest, CopyUsernameAndPasswordFromIceServer) {
218*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(ParseUrl("turn:hostname", "username", "password"));
219*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, turn_servers_.size());
220*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("username", turn_servers_[0].credentials.username);
221*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ("password", turn_servers_[0].credentials.password);
222*d9f75844SAndroid Build Coastguard Worker }
223*d9f75844SAndroid Build Coastguard Worker 
224*d9f75844SAndroid Build Coastguard Worker // Ensure that if a server has multiple URLs, each one is parsed.
TEST_F(IceServerParsingTest,ParseMultipleUrls)225*d9f75844SAndroid Build Coastguard Worker TEST_F(IceServerParsingTest, ParseMultipleUrls) {
226*d9f75844SAndroid Build Coastguard Worker   PeerConnectionInterface::IceServers servers;
227*d9f75844SAndroid Build Coastguard Worker   PeerConnectionInterface::IceServer server;
228*d9f75844SAndroid Build Coastguard Worker   server.urls.push_back("stun:hostname");
229*d9f75844SAndroid Build Coastguard Worker   server.urls.push_back("turn:hostname");
230*d9f75844SAndroid Build Coastguard Worker   server.username = "foo";
231*d9f75844SAndroid Build Coastguard Worker   server.password = "bar";
232*d9f75844SAndroid Build Coastguard Worker   servers.push_back(server);
233*d9f75844SAndroid Build Coastguard Worker   EXPECT_TRUE(
234*d9f75844SAndroid Build Coastguard Worker       webrtc::ParseIceServersOrError(servers, &stun_servers_, &turn_servers_)
235*d9f75844SAndroid Build Coastguard Worker           .ok());
236*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, stun_servers_.size());
237*d9f75844SAndroid Build Coastguard Worker   EXPECT_EQ(1U, turn_servers_.size());
238*d9f75844SAndroid Build Coastguard Worker }
239*d9f75844SAndroid Build Coastguard Worker 
240*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
241