xref: /aosp_15_r20/external/cronet/net/base/network_activity_monitor_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2014 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/base/network_activity_monitor.h"
6 
7 #include <stdint.h>
8 
9 #include <memory>
10 #include <vector>
11 
12 #include "base/functional/bind.h"
13 #include "base/strings/string_number_conversions.h"
14 #include "base/threading/thread.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 
17 namespace net::test {
18 
19 class NetworkActivityMontiorTest : public testing::Test {
20  public:
NetworkActivityMontiorTest()21   NetworkActivityMontiorTest() {
22     activity_monitor::ResetBytesReceivedForTesting();
23   }
24 };
25 
TEST_F(NetworkActivityMontiorTest,BytesReceived)26 TEST_F(NetworkActivityMontiorTest, BytesReceived) {
27   EXPECT_EQ(0u, activity_monitor::GetBytesReceived());
28 
29   uint64_t bytes = 12345;
30   activity_monitor::IncrementBytesReceived(bytes);
31   EXPECT_EQ(bytes, activity_monitor::GetBytesReceived());
32 }
33 
34 namespace {
35 
VerifyBytesReceivedIsMultipleOf(uint64_t bytes)36 void VerifyBytesReceivedIsMultipleOf(uint64_t bytes) {
37   EXPECT_EQ(0u, activity_monitor::GetBytesReceived() % bytes);
38 }
39 
40 }  // namespace
41 
TEST_F(NetworkActivityMontiorTest,Threading)42 TEST_F(NetworkActivityMontiorTest, Threading) {
43   std::vector<std::unique_ptr<base::Thread>> threads;
44   for (size_t i = 0; i < 3; ++i) {
45     threads.push_back(std::make_unique<base::Thread>(base::NumberToString(i)));
46     ASSERT_TRUE(threads.back()->Start());
47   }
48 
49   size_t num_increments = 157;
50   uint64_t bytes_received = UINT64_C(7294954321);
51   for (size_t i = 0; i < num_increments; ++i) {
52     size_t thread_num = i % threads.size();
53     threads[thread_num]->task_runner()->PostTask(
54         FROM_HERE, base::BindOnce(&activity_monitor::IncrementBytesReceived,
55                                   bytes_received));
56     threads[thread_num]->task_runner()->PostTask(
57         FROM_HERE,
58         base::BindOnce(&VerifyBytesReceivedIsMultipleOf, bytes_received));
59   }
60 
61   threads.clear();
62 
63   EXPECT_EQ(num_increments * bytes_received,
64             activity_monitor::GetBytesReceived());
65 }
66 
67 }  // namespace net::test
68