OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/base/load_log_unittest.h" | 5 #include "net/base/load_log_unittest.h" |
6 #include "testing/gtest/include/gtest/gtest.h" | 6 #include "testing/gtest/include/gtest/gtest.h" |
7 | 7 |
8 namespace net { | 8 namespace net { |
9 | 9 |
10 namespace { | 10 namespace { |
11 | 11 |
12 TEST(LoadLogTest, Nullable) { | 12 TEST(LoadLogTest, Nullable) { |
13 // Make sure that the static methods can be called with NULL (no-op). | 13 // Make sure that the static methods can be called with NULL (no-op). |
14 // (Should not crash). | 14 // (Should not crash). |
15 LoadLog::BeginEvent(NULL, LoadLog::TYPE_HOST_RESOLVER_IMPL); | 15 LoadLog::BeginEvent(NULL, LoadLog::TYPE_HOST_RESOLVER_IMPL); |
16 LoadLog::AddEvent(NULL, LoadLog::TYPE_HOST_RESOLVER_IMPL); | 16 LoadLog::AddEvent(NULL, LoadLog::TYPE_HOST_RESOLVER_IMPL); |
17 LoadLog::EndEvent(NULL, LoadLog::TYPE_HOST_RESOLVER_IMPL); | 17 LoadLog::EndEvent(NULL, LoadLog::TYPE_HOST_RESOLVER_IMPL); |
18 } | 18 } |
19 | 19 |
20 TEST(LoadLogTest, Basic) { | 20 TEST(LoadLogTest, Basic) { |
21 scoped_refptr<LoadLog> log(new LoadLog); | 21 scoped_refptr<LoadLog> log(new LoadLog(10)); |
22 | 22 |
23 // Logs start off empty. | 23 // Logs start off empty. |
24 EXPECT_EQ(0u, log->events().size()); | 24 EXPECT_EQ(0u, log->events().size()); |
| 25 EXPECT_EQ(0u, log->num_entries_truncated()); |
25 | 26 |
26 // Add 3 entries. | 27 // Add 3 entries. |
27 | 28 |
28 log->Add(MakeTime(0), LoadLog::TYPE_HOST_RESOLVER_IMPL, LoadLog::PHASE_BEGIN); | 29 log->Add(MakeTime(0), LoadLog::TYPE_HOST_RESOLVER_IMPL, LoadLog::PHASE_BEGIN); |
29 log->Add(MakeTime(2), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); | 30 log->Add(MakeTime(2), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); |
30 log->Add(MakeTime(11), LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, | 31 log->Add(MakeTime(11), LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, |
31 LoadLog::PHASE_END); | 32 LoadLog::PHASE_END); |
32 | 33 |
33 EXPECT_EQ(3u, log->events().size()); | 34 EXPECT_EQ(3u, log->events().size()); |
| 35 EXPECT_EQ(0u, log->num_entries_truncated()); |
34 | 36 |
35 ExpectLogContains(log, 0, MakeTime(0), LoadLog::TYPE_HOST_RESOLVER_IMPL, | 37 ExpectLogContains(log, 0, MakeTime(0), LoadLog::TYPE_HOST_RESOLVER_IMPL, |
36 LoadLog::PHASE_BEGIN); | 38 LoadLog::PHASE_BEGIN); |
37 | 39 |
38 ExpectLogContains(log, 1, MakeTime(2), LoadLog::TYPE_CANCELLED, | 40 ExpectLogContains(log, 1, MakeTime(2), LoadLog::TYPE_CANCELLED, |
39 LoadLog::PHASE_NONE); | 41 LoadLog::PHASE_NONE); |
40 | 42 |
41 ExpectLogContains(log, 2, MakeTime(11), | 43 ExpectLogContains(log, 2, MakeTime(11), |
42 LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, | 44 LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART, |
43 LoadLog::PHASE_END); | 45 LoadLog::PHASE_END); |
44 } | 46 } |
45 | 47 |
46 // Test that the log's size is strictly bounded. | 48 // Test that the log's size is strictly bounded. |
47 TEST(LoadLogTest, Truncation) { | 49 TEST(LoadLogTest, Truncation) { |
48 scoped_refptr<LoadLog> log(new LoadLog); | 50 size_t kMaxNumEntries = 10; |
| 51 scoped_refptr<LoadLog> log(new LoadLog(kMaxNumEntries)); |
49 | 52 |
50 // Almost max it out. | 53 // Max it out. |
51 for (size_t i = 0; i < LoadLog::kMaxNumEntries - 1; ++i) { | 54 for (size_t i = 0; i < kMaxNumEntries; ++i) { |
52 log->Add(MakeTime(0), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); | 55 log->Add(MakeTime(i), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); |
53 } | 56 } |
54 EXPECT_EQ(LoadLog::kMaxNumEntries - 1, | |
55 static_cast<int>(log->events().size())); | |
56 EXPECT_EQ(LoadLog::TYPE_CANCELLED, | |
57 log->events()[LoadLog::kMaxNumEntries - 2].type); | |
58 | 57 |
59 // Max it out (none of these get appended to the log). | 58 EXPECT_EQ(kMaxNumEntries, log->events().size()); |
| 59 EXPECT_EQ(0u, log->num_entries_truncated()); |
| 60 |
| 61 // Check the last entry. |
| 62 ExpectLogContains(log, 9, MakeTime(9), |
| 63 LoadLog::TYPE_CANCELLED, |
| 64 LoadLog::PHASE_NONE); |
| 65 |
| 66 // Add three entries while maxed out (will cause truncation) |
60 log->Add(MakeTime(0), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); | 67 log->Add(MakeTime(0), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); |
61 log->Add(MakeTime(0), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); | 68 log->Add(MakeTime(1), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); |
62 log->Add(MakeTime(0), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); | 69 log->Add(MakeTime(2), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); |
63 | 70 |
64 EXPECT_EQ(LoadLog::kMaxNumEntries, log->events().size()); | 71 EXPECT_EQ(kMaxNumEntries, log->events().size()); |
| 72 EXPECT_EQ(3u, log->num_entries_truncated()); |
65 | 73 |
66 // We terminated with a "truncation" event. | 74 // Check the last entry -- it should be the final entry we added. |
67 ExpectLogContains(log, LoadLog::kMaxNumEntries - 1, MakeTime(0), | 75 ExpectLogContains(log, 9, MakeTime(2), |
68 LoadLog::TYPE_LOG_TRUNCATED, LoadLog::PHASE_NONE); | 76 LoadLog::TYPE_CANCELLED, |
| 77 LoadLog::PHASE_NONE); |
69 } | 78 } |
70 | 79 |
71 TEST(LoadLogTest, Append) { | 80 TEST(LoadLogTest, Append) { |
72 scoped_refptr<LoadLog> log1(new LoadLog); | 81 scoped_refptr<LoadLog> log1(new LoadLog(10)); |
73 scoped_refptr<LoadLog> log2(new LoadLog); | 82 scoped_refptr<LoadLog> log2(new LoadLog(10)); |
74 | 83 |
75 log1->Add(MakeTime(0), LoadLog::TYPE_HOST_RESOLVER_IMPL, | 84 log1->Add(MakeTime(0), LoadLog::TYPE_HOST_RESOLVER_IMPL, |
76 LoadLog::PHASE_BEGIN); | 85 LoadLog::PHASE_BEGIN); |
77 | 86 |
78 log2->Add(MakeTime(3), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); | 87 log2->Add(MakeTime(3), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); |
79 log2->Add(MakeTime(9), LoadLog::TYPE_HOST_RESOLVER_IMPL, LoadLog::PHASE_END); | 88 log2->Add(MakeTime(9), LoadLog::TYPE_HOST_RESOLVER_IMPL, LoadLog::PHASE_END); |
80 | 89 |
81 log1->Append(log2); | 90 log1->Append(log2); |
82 | 91 |
83 // Add something else to log2 (should NOT be reflected in log1). | 92 // Add something else to log2 (should NOT be reflected in log1). |
84 log2->Add(MakeTime(19), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); | 93 log2->Add(MakeTime(19), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); |
85 | 94 |
86 EXPECT_EQ(3u, log1->events().size()); | 95 EXPECT_EQ(3u, log1->events().size()); |
| 96 EXPECT_EQ(0u, log1->num_entries_truncated()); |
87 | 97 |
88 ExpectLogContains(log1, 0, MakeTime(0), LoadLog::TYPE_HOST_RESOLVER_IMPL, | 98 ExpectLogContains(log1, 0, MakeTime(0), LoadLog::TYPE_HOST_RESOLVER_IMPL, |
89 LoadLog::PHASE_BEGIN); | 99 LoadLog::PHASE_BEGIN); |
90 | 100 |
91 ExpectLogContains(log1, 1, MakeTime(3), LoadLog::TYPE_CANCELLED, | 101 ExpectLogContains(log1, 1, MakeTime(3), LoadLog::TYPE_CANCELLED, |
92 LoadLog::PHASE_NONE); | 102 LoadLog::PHASE_NONE); |
93 | 103 |
94 ExpectLogContains(log1, 2, MakeTime(9), LoadLog::TYPE_HOST_RESOLVER_IMPL, | 104 ExpectLogContains(log1, 2, MakeTime(9), LoadLog::TYPE_HOST_RESOLVER_IMPL, |
95 LoadLog::PHASE_END); | 105 LoadLog::PHASE_END); |
96 } | 106 } |
97 | 107 |
98 TEST(LoadLogTest, AppendWithTruncation) { | 108 TEST(LoadLogTest, AppendWithTruncation) { |
99 // Append() should also respect the maximum number of entries bound. | 109 // Append() should also respect the maximum number of entries bound. |
100 // (This is basically the same test as LoadLogTest.Truncation). | 110 // (This is basically the same test as LoadLogTest.Truncation). |
101 | 111 |
102 // Create two load logs, which are 2/3 capcity. | 112 // Create two load logs, which both have 6 out of 10 entries filled. |
103 scoped_refptr<LoadLog> log1(new LoadLog); | 113 size_t kMaxNumEntries = 10; |
104 scoped_refptr<LoadLog> log2(new LoadLog); | 114 scoped_refptr<LoadLog> log1(new LoadLog(kMaxNumEntries)); |
105 for (size_t i = 0; i < 2 * LoadLog::kMaxNumEntries / 3; ++i) { | 115 scoped_refptr<LoadLog> log2(new LoadLog(kMaxNumEntries)); |
106 log1->Add(MakeTime(1), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); | 116 for (size_t i = 0; i < 6; ++i) { |
107 log2->Add(MakeTime(2), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); | 117 log1->Add(MakeTime(i), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); |
| 118 log2->Add(MakeTime(2 * i), LoadLog::TYPE_CANCELLED, LoadLog::PHASE_NONE); |
108 } | 119 } |
109 | 120 |
110 // Append log2 to log1. | 121 // Append log2 to log1. |
111 log1->Append(log2); | 122 log1->Append(log2); |
112 | 123 |
113 EXPECT_EQ(LoadLog::kMaxNumEntries, log1->events().size()); | 124 // The combined log totalled 12 entries, so 2 must have been dropped. |
| 125 EXPECT_EQ(10u, log1->events().size()); |
| 126 EXPECT_EQ(2u, log1->num_entries_truncated()); |
114 | 127 |
115 // We terminated with a "truncation" event. | 128 // Combined log should end with the final entry of log2. |
116 ExpectLogContains(log1, LoadLog::kMaxNumEntries - 1, MakeTime(2), | 129 ExpectLogContains(log1, 9, MakeTime(10), LoadLog::TYPE_CANCELLED, |
117 LoadLog::TYPE_LOG_TRUNCATED, LoadLog::PHASE_NONE); | 130 LoadLog::PHASE_NONE); |
118 } | 131 } |
119 | 132 |
120 TEST(LoadLogTest, EventTypeToString) { | 133 TEST(LoadLogTest, EventTypeToString) { |
121 EXPECT_STREQ("HOST_RESOLVER_IMPL", | 134 EXPECT_STREQ("HOST_RESOLVER_IMPL", |
122 LoadLog::EventTypeToString(LoadLog::TYPE_HOST_RESOLVER_IMPL)); | 135 LoadLog::EventTypeToString(LoadLog::TYPE_HOST_RESOLVER_IMPL)); |
123 EXPECT_STREQ("HOST_RESOLVER_IMPL_OBSERVER_ONSTART", | 136 EXPECT_STREQ("HOST_RESOLVER_IMPL_OBSERVER_ONSTART", |
124 LoadLog::EventTypeToString( | 137 LoadLog::EventTypeToString( |
125 LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART)); | 138 LoadLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONSTART)); |
126 } | 139 } |
127 | 140 |
128 } // namespace | 141 } // namespace |
129 } // namespace net | 142 } // namespace net |
OLD | NEW |