Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: net/base/network_activity_monitor_unittest.cc

Issue 726673002: Add a new NetworkActivityMonitor to track network activity (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix comments Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
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 "base/bind.h"
8 #include "base/strings/string_number_conversions.h"
9 #include "base/threading/thread.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace net {
13
14 namespace test {
15
16 class NetworkActivityMonitorPeer {
17 public:
18 static NetworkActivityMonitor* CreateMonitor() {
19 return new NetworkActivityMonitor();
20 }
21 };
22
23 TEST(NetworkActivityMontiorTest, GetInstance) {
24 NetworkActivityMonitor* monitor = NetworkActivityMonitor::GetInstance();
25 EXPECT_TRUE(monitor != NULL);
26 EXPECT_TRUE(monitor == NetworkActivityMonitor::GetInstance());
27 }
28
29 TEST(NetworkActivityMontiorTest, BytesReceived) {
30 base::TimeTicks start = base::TimeTicks::Now();
31 NetworkActivityMonitor* monitor = NetworkActivityMonitorPeer::CreateMonitor();
eroman 2014/11/14 00:06:16 Looks like |monitor| is leaked in these tests. Pe
Ryan Hamilton 2014/11/14 00:32:29 I fixed the leak, but since the monitor has a priv
eroman 2014/11/14 00:46:13 Or instead you could add some : ResetStateForTes
Ryan Hamilton 2014/11/14 16:51:57 I considered that, but my general fear of using st
32 EXPECT_EQ(0u, monitor->GetBytesReceived());
33 uint64 bytes = 12345;
34 monitor->IncrementBytesReceived(bytes);
35 EXPECT_EQ(bytes, monitor->GetBytesReceived());
36 base::TimeDelta delta = monitor->GetTimeSinceLastReceived();
37 EXPECT_LE(base::TimeDelta(), delta);
38 EXPECT_GE(base::TimeTicks::Now() - start, delta);
39 }
40
41 TEST(NetworkActivityMontiorTest, BytesWritten) {
42 base::TimeTicks start = base::TimeTicks::Now();
43 NetworkActivityMonitor* monitor = NetworkActivityMonitorPeer::CreateMonitor();
44 EXPECT_EQ(0u, monitor->GetBytesWritten());
45 uint64 bytes = 12345;
eroman 2014/11/14 00:06:16 for funzies you could use a value larger than (2^3
Ryan Hamilton 2014/11/14 00:32:29 Done.
46 monitor->IncrementBytesWritten(bytes);
47 EXPECT_EQ(bytes, monitor->GetBytesWritten());
48 base::TimeDelta delta = monitor->GetTimeSinceLastWrite();
49 EXPECT_LE(base::TimeDelta(), delta);
50 EXPECT_GE(base::TimeTicks::Now() - start, delta);
51 }
52
53 class Verifier {
54 public:
55 void VerifyBytesReceivedIsMultipleOf(NetworkActivityMonitor* monitor,
56 uint64 bytes) {
eroman 2014/11/14 00:06:16 indentation. suggest running "git cl format" for
Ryan Hamilton 2014/11/14 00:32:29 Done.
57 EXPECT_EQ(0u, monitor->GetBytesReceived() % bytes);
58 }
59
60 void VerifyBytesWrittenIsMultipleOf(NetworkActivityMonitor* monitor,
61 uint64 bytes) {
eroman 2014/11/14 00:06:16 ditto
Ryan Hamilton 2014/11/14 00:32:29 Done.
62 EXPECT_EQ(0u, monitor->GetBytesWritten() % bytes);
63 }
64 };
65
66 TEST(NetworkActivityMontiorTest, Threading) {
67 NetworkActivityMonitor* monitor = NetworkActivityMonitorPeer::CreateMonitor();
68 base::Thread* threceiveds[3];
eroman 2014/11/14 00:06:16 more german.
Ryan Hamilton 2014/11/14 00:32:29 Done.
69 for (size_t i = 0; i < arraysize(threceiveds); ++i) {
70 threceiveds[i] = new base::Thread(base::UintToString(i));
71 threceiveds[i]->Start();
72 }
73
74 Verifier verifier;
75
76 size_t num_increments = 157;
77 uint64 bytes_received = 12345u;
78 uint64 bytes_written = 78954u;
79 for (size_t i = 0; i < num_increments; ++i) {
80 threceiveds[i % arraysize(threceiveds)]->task_runner()->PostTask(
81 FROM_HERE,
82 base::Bind(&NetworkActivityMonitor::IncrementBytesReceived,
83 base::Unretained(monitor),
84 bytes_received));
85 threceiveds[i % arraysize(threceiveds)]->task_runner()->PostTask(
86 FROM_HERE,
87 base::Bind(&NetworkActivityMonitor::IncrementBytesWritten,
88 base::Unretained(monitor),
89 bytes_written));
90 threceiveds[i % arraysize(threceiveds)]->task_runner()->PostTask(
91 FROM_HERE,
92 base::Bind(&Verifier::VerifyBytesWrittenIsMultipleOf,
93 base::Unretained(&verifier),
94 monitor,
95 bytes_written));
96 threceiveds[i % arraysize(threceiveds)]->task_runner()->PostTask(
97 FROM_HERE,
98 base::Bind(&Verifier::VerifyBytesReceivedIsMultipleOf,
99 base::Unretained(&verifier),
100 monitor,
101 bytes_received));
102 }
103
104 for (size_t i = 0; i < arraysize(threceiveds); ++i) {
105 threceiveds[i]->Stop();
eroman 2014/11/14 00:06:17 have you tried not leaking thereceiveds ? ;)
Ryan Hamilton 2014/11/14 00:32:29 leaking threads! leaking monitors. Leak all the th
106 }
107
108 EXPECT_EQ(num_increments * bytes_received, monitor->GetBytesReceived());
109 EXPECT_EQ(num_increments * bytes_written, monitor->GetBytesWritten());
110 }
111
112 } // namespace test
113
114 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698