OLD | NEW |
| (Empty) |
1 // Copyright (c) 2009 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/load_log_unittest.h" | |
6 #include "testing/gtest/include/gtest/gtest.h" | |
7 | |
8 namespace net { | |
9 | |
10 namespace { | |
11 | |
12 TEST(LoadLogTest, Nullable) { | |
13 // Make sure that the static methods can be called with NULL (no-op). | |
14 // (Should not crash). | |
15 LoadLog::BeginEvent(NULL, LoadLog::TYPE_HOST_RESOLVER_IMPL); | |
16 LoadLog::AddEvent(NULL, LoadLog::TYPE_HOST_RESOLVER_IMPL); | |
17 LoadLog::EndEvent(NULL, LoadLog::TYPE_HOST_RESOLVER_IMPL); | |
18 } | |
19 | |
20 TEST(LoadLogTest, Basic) { | |
21 scoped_refptr<LoadLog> log(new LoadLog(10)); | |
22 | |
23 // Logs start off empty. | |
24 EXPECT_EQ(0u, log->entries().size()); | |
25 EXPECT_EQ(0u, log->num_entries_truncated()); | |
26 | |
27 // Add 3 entries. | |
28 | |
29 log->Add(LoadLog::Entry(MakeTime(0), | |
30 LoadLog::Event(LoadLog::TYPE_HOST_RESOLVER_IMPL, | |
31 LoadLog::PHASE_BEGIN))); | |
32 log->Add(LoadLog::Entry(MakeTime(2), | |
33 LoadLog::Event(LoadLog::TYPE_CANCELLED, | |
34 LoadLog::PHASE_NONE))); | |
35 log->Add( | |
36 LoadLog::Entry( | |
37 MakeTime(11), | |
38 LoadLog::Event(LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, | |
39 LoadLog::PHASE_END))); | |
40 | |
41 EXPECT_EQ(3u, log->entries().size()); | |
42 EXPECT_EQ(0u, log->num_entries_truncated()); | |
43 | |
44 EXPECT_TRUE(LogContainsEventAtTime( | |
45 *log, 0, MakeTime(0), LoadLog::TYPE_HOST_RESOLVER_IMPL, | |
46 LoadLog::PHASE_BEGIN)); | |
47 | |
48 EXPECT_TRUE(LogContainsEventAtTime( | |
49 *log, 1, MakeTime(2), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE)); | |
50 | |
51 EXPECT_TRUE(LogContainsEventAtTime( | |
52 *log, 2, MakeTime(11), LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, | |
53 LoadLog::PHASE_END)); | |
54 } | |
55 | |
56 // Test that the log's size is strictly bounded. | |
57 TEST(LoadLogTest, Truncation) { | |
58 size_t kMaxNumEntries = 10; | |
59 scoped_refptr<LoadLog> log(new LoadLog(kMaxNumEntries)); | |
60 | |
61 // Max it out. | |
62 for (size_t i = 0; i < kMaxNumEntries; ++i) { | |
63 log->Add(LoadLog::Entry(MakeTime(i), | |
64 LoadLog::Event(LoadLog::TYPE_CANCELLED, | |
65 LoadLog::PHASE_NONE))); | |
66 } | |
67 | |
68 EXPECT_EQ(kMaxNumEntries, log->entries().size()); | |
69 EXPECT_EQ(0u, log->num_entries_truncated()); | |
70 | |
71 // Check the last entry. | |
72 EXPECT_TRUE(LogContainsEventAtTime( | |
73 *log, 9, MakeTime(9), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE)); | |
74 | |
75 // Add three entries while maxed out (will cause truncation) | |
76 log->Add(LoadLog::Entry(MakeTime(0), | |
77 LoadLog::Event(LoadLog::TYPE_CANCELLED, | |
78 LoadLog::PHASE_NONE))); | |
79 log->Add(LoadLog::Entry(MakeTime(1), | |
80 LoadLog::Event(LoadLog::TYPE_CANCELLED, | |
81 LoadLog::PHASE_NONE))); | |
82 log->Add(LoadLog::Entry(MakeTime(2), | |
83 LoadLog::Event(LoadLog::TYPE_CANCELLED, | |
84 LoadLog::PHASE_NONE))); | |
85 | |
86 EXPECT_EQ(kMaxNumEntries, log->entries().size()); | |
87 EXPECT_EQ(3u, log->num_entries_truncated()); | |
88 | |
89 // Check the last entry -- it should be the final entry we added. | |
90 EXPECT_TRUE(LogContainsEventAtTime( | |
91 *log, 9, MakeTime(2), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE)); | |
92 } | |
93 | |
94 TEST(LoadLogTest, Append) { | |
95 scoped_refptr<LoadLog> log1(new LoadLog(10)); | |
96 scoped_refptr<LoadLog> log2(new LoadLog(10)); | |
97 | |
98 log1->Add(LoadLog::Entry(MakeTime(0), | |
99 LoadLog::Event(LoadLog::TYPE_HOST_RESOLVER_IMPL, | |
100 LoadLog::PHASE_BEGIN))); | |
101 | |
102 log2->Add(LoadLog::Entry(MakeTime(3), | |
103 LoadLog::Event(LoadLog::TYPE_CANCELLED, | |
104 LoadLog::PHASE_NONE))); | |
105 log2->Add(LoadLog::Entry(MakeTime(9), | |
106 LoadLog::Event(LoadLog::TYPE_HOST_RESOLVER_IMPL, | |
107 LoadLog::PHASE_END))); | |
108 | |
109 log1->Append(log2); | |
110 | |
111 // Add something else to log2 (should NOT be reflected in log1). | |
112 log2->Add(LoadLog::Entry(MakeTime(19), | |
113 LoadLog::Event(LoadLog::TYPE_CANCELLED, | |
114 LoadLog::PHASE_NONE))); | |
115 | |
116 EXPECT_EQ(3u, log1->entries().size()); | |
117 EXPECT_EQ(0u, log1->num_entries_truncated()); | |
118 | |
119 EXPECT_TRUE(LogContainsEventAtTime( | |
120 *log1, 0, MakeTime(0), LoadLog::TYPE_HOST_RESOLVER_IMPL, | |
121 LoadLog::PHASE_BEGIN)); | |
122 | |
123 EXPECT_TRUE(LogContainsEventAtTime( | |
124 *log1, 1, MakeTime(3), LoadLog::TYPE_CANCELLED, | |
125 LoadLog::PHASE_NONE)); | |
126 | |
127 EXPECT_TRUE(LogContainsEventAtTime( | |
128 *log1, 2, MakeTime(9), LoadLog::TYPE_HOST_RESOLVER_IMPL, | |
129 LoadLog::PHASE_END)); | |
130 } | |
131 | |
132 TEST(LoadLogTest, AppendWithTruncation) { | |
133 // Append() should also respect the maximum number of entries bound. | |
134 // (This is basically the same test as LoadLogTest.Truncation). | |
135 | |
136 // Create two load logs, which both have 6 out of 10 entries filled. | |
137 size_t kMaxNumEntries = 10; | |
138 scoped_refptr<LoadLog> log1(new LoadLog(kMaxNumEntries)); | |
139 scoped_refptr<LoadLog> log2(new LoadLog(kMaxNumEntries)); | |
140 for (size_t i = 0; i < 6; ++i) { | |
141 log1->Add(LoadLog::Entry(MakeTime(i), | |
142 LoadLog::Event(LoadLog::TYPE_CANCELLED, | |
143 LoadLog::PHASE_NONE))); | |
144 log2->Add(LoadLog::Entry(MakeTime(2 * i), | |
145 LoadLog::Event(LoadLog::TYPE_CANCELLED, | |
146 LoadLog::PHASE_NONE))); | |
147 } | |
148 | |
149 // Append log2 to log1. | |
150 log1->Append(log2); | |
151 | |
152 // The combined log totalled 12 entries, so 2 must have been dropped. | |
153 EXPECT_EQ(10u, log1->entries().size()); | |
154 EXPECT_EQ(2u, log1->num_entries_truncated()); | |
155 | |
156 // Combined log should end with the final entry of log2. | |
157 EXPECT_TRUE(LogContainsEventAtTime( | |
158 *log1, 9, MakeTime(10), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE)); | |
159 } | |
160 | |
161 TEST(LoadLogTest, EventTypeToString) { | |
162 EXPECT_STREQ("HOST_RESOLVER_IMPL", | |
163 LoadLog::EventTypeToString(LoadLog::TYPE_HOST_RESOLVER_IMPL)); | |
164 EXPECT_STREQ("HOST_RESOLVER_IMPL_OBSERVER_ONSTART", | |
165 LoadLog::EventTypeToString( | |
166 LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART)); | |
167 } | |
168 | |
169 TEST(LoadLogTest, String) { | |
170 scoped_refptr<LoadLog> log(new LoadLog(10)); | |
171 | |
172 // Make sure that AddStringLiteral() adds a literal and not a std::string. | |
173 // (in case there is any funny-business with implicit conversions). | |
174 LoadLog::AddStringLiteral(log, "This is a literal"); | |
175 log->Add(LoadLog::Entry(MakeTime(0), "Another literal")); | |
176 log->Add(LoadLog::Entry(MakeTime(0), std::string("Now a std::string"))); | |
177 | |
178 ASSERT_EQ(3u, log->entries().size()); | |
179 EXPECT_EQ(LoadLog::Entry::TYPE_STRING_LITERAL, log->entries()[0].type); | |
180 EXPECT_EQ(LoadLog::Entry::TYPE_STRING_LITERAL, log->entries()[1].type); | |
181 EXPECT_EQ(LoadLog::Entry::TYPE_STRING, log->entries()[2].type); | |
182 } | |
183 | |
184 } // namespace | |
185 } // namespace net | |
OLD | NEW |