xref: /aosp_15_r20/external/cronet/net/nqe/socket_watcher_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "net/nqe/socket_watcher.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "base/functional/bind.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/run_loop.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/task/single_thread_task_runner.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/test/simple_test_tick_clock.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
12*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
13*6777b538SAndroid Build Coastguard Worker #include "net/base/ip_address.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/socket/socket_performance_watcher_factory.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/test/test_with_task_environment.h"
16*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker namespace net::nqe::internal {
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker namespace {
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker class NetworkQualitySocketWatcherTest : public TestWithTaskEnvironment {
23*6777b538SAndroid Build Coastguard Worker  public:
24*6777b538SAndroid Build Coastguard Worker   NetworkQualitySocketWatcherTest(const NetworkQualitySocketWatcherTest&) =
25*6777b538SAndroid Build Coastguard Worker       delete;
26*6777b538SAndroid Build Coastguard Worker   NetworkQualitySocketWatcherTest& operator=(
27*6777b538SAndroid Build Coastguard Worker       const NetworkQualitySocketWatcherTest&) = delete;
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker  protected:
NetworkQualitySocketWatcherTest()30*6777b538SAndroid Build Coastguard Worker   NetworkQualitySocketWatcherTest() { ResetExpectedCallbackParams(); }
~NetworkQualitySocketWatcherTest()31*6777b538SAndroid Build Coastguard Worker   ~NetworkQualitySocketWatcherTest() override { ResetExpectedCallbackParams(); }
32*6777b538SAndroid Build Coastguard Worker 
OnUpdatedRTTAvailableStoreParams(SocketPerformanceWatcherFactory::Protocol protocol,const base::TimeDelta & rtt,const std::optional<IPHash> & host)33*6777b538SAndroid Build Coastguard Worker   static void OnUpdatedRTTAvailableStoreParams(
34*6777b538SAndroid Build Coastguard Worker       SocketPerformanceWatcherFactory::Protocol protocol,
35*6777b538SAndroid Build Coastguard Worker       const base::TimeDelta& rtt,
36*6777b538SAndroid Build Coastguard Worker       const std::optional<IPHash>& host) {
37*6777b538SAndroid Build Coastguard Worker     // Need to verify before another callback is executed, or explicitly call
38*6777b538SAndroid Build Coastguard Worker     // |ResetCallbackParams()|.
39*6777b538SAndroid Build Coastguard Worker     ASSERT_FALSE(callback_executed_);
40*6777b538SAndroid Build Coastguard Worker     callback_rtt_ = rtt;
41*6777b538SAndroid Build Coastguard Worker     callback_host_ = host;
42*6777b538SAndroid Build Coastguard Worker     callback_executed_ = true;
43*6777b538SAndroid Build Coastguard Worker   }
44*6777b538SAndroid Build Coastguard Worker 
OnUpdatedRTTAvailable(SocketPerformanceWatcherFactory::Protocol protocol,const base::TimeDelta & rtt,const std::optional<IPHash> & host)45*6777b538SAndroid Build Coastguard Worker   static void OnUpdatedRTTAvailable(
46*6777b538SAndroid Build Coastguard Worker       SocketPerformanceWatcherFactory::Protocol protocol,
47*6777b538SAndroid Build Coastguard Worker       const base::TimeDelta& rtt,
48*6777b538SAndroid Build Coastguard Worker       const std::optional<IPHash>& host) {
49*6777b538SAndroid Build Coastguard Worker     // Need to verify before another callback is executed, or explicitly call
50*6777b538SAndroid Build Coastguard Worker     // |ResetCallbackParams()|.
51*6777b538SAndroid Build Coastguard Worker     ASSERT_FALSE(callback_executed_);
52*6777b538SAndroid Build Coastguard Worker     callback_executed_ = true;
53*6777b538SAndroid Build Coastguard Worker   }
54*6777b538SAndroid Build Coastguard Worker 
SetShouldNotifyRTTCallback(bool value)55*6777b538SAndroid Build Coastguard Worker   static void SetShouldNotifyRTTCallback(bool value) {
56*6777b538SAndroid Build Coastguard Worker     should_notify_rtt_callback_ = value;
57*6777b538SAndroid Build Coastguard Worker   }
58*6777b538SAndroid Build Coastguard Worker 
ShouldNotifyRTTCallback(base::TimeTicks now)59*6777b538SAndroid Build Coastguard Worker   static bool ShouldNotifyRTTCallback(base::TimeTicks now) {
60*6777b538SAndroid Build Coastguard Worker     return should_notify_rtt_callback_;
61*6777b538SAndroid Build Coastguard Worker   }
62*6777b538SAndroid Build Coastguard Worker 
VerifyCallbackParams(const base::TimeDelta & rtt,const std::optional<IPHash> & host)63*6777b538SAndroid Build Coastguard Worker   static void VerifyCallbackParams(const base::TimeDelta& rtt,
64*6777b538SAndroid Build Coastguard Worker                                    const std::optional<IPHash>& host) {
65*6777b538SAndroid Build Coastguard Worker     ASSERT_TRUE(callback_executed_);
66*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(rtt, callback_rtt_);
67*6777b538SAndroid Build Coastguard Worker     if (host)
68*6777b538SAndroid Build Coastguard Worker       EXPECT_EQ(host, callback_host_);
69*6777b538SAndroid Build Coastguard Worker     else
70*6777b538SAndroid Build Coastguard Worker       EXPECT_FALSE(callback_host_.has_value());
71*6777b538SAndroid Build Coastguard Worker     ResetExpectedCallbackParams();
72*6777b538SAndroid Build Coastguard Worker   }
73*6777b538SAndroid Build Coastguard Worker 
ResetExpectedCallbackParams()74*6777b538SAndroid Build Coastguard Worker   static void ResetExpectedCallbackParams() {
75*6777b538SAndroid Build Coastguard Worker     callback_rtt_ = base::Milliseconds(0);
76*6777b538SAndroid Build Coastguard Worker     callback_host_ = std::nullopt;
77*6777b538SAndroid Build Coastguard Worker     callback_executed_ = false;
78*6777b538SAndroid Build Coastguard Worker     should_notify_rtt_callback_ = false;
79*6777b538SAndroid Build Coastguard Worker   }
80*6777b538SAndroid Build Coastguard Worker 
callback_rtt()81*6777b538SAndroid Build Coastguard Worker   static base::TimeDelta callback_rtt() { return callback_rtt_; }
82*6777b538SAndroid Build Coastguard Worker 
83*6777b538SAndroid Build Coastguard Worker  private:
84*6777b538SAndroid Build Coastguard Worker   static base::TimeDelta callback_rtt_;
85*6777b538SAndroid Build Coastguard Worker   static std::optional<IPHash> callback_host_;
86*6777b538SAndroid Build Coastguard Worker   static bool callback_executed_;
87*6777b538SAndroid Build Coastguard Worker   static bool should_notify_rtt_callback_;
88*6777b538SAndroid Build Coastguard Worker };
89*6777b538SAndroid Build Coastguard Worker 
90*6777b538SAndroid Build Coastguard Worker base::TimeDelta NetworkQualitySocketWatcherTest::callback_rtt_ =
91*6777b538SAndroid Build Coastguard Worker     base::Milliseconds(0);
92*6777b538SAndroid Build Coastguard Worker 
93*6777b538SAndroid Build Coastguard Worker std::optional<IPHash> NetworkQualitySocketWatcherTest::callback_host_ =
94*6777b538SAndroid Build Coastguard Worker     std::nullopt;
95*6777b538SAndroid Build Coastguard Worker 
96*6777b538SAndroid Build Coastguard Worker bool NetworkQualitySocketWatcherTest::callback_executed_ = false;
97*6777b538SAndroid Build Coastguard Worker 
98*6777b538SAndroid Build Coastguard Worker bool NetworkQualitySocketWatcherTest::should_notify_rtt_callback_ = false;
99*6777b538SAndroid Build Coastguard Worker 
100*6777b538SAndroid Build Coastguard Worker // Verify that the buffer size is never exceeded.
TEST_F(NetworkQualitySocketWatcherTest,NotificationsThrottled)101*6777b538SAndroid Build Coastguard Worker TEST_F(NetworkQualitySocketWatcherTest, NotificationsThrottled) {
102*6777b538SAndroid Build Coastguard Worker   base::SimpleTestTickClock tick_clock;
103*6777b538SAndroid Build Coastguard Worker   tick_clock.SetNowTicks(base::TimeTicks::Now());
104*6777b538SAndroid Build Coastguard Worker 
105*6777b538SAndroid Build Coastguard Worker   // Use a public IP address so that the socket watcher runs the RTT callback.
106*6777b538SAndroid Build Coastguard Worker   IPAddress ip_address;
107*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(ip_address.AssignFromIPLiteral("157.0.0.1"));
108*6777b538SAndroid Build Coastguard Worker 
109*6777b538SAndroid Build Coastguard Worker   SocketWatcher socket_watcher(
110*6777b538SAndroid Build Coastguard Worker       SocketPerformanceWatcherFactory::PROTOCOL_TCP, ip_address,
111*6777b538SAndroid Build Coastguard Worker       base::Milliseconds(2000), false,
112*6777b538SAndroid Build Coastguard Worker       base::SingleThreadTaskRunner::GetCurrentDefault(),
113*6777b538SAndroid Build Coastguard Worker       base::BindRepeating(OnUpdatedRTTAvailable),
114*6777b538SAndroid Build Coastguard Worker       base::BindRepeating(ShouldNotifyRTTCallback), &tick_clock);
115*6777b538SAndroid Build Coastguard Worker 
116*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(socket_watcher.ShouldNotifyUpdatedRTT());
117*6777b538SAndroid Build Coastguard Worker   socket_watcher.OnUpdatedRTTAvailable(base::Seconds(10));
118*6777b538SAndroid Build Coastguard Worker   base::RunLoop().RunUntilIdle();
119*6777b538SAndroid Build Coastguard Worker   ResetExpectedCallbackParams();
120*6777b538SAndroid Build Coastguard Worker 
121*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(socket_watcher.ShouldNotifyUpdatedRTT());
122*6777b538SAndroid Build Coastguard Worker 
123*6777b538SAndroid Build Coastguard Worker   tick_clock.Advance(base::Milliseconds(1000));
124*6777b538SAndroid Build Coastguard Worker   // Minimum interval between consecutive notifications is 2000 msec.
125*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(socket_watcher.ShouldNotifyUpdatedRTT());
126*6777b538SAndroid Build Coastguard Worker 
127*6777b538SAndroid Build Coastguard Worker   // Advance the clock by 1000 msec more so that the current time is at least
128*6777b538SAndroid Build Coastguard Worker   // 2000 msec more than the last time |socket_watcher| received a notification.
129*6777b538SAndroid Build Coastguard Worker   tick_clock.Advance(base::Milliseconds(1000));
130*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(socket_watcher.ShouldNotifyUpdatedRTT());
131*6777b538SAndroid Build Coastguard Worker   ResetExpectedCallbackParams();
132*6777b538SAndroid Build Coastguard Worker   socket_watcher.OnUpdatedRTTAvailable(base::Seconds(10));
133*6777b538SAndroid Build Coastguard Worker 
134*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(socket_watcher.ShouldNotifyUpdatedRTT());
135*6777b538SAndroid Build Coastguard Worker 
136*6777b538SAndroid Build Coastguard Worker   // RTT notification is allowed by the global check.
137*6777b538SAndroid Build Coastguard Worker   SetShouldNotifyRTTCallback(true);
138*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(socket_watcher.ShouldNotifyUpdatedRTT());
139*6777b538SAndroid Build Coastguard Worker }
140*6777b538SAndroid Build Coastguard Worker 
TEST_F(NetworkQualitySocketWatcherTest,QuicFirstNotificationDropped)141*6777b538SAndroid Build Coastguard Worker TEST_F(NetworkQualitySocketWatcherTest, QuicFirstNotificationDropped) {
142*6777b538SAndroid Build Coastguard Worker   base::SimpleTestTickClock tick_clock;
143*6777b538SAndroid Build Coastguard Worker   tick_clock.SetNowTicks(base::TimeTicks::Now());
144*6777b538SAndroid Build Coastguard Worker 
145*6777b538SAndroid Build Coastguard Worker   // Use a public IP address so that the socket watcher runs the RTT callback.
146*6777b538SAndroid Build Coastguard Worker   IPAddress ip_address;
147*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(ip_address.AssignFromIPLiteral("157.0.0.1"));
148*6777b538SAndroid Build Coastguard Worker 
149*6777b538SAndroid Build Coastguard Worker   SocketWatcher socket_watcher(
150*6777b538SAndroid Build Coastguard Worker       SocketPerformanceWatcherFactory::PROTOCOL_QUIC, ip_address,
151*6777b538SAndroid Build Coastguard Worker       base::Milliseconds(2000), false,
152*6777b538SAndroid Build Coastguard Worker       base::SingleThreadTaskRunner::GetCurrentDefault(),
153*6777b538SAndroid Build Coastguard Worker       base::BindRepeating(OnUpdatedRTTAvailableStoreParams),
154*6777b538SAndroid Build Coastguard Worker       base::BindRepeating(ShouldNotifyRTTCallback), &tick_clock);
155*6777b538SAndroid Build Coastguard Worker 
156*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(socket_watcher.ShouldNotifyUpdatedRTT());
157*6777b538SAndroid Build Coastguard Worker   socket_watcher.OnUpdatedRTTAvailable(base::Seconds(10));
158*6777b538SAndroid Build Coastguard Worker   base::RunLoop().RunUntilIdle();
159*6777b538SAndroid Build Coastguard Worker   // First notification from a QUIC connection should be dropped, and it should
160*6777b538SAndroid Build Coastguard Worker   // be possible to notify the |socket_watcher| again.
161*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(NetworkQualitySocketWatcherTest::callback_rtt().is_zero());
162*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(socket_watcher.ShouldNotifyUpdatedRTT());
163*6777b538SAndroid Build Coastguard Worker   ResetExpectedCallbackParams();
164*6777b538SAndroid Build Coastguard Worker 
165*6777b538SAndroid Build Coastguard Worker   socket_watcher.OnUpdatedRTTAvailable(base::Seconds(2));
166*6777b538SAndroid Build Coastguard Worker   base::RunLoop().RunUntilIdle();
167*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(base::Seconds(2), NetworkQualitySocketWatcherTest::callback_rtt());
168*6777b538SAndroid Build Coastguard Worker   ResetExpectedCallbackParams();
169*6777b538SAndroid Build Coastguard Worker 
170*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(socket_watcher.ShouldNotifyUpdatedRTT());
171*6777b538SAndroid Build Coastguard Worker 
172*6777b538SAndroid Build Coastguard Worker   tick_clock.Advance(base::Milliseconds(1000));
173*6777b538SAndroid Build Coastguard Worker   // Minimum interval between consecutive notifications is 2000 msec.
174*6777b538SAndroid Build Coastguard Worker   EXPECT_FALSE(socket_watcher.ShouldNotifyUpdatedRTT());
175*6777b538SAndroid Build Coastguard Worker 
176*6777b538SAndroid Build Coastguard Worker   // Advance the clock by 1000 msec more so that the current time is at least
177*6777b538SAndroid Build Coastguard Worker   // 2000 msec more than the last time |socket_watcher| received a notification.
178*6777b538SAndroid Build Coastguard Worker   tick_clock.Advance(base::Milliseconds(1000));
179*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(socket_watcher.ShouldNotifyUpdatedRTT());
180*6777b538SAndroid Build Coastguard Worker }
181*6777b538SAndroid Build Coastguard Worker 
182*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_IOS)
183*6777b538SAndroid Build Coastguard Worker // Flaky on iOS: crbug.com/672917.
184*6777b538SAndroid Build Coastguard Worker #define MAYBE_PrivateAddressRTTNotNotified DISABLED_PrivateAddressRTTNotNotified
185*6777b538SAndroid Build Coastguard Worker #else
186*6777b538SAndroid Build Coastguard Worker #define MAYBE_PrivateAddressRTTNotNotified PrivateAddressRTTNotNotified
187*6777b538SAndroid Build Coastguard Worker #endif
TEST_F(NetworkQualitySocketWatcherTest,MAYBE_PrivateAddressRTTNotNotified)188*6777b538SAndroid Build Coastguard Worker TEST_F(NetworkQualitySocketWatcherTest, MAYBE_PrivateAddressRTTNotNotified) {
189*6777b538SAndroid Build Coastguard Worker   base::SimpleTestTickClock tick_clock;
190*6777b538SAndroid Build Coastguard Worker   tick_clock.SetNowTicks(base::TimeTicks::Now());
191*6777b538SAndroid Build Coastguard Worker 
192*6777b538SAndroid Build Coastguard Worker   const struct {
193*6777b538SAndroid Build Coastguard Worker     std::string ip_address;
194*6777b538SAndroid Build Coastguard Worker     bool expect_should_notify_rtt;
195*6777b538SAndroid Build Coastguard Worker   } tests[] = {
196*6777b538SAndroid Build Coastguard Worker       {"157.0.0.1", true},    {"127.0.0.1", false},
197*6777b538SAndroid Build Coastguard Worker       {"192.168.0.1", false}, {"::1", false},
198*6777b538SAndroid Build Coastguard Worker       {"0.0.0.0", false},     {"2607:f8b0:4006:819::200e", true},
199*6777b538SAndroid Build Coastguard Worker   };
200*6777b538SAndroid Build Coastguard Worker 
201*6777b538SAndroid Build Coastguard Worker   for (const auto& test : tests) {
202*6777b538SAndroid Build Coastguard Worker     IPAddress ip_address;
203*6777b538SAndroid Build Coastguard Worker     ASSERT_TRUE(ip_address.AssignFromIPLiteral(test.ip_address));
204*6777b538SAndroid Build Coastguard Worker 
205*6777b538SAndroid Build Coastguard Worker     SocketWatcher socket_watcher(
206*6777b538SAndroid Build Coastguard Worker         SocketPerformanceWatcherFactory::PROTOCOL_TCP, ip_address,
207*6777b538SAndroid Build Coastguard Worker         base::Milliseconds(2000), false,
208*6777b538SAndroid Build Coastguard Worker         base::SingleThreadTaskRunner::GetCurrentDefault(),
209*6777b538SAndroid Build Coastguard Worker         base::BindRepeating(OnUpdatedRTTAvailable),
210*6777b538SAndroid Build Coastguard Worker         base::BindRepeating(ShouldNotifyRTTCallback), &tick_clock);
211*6777b538SAndroid Build Coastguard Worker 
212*6777b538SAndroid Build Coastguard Worker     EXPECT_EQ(test.expect_should_notify_rtt,
213*6777b538SAndroid Build Coastguard Worker               socket_watcher.ShouldNotifyUpdatedRTT());
214*6777b538SAndroid Build Coastguard Worker     socket_watcher.OnUpdatedRTTAvailable(base::Seconds(10));
215*6777b538SAndroid Build Coastguard Worker     base::RunLoop().RunUntilIdle();
216*6777b538SAndroid Build Coastguard Worker     ResetExpectedCallbackParams();
217*6777b538SAndroid Build Coastguard Worker 
218*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(socket_watcher.ShouldNotifyUpdatedRTT());
219*6777b538SAndroid Build Coastguard Worker   }
220*6777b538SAndroid Build Coastguard Worker }
221*6777b538SAndroid Build Coastguard Worker 
TEST_F(NetworkQualitySocketWatcherTest,RemoteHostIPHashComputedCorrectly)222*6777b538SAndroid Build Coastguard Worker TEST_F(NetworkQualitySocketWatcherTest, RemoteHostIPHashComputedCorrectly) {
223*6777b538SAndroid Build Coastguard Worker   base::SimpleTestTickClock tick_clock;
224*6777b538SAndroid Build Coastguard Worker   tick_clock.SetNowTicks(base::TimeTicks::Now());
225*6777b538SAndroid Build Coastguard Worker   const struct {
226*6777b538SAndroid Build Coastguard Worker     std::string ip_address;
227*6777b538SAndroid Build Coastguard Worker     uint64_t host;
228*6777b538SAndroid Build Coastguard Worker   } tests[] = {
229*6777b538SAndroid Build Coastguard Worker       {"112.112.112.100", 0x0000000070707064UL},  // IPv4.
230*6777b538SAndroid Build Coastguard Worker       {"112.112.112.250", 0x00000000707070faUL},
231*6777b538SAndroid Build Coastguard Worker       {"2001:0db8:85a3:0000:0000:8a2e:0370:7334",
232*6777b538SAndroid Build Coastguard Worker        0x20010db885a30000UL},                                 // IPv6.
233*6777b538SAndroid Build Coastguard Worker       {"2001:db8:85a3::8a2e:370:7334", 0x20010db885a30000UL}  // Shortened IPv6.
234*6777b538SAndroid Build Coastguard Worker   };
235*6777b538SAndroid Build Coastguard Worker 
236*6777b538SAndroid Build Coastguard Worker   for (const auto& test : tests) {
237*6777b538SAndroid Build Coastguard Worker     IPAddress ip_address;
238*6777b538SAndroid Build Coastguard Worker     ASSERT_TRUE(ip_address.AssignFromIPLiteral(test.ip_address));
239*6777b538SAndroid Build Coastguard Worker 
240*6777b538SAndroid Build Coastguard Worker     SocketWatcher socket_watcher(
241*6777b538SAndroid Build Coastguard Worker         SocketPerformanceWatcherFactory::PROTOCOL_TCP, ip_address,
242*6777b538SAndroid Build Coastguard Worker         base::Milliseconds(2000), false,
243*6777b538SAndroid Build Coastguard Worker         base::SingleThreadTaskRunner::GetCurrentDefault(),
244*6777b538SAndroid Build Coastguard Worker         base::BindRepeating(OnUpdatedRTTAvailableStoreParams),
245*6777b538SAndroid Build Coastguard Worker         base::BindRepeating(ShouldNotifyRTTCallback), &tick_clock);
246*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(socket_watcher.ShouldNotifyUpdatedRTT());
247*6777b538SAndroid Build Coastguard Worker     socket_watcher.OnUpdatedRTTAvailable(base::Seconds(10));
248*6777b538SAndroid Build Coastguard Worker     base::RunLoop().RunUntilIdle();
249*6777b538SAndroid Build Coastguard Worker     VerifyCallbackParams(base::Seconds(10), test.host);
250*6777b538SAndroid Build Coastguard Worker     EXPECT_FALSE(socket_watcher.ShouldNotifyUpdatedRTT());
251*6777b538SAndroid Build Coastguard Worker   }
252*6777b538SAndroid Build Coastguard Worker }
253*6777b538SAndroid Build Coastguard Worker 
254*6777b538SAndroid Build Coastguard Worker }  // namespace
255*6777b538SAndroid Build Coastguard Worker 
256*6777b538SAndroid Build Coastguard Worker }  // namespace net::nqe::internal
257