OLD | NEW |
---|---|
(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 | |
OLD | NEW |