| 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 |