xref: /aosp_15_r20/external/cronet/net/android/traffic_stats_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2015 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 <unistd.h>     // For usleep
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "net/android/traffic_stats.h"
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #include "base/run_loop.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/test/task_environment.h"
11*6777b538SAndroid Build Coastguard Worker #include "net/test/embedded_test_server/embedded_test_server.h"
12*6777b538SAndroid Build Coastguard Worker #include "net/url_request/url_request_context.h"
13*6777b538SAndroid Build Coastguard Worker #include "net/url_request/url_request_context_builder.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/url_request/url_request_test_util.h"
15*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
16*6777b538SAndroid Build Coastguard Worker #include "url/gurl.h"
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker namespace net {
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker namespace {
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker 
23*6777b538SAndroid Build Coastguard Worker template <typename Predicate>
ExpectWithRetry(Predicate predicate,int max_retries=50,int retry_interval_ms=100)24*6777b538SAndroid Build Coastguard Worker void ExpectWithRetry(Predicate predicate, int max_retries = 50, int retry_interval_ms = 100) {
25*6777b538SAndroid Build Coastguard Worker     for (int retry_count = 0; ; ++retry_count) {
26*6777b538SAndroid Build Coastguard Worker        if (predicate()) return;
27*6777b538SAndroid Build Coastguard Worker        if (retry_count == max_retries) break;
28*6777b538SAndroid Build Coastguard Worker        usleep(retry_interval_ms * 1000);
29*6777b538SAndroid Build Coastguard Worker     }
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker     // If reached here, all retries have failed.
32*6777b538SAndroid Build Coastguard Worker     FAIL() << "Condition remained false even after " << max_retries * retry_interval_ms << " ms";
33*6777b538SAndroid Build Coastguard Worker }
34*6777b538SAndroid Build Coastguard Worker 
TEST(TrafficStatsAndroidTest,BasicsTest)35*6777b538SAndroid Build Coastguard Worker TEST(TrafficStatsAndroidTest, BasicsTest) {
36*6777b538SAndroid Build Coastguard Worker   base::test::TaskEnvironment task_environment(
37*6777b538SAndroid Build Coastguard Worker       base::test::TaskEnvironment::MainThreadType::IO);
38*6777b538SAndroid Build Coastguard Worker 
39*6777b538SAndroid Build Coastguard Worker   EmbeddedTestServer embedded_test_server;
40*6777b538SAndroid Build Coastguard Worker   embedded_test_server.ServeFilesFromDirectory(
41*6777b538SAndroid Build Coastguard Worker       base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest")));
42*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(embedded_test_server.Start());
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker   int64_t tx_bytes_before_request = -1;
45*6777b538SAndroid Build Coastguard Worker   int64_t rx_bytes_before_request = -1;
46*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(
47*6777b538SAndroid Build Coastguard Worker       android::traffic_stats::GetTotalTxBytes(&tx_bytes_before_request));
48*6777b538SAndroid Build Coastguard Worker   EXPECT_GE(tx_bytes_before_request, 0);
49*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(
50*6777b538SAndroid Build Coastguard Worker       android::traffic_stats::GetTotalRxBytes(&rx_bytes_before_request));
51*6777b538SAndroid Build Coastguard Worker   EXPECT_GE(rx_bytes_before_request, 0);
52*6777b538SAndroid Build Coastguard Worker 
53*6777b538SAndroid Build Coastguard Worker   TestDelegate test_delegate;
54*6777b538SAndroid Build Coastguard Worker   auto context = CreateTestURLRequestContextBuilder()->Build();
55*6777b538SAndroid Build Coastguard Worker 
56*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<URLRequest> request(
57*6777b538SAndroid Build Coastguard Worker       context->CreateRequest(embedded_test_server.GetURL("/echo.html"),
58*6777b538SAndroid Build Coastguard Worker                              DEFAULT_PRIORITY, &test_delegate));
59*6777b538SAndroid Build Coastguard Worker   request->Start();
60*6777b538SAndroid Build Coastguard Worker   test_delegate.RunUntilComplete();
61*6777b538SAndroid Build Coastguard Worker 
62*6777b538SAndroid Build Coastguard Worker   // Bytes should increase because of the network traffic.
63*6777b538SAndroid Build Coastguard Worker   // Retry is needed to avoid rate-limit caching for
64*6777b538SAndroid Build Coastguard Worker   // TrafficStats API results on V+ devices.
65*6777b538SAndroid Build Coastguard Worker   ExpectWithRetry([&] {
66*6777b538SAndroid Build Coastguard Worker     int64_t ret = -1;
67*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(android::traffic_stats::GetTotalTxBytes(&ret));
68*6777b538SAndroid Build Coastguard Worker     return ret > tx_bytes_before_request;
69*6777b538SAndroid Build Coastguard Worker   });
70*6777b538SAndroid Build Coastguard Worker   ExpectWithRetry([&] {
71*6777b538SAndroid Build Coastguard Worker       int64_t ret = -1;
72*6777b538SAndroid Build Coastguard Worker       EXPECT_TRUE(android::traffic_stats::GetTotalRxBytes(&ret));
73*6777b538SAndroid Build Coastguard Worker       return ret > rx_bytes_before_request;
74*6777b538SAndroid Build Coastguard Worker     });
75*6777b538SAndroid Build Coastguard Worker }
76*6777b538SAndroid Build Coastguard Worker 
TEST(TrafficStatsAndroidTest,UIDBasicsTest)77*6777b538SAndroid Build Coastguard Worker TEST(TrafficStatsAndroidTest, UIDBasicsTest) {
78*6777b538SAndroid Build Coastguard Worker   base::test::TaskEnvironment task_environment(
79*6777b538SAndroid Build Coastguard Worker       base::test::TaskEnvironment::MainThreadType::IO);
80*6777b538SAndroid Build Coastguard Worker 
81*6777b538SAndroid Build Coastguard Worker   EmbeddedTestServer embedded_test_server;
82*6777b538SAndroid Build Coastguard Worker   embedded_test_server.ServeFilesFromDirectory(
83*6777b538SAndroid Build Coastguard Worker       base::FilePath(FILE_PATH_LITERAL("net/data/url_request_unittest")));
84*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(embedded_test_server.Start());
85*6777b538SAndroid Build Coastguard Worker 
86*6777b538SAndroid Build Coastguard Worker   int64_t tx_bytes_before_request = -1;
87*6777b538SAndroid Build Coastguard Worker   int64_t rx_bytes_before_request = -1;
88*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(
89*6777b538SAndroid Build Coastguard Worker       android::traffic_stats::GetCurrentUidTxBytes(&tx_bytes_before_request));
90*6777b538SAndroid Build Coastguard Worker   EXPECT_GE(tx_bytes_before_request, 0);
91*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(
92*6777b538SAndroid Build Coastguard Worker       android::traffic_stats::GetCurrentUidRxBytes(&rx_bytes_before_request));
93*6777b538SAndroid Build Coastguard Worker   EXPECT_GE(rx_bytes_before_request, 0);
94*6777b538SAndroid Build Coastguard Worker 
95*6777b538SAndroid Build Coastguard Worker   TestDelegate test_delegate;
96*6777b538SAndroid Build Coastguard Worker   auto context = CreateTestURLRequestContextBuilder()->Build();
97*6777b538SAndroid Build Coastguard Worker 
98*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<URLRequest> request(
99*6777b538SAndroid Build Coastguard Worker       context->CreateRequest(embedded_test_server.GetURL("/echo.html"),
100*6777b538SAndroid Build Coastguard Worker                              DEFAULT_PRIORITY, &test_delegate));
101*6777b538SAndroid Build Coastguard Worker   request->Start();
102*6777b538SAndroid Build Coastguard Worker   test_delegate.RunUntilComplete();
103*6777b538SAndroid Build Coastguard Worker 
104*6777b538SAndroid Build Coastguard Worker   // Bytes should increase because of the network traffic.
105*6777b538SAndroid Build Coastguard Worker   // Retry is needed to avoid rate-limit caching for
106*6777b538SAndroid Build Coastguard Worker   // TrafficStats API results on V+ devices.
107*6777b538SAndroid Build Coastguard Worker   ExpectWithRetry([&] {
108*6777b538SAndroid Build Coastguard Worker       int64_t ret = -1;
109*6777b538SAndroid Build Coastguard Worker       EXPECT_TRUE(android::traffic_stats::GetTotalTxBytes(&ret));
110*6777b538SAndroid Build Coastguard Worker       return ret > tx_bytes_before_request;
111*6777b538SAndroid Build Coastguard Worker     });
112*6777b538SAndroid Build Coastguard Worker    ExpectWithRetry([&] {
113*6777b538SAndroid Build Coastguard Worker        int64_t ret = -1;
114*6777b538SAndroid Build Coastguard Worker        EXPECT_TRUE(android::traffic_stats::GetTotalRxBytes(&ret));
115*6777b538SAndroid Build Coastguard Worker        return ret > rx_bytes_before_request;
116*6777b538SAndroid Build Coastguard Worker   });
117*6777b538SAndroid Build Coastguard Worker }
118*6777b538SAndroid Build Coastguard Worker 
119*6777b538SAndroid Build Coastguard Worker }  // namespace
120*6777b538SAndroid Build Coastguard Worker 
121*6777b538SAndroid Build Coastguard Worker }  // namespace net
122