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

Side by Side Diff: components/precache/core/precache_url_table_unittest.cc

Issue 2586813004: Report downloaded resources at most once (Closed)
Patch Set: Fix race condition in PrecacheFetcherTest due to MaybePost Created 3 years, 12 months 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
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "components/precache/core/precache_url_table.h" 5 #include "components/precache/core/precache_url_table.h"
6 6
7 #include <map> 7 #include <map>
8 #include <memory> 8 #include <memory>
9 #include <set> 9 #include <set>
10 10
11 #include "base/bind.h"
12 #include "base/bind_helpers.h"
11 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
12 #include "base/time/time.h" 14 #include "base/time/time.h"
13 #include "sql/connection.h" 15 #include "sql/connection.h"
14 #include "sql/statement.h" 16 #include "sql/statement.h"
15 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
17 19
18 namespace precache { 20 namespace precache {
19 21
20 void PrintTo(const PrecacheURLInfo& url_info, ::std::ostream* os) { 22 void PrintTo(const PrecacheURLInfo& url_info, ::std::ostream* os) {
21 *os << "{" << url_info.was_precached << ", " << url_info.is_precached << ", " 23 *os << "{" << url_info.was_precached << ", " << url_info.is_precached << ", "
22 << url_info.was_used << "}"; 24 << url_info.was_used << "}";
23 } 25 }
24 26
25 namespace { 27 namespace {
26 28
27 class PrecacheURLTableTest : public testing::Test { 29 class PrecacheURLTableTest : public testing::Test {
28 public: 30 public:
29 PrecacheURLTableTest() {} 31 PrecacheURLTableTest() {}
30 ~PrecacheURLTableTest() override {} 32 ~PrecacheURLTableTest() override {}
31 33
32 protected: 34 protected:
33 void SetUp() override { 35 void SetUp() override {
34 precache_url_table_.reset(new PrecacheURLTable()); 36 precache_url_table_.reset(new PrecacheURLTable());
35 db_.reset(new sql::Connection()); 37 db_.reset(new sql::Connection());
38 db_->set_error_callback(base::Bind(&PrecacheURLTableTest::SqlErrorCallback,
39 base::Unretained(this)));
36 ASSERT_TRUE(db_->OpenInMemory()); 40 ASSERT_TRUE(db_->OpenInMemory());
37 ASSERT_TRUE(precache_url_table_->Init(db_.get())); 41 ASSERT_TRUE(precache_url_table_->Init(db_.get()));
38 } 42 }
39 43
44 void SqlErrorCallback(int line, sql::Statement* statement) {
45 LOG(INFO) << "SQL Error at line " << line << ": "
46 << statement->GetSQLStatement();
47 }
48
40 std::unique_ptr<PrecacheURLTable> precache_url_table_; 49 std::unique_ptr<PrecacheURLTable> precache_url_table_;
41 std::unique_ptr<sql::Connection> db_; 50 std::unique_ptr<sql::Connection> db_;
42 }; 51 };
43 52
44 TEST_F(PrecacheURLTableTest, AddURLWithNoExistingRow) { 53 TEST_F(PrecacheURLTableTest, AddURLWithNoExistingRow) {
45 const base::Time kTime = base::Time::FromInternalValue(100); 54 const base::Time kTime = base::Time::FromInternalValue(100);
46 precache_url_table_->AddURL(GURL("http://url.com"), 1, true, kTime); 55 precache_url_table_->AddURL(GURL("http://url.com"), 1, true, true, kTime);
47 56
48 std::map<GURL, base::Time> expected_map; 57 std::map<GURL, base::Time> expected_map;
49 expected_map[GURL("http://url.com")] = kTime; 58 expected_map[GURL("http://url.com")] = kTime;
50 59
51 std::map<GURL, base::Time> actual_map; 60 std::map<GURL, base::Time> actual_map;
52 precache_url_table_->GetAllDataForTesting(&actual_map); 61 precache_url_table_->GetAllDataForTesting(&actual_map);
53 EXPECT_EQ(expected_map, actual_map); 62 EXPECT_EQ(expected_map, actual_map);
54 } 63 }
55 64
56 TEST_F(PrecacheURLTableTest, AddURLWithExistingRow) { 65 TEST_F(PrecacheURLTableTest, AddURLWithExistingRowCached) {
57 const base::Time kOldTime = base::Time::FromInternalValue(50); 66 const base::Time kOldTime = base::Time::FromInternalValue(50);
58 const base::Time kNewTime = base::Time::FromInternalValue(100); 67 const base::Time kNewTime = base::Time::FromInternalValue(100);
59 precache_url_table_->AddURL(GURL("http://url.com"), 1, true, kOldTime); 68 precache_url_table_->AddURL(GURL("http://url.com"), 1, true, true, kOldTime);
60 precache_url_table_->AddURL(GURL("http://url.com"), 1, true, kNewTime); 69 precache_url_table_->AddURL(GURL("http://url.com"), 1, true, true, kNewTime);
61 70
62 std::map<GURL, base::Time> expected_map; 71 std::map<GURL, base::Time> expected_map;
63 expected_map[GURL("http://url.com")] = kNewTime; 72 expected_map[GURL("http://url.com")] = kNewTime;
73
74 std::map<GURL, base::Time> actual_map;
75 precache_url_table_->GetAllDataForTesting(&actual_map);
76 EXPECT_EQ(expected_map, actual_map);
77 }
78
79 TEST_F(PrecacheURLTableTest, AddURLWithExistingRowNotCached) {
80 const base::Time kOldTime = base::Time::FromInternalValue(50);
81 const base::Time kNewTime = base::Time::FromInternalValue(100);
82 precache_url_table_->AddURL(GURL("http://url.com"), 1, true, false, kOldTime);
83 precache_url_table_->AddURL(GURL("http://url.com"), 1, true, false, kNewTime);
84
85 std::map<GURL, base::Time> expected_map;
86 expected_map[GURL("http://url.com")] = kNewTime;
64 87
65 std::map<GURL, base::Time> actual_map; 88 std::map<GURL, base::Time> actual_map;
66 precache_url_table_->GetAllDataForTesting(&actual_map); 89 precache_url_table_->GetAllDataForTesting(&actual_map);
67 EXPECT_EQ(expected_map, actual_map); 90 EXPECT_EQ(expected_map, actual_map);
68 } 91 }
69 92
70 TEST_F(PrecacheURLTableTest, SetURLAsNotPrecached) { 93 TEST_F(PrecacheURLTableTest, SetURLAsNotPrecached) {
71 const base::Time kStaysTime = base::Time::FromInternalValue(50); 94 const base::Time kStaysTime = base::Time::FromInternalValue(50);
72 const base::Time kDeletedTime = base::Time::FromInternalValue(100); 95 const base::Time kDeletedTime = base::Time::FromInternalValue(100);
73 96
74 precache_url_table_->AddURL(GURL("http://stays.com"), 1, true, kStaysTime); 97 precache_url_table_->AddURL(GURL("http://stays.com"), 1, true, true,
75 precache_url_table_->AddURL(GURL("http://deleted.com"), 1, true, 98 kStaysTime);
99 precache_url_table_->AddURL(GURL("http://deleted.com"), 1, true, true,
76 kDeletedTime); 100 kDeletedTime);
77 101
78 precache_url_table_->SetURLAsNotPrecached(GURL("http://deleted.com")); 102 precache_url_table_->SetURLAsNotPrecached(GURL("http://deleted.com"));
79 103
80 std::map<GURL, base::Time> expected_map; 104 std::map<GURL, base::Time> expected_map;
81 expected_map[GURL("http://stays.com")] = kStaysTime; 105 expected_map[GURL("http://stays.com")] = kStaysTime;
82 106
83 std::map<GURL, base::Time> actual_map; 107 std::map<GURL, base::Time> actual_map;
84 precache_url_table_->GetAllDataForTesting(&actual_map); 108 precache_url_table_->GetAllDataForTesting(&actual_map);
85 EXPECT_EQ(expected_map, actual_map); 109 EXPECT_EQ(expected_map, actual_map);
86 } 110 }
87 111
88 TEST_F(PrecacheURLTableTest, GetURLInfo) { 112 TEST_F(PrecacheURLTableTest, GetURLInfo) {
89 const GURL url("http://url.com"); 113 const GURL url("http://url.com");
90 114
91 EXPECT_EQ((PrecacheURLInfo{false, false, false}), 115 EXPECT_EQ((PrecacheURLInfo{false, false, false}),
92 precache_url_table_->GetURLInfo(url)); 116 precache_url_table_->GetURLInfo(url));
93 117
94 precache_url_table_->AddURL(url, 1, true, base::Time::FromInternalValue(100)); 118 precache_url_table_->AddURL(url, 1, true, true,
119 base::Time::FromInternalValue(100));
95 120
96 EXPECT_EQ((PrecacheURLInfo{true, true, false}), 121 EXPECT_EQ((PrecacheURLInfo{true, true, false}),
97 precache_url_table_->GetURLInfo(url)); 122 precache_url_table_->GetURLInfo(url));
98 123
99 precache_url_table_->SetPrecachedURLAsUsed(url); 124 precache_url_table_->SetPrecachedURLAsUsed(url);
100 125
101 EXPECT_EQ((PrecacheURLInfo{true, false, true}), 126 EXPECT_EQ((PrecacheURLInfo{true, false, true}),
102 precache_url_table_->GetURLInfo(url)); 127 precache_url_table_->GetURLInfo(url));
103 128
104 precache_url_table_->AddURL(url, 1, true, base::Time::FromInternalValue(100)); 129 precache_url_table_->AddURL(url, 1, true, true,
130 base::Time::FromInternalValue(100));
105 131
106 EXPECT_EQ((PrecacheURLInfo{true, true, false}), 132 EXPECT_EQ((PrecacheURLInfo{true, true, false}),
107 precache_url_table_->GetURLInfo(url)); 133 precache_url_table_->GetURLInfo(url));
108 134
109 precache_url_table_->SetURLAsNotPrecached(url); 135 precache_url_table_->SetURLAsNotPrecached(url);
110 136
111 EXPECT_EQ((PrecacheURLInfo{true, false, false}), 137 EXPECT_EQ((PrecacheURLInfo{true, false, false}),
112 precache_url_table_->GetURLInfo(url)); 138 precache_url_table_->GetURLInfo(url));
113 } 139 }
114 140
115 TEST_F(PrecacheURLTableTest, DeleteAllPrecachedBefore) { 141 TEST_F(PrecacheURLTableTest, DeleteAllPrecachedBefore) {
116 const base::Time kOldTime = base::Time::FromInternalValue(10); 142 const base::Time kOldTime = base::Time::FromInternalValue(10);
117 const base::Time kBeforeTime = base::Time::FromInternalValue(20); 143 const base::Time kBeforeTime = base::Time::FromInternalValue(20);
118 const base::Time kEndTime = base::Time::FromInternalValue(30); 144 const base::Time kEndTime = base::Time::FromInternalValue(30);
119 const base::Time kAfterTime = base::Time::FromInternalValue(40); 145 const base::Time kAfterTime = base::Time::FromInternalValue(40);
120 146
121 precache_url_table_->AddURL(GURL("http://old.com"), 1, true, kOldTime); 147 precache_url_table_->AddURL(GURL("http://old.com"), 1, true, true, kOldTime);
122 precache_url_table_->AddURL(GURL("http://before.com"), 1, true, kBeforeTime); 148 precache_url_table_->AddURL(GURL("http://before.com"), 1, true, true,
123 precache_url_table_->AddURL(GURL("http://end.com"), 1, true, kEndTime); 149 kBeforeTime);
124 precache_url_table_->AddURL(GURL("http://after.com"), 1, true, kAfterTime); 150 precache_url_table_->AddURL(GURL("http://end.com"), 1, true, true, kEndTime);
151 precache_url_table_->AddURL(GURL("http://after.com"), 1, true, true,
152 kAfterTime);
125 153
126 precache_url_table_->DeleteAllPrecachedBefore(kEndTime); 154 precache_url_table_->DeleteAllPrecachedBefore(kEndTime);
127 155
128 std::map<GURL, base::Time> expected_map; 156 std::map<GURL, base::Time> expected_map;
129 expected_map[GURL("http://end.com")] = kEndTime; 157 expected_map[GURL("http://end.com")] = kEndTime;
130 expected_map[GURL("http://after.com")] = kAfterTime; 158 expected_map[GURL("http://after.com")] = kAfterTime;
131 159
132 std::map<GURL, base::Time> actual_map; 160 std::map<GURL, base::Time> actual_map;
133 precache_url_table_->GetAllDataForTesting(&actual_map); 161 precache_url_table_->GetAllDataForTesting(&actual_map);
134 EXPECT_EQ(expected_map, actual_map); 162 EXPECT_EQ(expected_map, actual_map);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 EXPECT_EQ(0, statement.ColumnInt(2)); 198 EXPECT_EQ(0, statement.ColumnInt(2));
171 EXPECT_EQ(1, statement.ColumnInt(3)); 199 EXPECT_EQ(1, statement.ColumnInt(3));
172 } 200 }
173 EXPECT_THAT(std::set<std::string>(begin(old_urls), end(old_urls)), 201 EXPECT_THAT(std::set<std::string>(begin(old_urls), end(old_urls)),
174 ::testing::ContainerEq(actual_urls)); 202 ::testing::ContainerEq(actual_urls));
175 } 203 }
176 204
177 } // namespace 205 } // namespace
178 206
179 } // namespace precache 207 } // namespace precache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698