OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/password_manager/core/browser/statistics_table.h" | 5 #include "components/password_manager/core/browser/statistics_table.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 | 54 |
55 private: | 55 private: |
56 base::ScopedTempDir temp_dir_; | 56 base::ScopedTempDir temp_dir_; |
57 std::unique_ptr<sql::Connection> connection_; | 57 std::unique_ptr<sql::Connection> connection_; |
58 std::unique_ptr<StatisticsTable> db_; | 58 std::unique_ptr<StatisticsTable> db_; |
59 InteractionsStats test_data_; | 59 InteractionsStats test_data_; |
60 }; | 60 }; |
61 | 61 |
62 TEST_F(StatisticsTableTest, Sanity) { | 62 TEST_F(StatisticsTableTest, Sanity) { |
63 EXPECT_TRUE(db()->AddRow(test_data())); | 63 EXPECT_TRUE(db()->AddRow(test_data())); |
| 64 EXPECT_THAT(db()->GetAllRows(), ElementsAre(test_data())); |
64 EXPECT_THAT(db()->GetRows(test_data().origin_domain), | 65 EXPECT_THAT(db()->GetRows(test_data().origin_domain), |
65 ElementsAre(test_data())); | 66 ElementsAre(test_data())); |
66 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); | 67 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); |
| 68 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
67 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); | 69 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); |
68 } | 70 } |
69 | 71 |
70 TEST_F(StatisticsTableTest, Reload) { | 72 TEST_F(StatisticsTableTest, Reload) { |
71 EXPECT_TRUE(db()->AddRow(test_data())); | 73 EXPECT_TRUE(db()->AddRow(test_data())); |
72 | 74 |
73 ReloadDatabase(); | 75 ReloadDatabase(); |
74 | 76 |
| 77 EXPECT_THAT(db()->GetAllRows(), ElementsAre(test_data())); |
75 EXPECT_THAT(db()->GetRows(test_data().origin_domain), | 78 EXPECT_THAT(db()->GetRows(test_data().origin_domain), |
76 ElementsAre(test_data())); | 79 ElementsAre(test_data())); |
77 } | 80 } |
78 | 81 |
79 TEST_F(StatisticsTableTest, DoubleOperation) { | 82 TEST_F(StatisticsTableTest, DoubleOperation) { |
80 EXPECT_TRUE(db()->AddRow(test_data())); | 83 EXPECT_TRUE(db()->AddRow(test_data())); |
81 test_data().dismissal_count++; | 84 test_data().dismissal_count++; |
82 EXPECT_TRUE(db()->AddRow(test_data())); | 85 EXPECT_TRUE(db()->AddRow(test_data())); |
83 | 86 |
| 87 EXPECT_THAT(db()->GetAllRows(), ElementsAre(test_data())); |
84 EXPECT_THAT(db()->GetRows(test_data().origin_domain), | 88 EXPECT_THAT(db()->GetRows(test_data().origin_domain), |
85 ElementsAre(test_data())); | 89 ElementsAre(test_data())); |
86 | 90 |
87 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); | 91 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); |
| 92 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
88 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); | 93 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); |
89 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); | 94 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); |
90 } | 95 } |
91 | 96 |
92 TEST_F(StatisticsTableTest, DifferentUsernames) { | 97 TEST_F(StatisticsTableTest, DifferentUsernames) { |
93 InteractionsStats stats1 = test_data(); | 98 InteractionsStats stats1 = test_data(); |
94 InteractionsStats stats2 = test_data(); | 99 InteractionsStats stats2 = test_data(); |
95 stats2.username_value = base::ASCIIToUTF16(kUsername2); | 100 stats2.username_value = base::ASCIIToUTF16(kUsername2); |
96 | 101 |
97 EXPECT_TRUE(db()->AddRow(stats1)); | 102 EXPECT_TRUE(db()->AddRow(stats1)); |
98 EXPECT_TRUE(db()->AddRow(stats2)); | 103 EXPECT_TRUE(db()->AddRow(stats2)); |
| 104 EXPECT_THAT(db()->GetAllRows(), UnorderedElementsAre(stats1, stats2)); |
99 EXPECT_THAT(db()->GetRows(test_data().origin_domain), | 105 EXPECT_THAT(db()->GetRows(test_data().origin_domain), |
100 UnorderedElementsAre(stats1, stats2)); | 106 UnorderedElementsAre(stats1, stats2)); |
101 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); | 107 EXPECT_TRUE(db()->RemoveRow(test_data().origin_domain)); |
| 108 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
102 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); | 109 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); |
103 } | 110 } |
104 | 111 |
105 TEST_F(StatisticsTableTest, RemoveStatsByOriginAndTime) { | 112 TEST_F(StatisticsTableTest, RemoveStatsByOriginAndTime) { |
106 InteractionsStats stats1 = test_data(); | 113 InteractionsStats stats1 = test_data(); |
107 stats1.update_time = base::Time::FromTimeT(1); | 114 stats1.update_time = base::Time::FromTimeT(1); |
108 InteractionsStats stats2 = test_data(); | 115 InteractionsStats stats2 = test_data(); |
109 stats2.update_time = base::Time::FromTimeT(2); | 116 stats2.update_time = base::Time::FromTimeT(2); |
110 stats2.origin_domain = GURL(kTestDomain2); | 117 stats2.origin_domain = GURL(kTestDomain2); |
111 InteractionsStats stats3 = test_data(); | 118 InteractionsStats stats3 = test_data(); |
112 stats3.update_time = base::Time::FromTimeT(2); | 119 stats3.update_time = base::Time::FromTimeT(2); |
113 stats3.origin_domain = GURL(kTestDomain3); | 120 stats3.origin_domain = GURL(kTestDomain3); |
114 InteractionsStats stats4 = test_data(); | 121 InteractionsStats stats4 = test_data(); |
115 stats4.update_time = base::Time::FromTimeT(2); | 122 stats4.update_time = base::Time::FromTimeT(2); |
116 stats4.origin_domain = GURL(kTestDomain4); | 123 stats4.origin_domain = GURL(kTestDomain4); |
117 | 124 |
118 EXPECT_TRUE(db()->AddRow(stats1)); | 125 EXPECT_TRUE(db()->AddRow(stats1)); |
119 EXPECT_TRUE(db()->AddRow(stats2)); | 126 EXPECT_TRUE(db()->AddRow(stats2)); |
120 EXPECT_TRUE(db()->AddRow(stats3)); | 127 EXPECT_TRUE(db()->AddRow(stats3)); |
121 EXPECT_TRUE(db()->AddRow(stats4)); | 128 EXPECT_TRUE(db()->AddRow(stats4)); |
| 129 EXPECT_THAT(db()->GetAllRows(), |
| 130 UnorderedElementsAre(stats1, stats2, stats3, stats4)); |
122 EXPECT_THAT(db()->GetRows(stats1.origin_domain), ElementsAre(stats1)); | 131 EXPECT_THAT(db()->GetRows(stats1.origin_domain), ElementsAre(stats1)); |
123 EXPECT_THAT(db()->GetRows(stats2.origin_domain), ElementsAre(stats2)); | 132 EXPECT_THAT(db()->GetRows(stats2.origin_domain), ElementsAre(stats2)); |
124 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); | 133 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); |
125 EXPECT_THAT(db()->GetRows(stats4.origin_domain), ElementsAre(stats4)); | 134 EXPECT_THAT(db()->GetRows(stats4.origin_domain), ElementsAre(stats4)); |
126 | 135 |
127 // Remove the entry with the timestamp 1 with no origin filter. | 136 // Remove the entry with the timestamp 1 with no origin filter. |
128 EXPECT_TRUE( | 137 EXPECT_TRUE( |
129 db()->RemoveStatsByOriginAndTime(base::Callback<bool(const GURL&)>(), | 138 db()->RemoveStatsByOriginAndTime(base::Callback<bool(const GURL&)>(), |
130 base::Time(), base::Time::FromTimeT(2))); | 139 base::Time(), base::Time::FromTimeT(2))); |
| 140 EXPECT_THAT(db()->GetAllRows(), UnorderedElementsAre(stats2, stats3, stats4)); |
131 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); | 141 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); |
132 EXPECT_THAT(db()->GetRows(stats2.origin_domain), ElementsAre(stats2)); | 142 EXPECT_THAT(db()->GetRows(stats2.origin_domain), ElementsAre(stats2)); |
133 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); | 143 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); |
134 EXPECT_THAT(db()->GetRows(stats4.origin_domain), ElementsAre(stats4)); | 144 EXPECT_THAT(db()->GetRows(stats4.origin_domain), ElementsAre(stats4)); |
135 | 145 |
136 // Remove the entries with the timestamp 2 that are NOT matching | 146 // Remove the entries with the timestamp 2 that are NOT matching |
137 // |kTestDomain3|. | 147 // |kTestDomain3|. |
138 EXPECT_TRUE(db()->RemoveStatsByOriginAndTime( | 148 EXPECT_TRUE(db()->RemoveStatsByOriginAndTime( |
139 base::Bind(static_cast<bool (*)(const GURL&, const GURL&)>(operator!=), | 149 base::Bind(static_cast<bool (*)(const GURL&, const GURL&)>(operator!=), |
140 stats3.origin_domain), | 150 stats3.origin_domain), |
141 base::Time::FromTimeT(2), base::Time())); | 151 base::Time::FromTimeT(2), base::Time())); |
| 152 EXPECT_THAT(db()->GetAllRows(), ElementsAre(stats3)); |
142 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); | 153 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); |
143 EXPECT_THAT(db()->GetRows(stats2.origin_domain), IsEmpty()); | 154 EXPECT_THAT(db()->GetRows(stats2.origin_domain), IsEmpty()); |
144 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); | 155 EXPECT_THAT(db()->GetRows(stats3.origin_domain), ElementsAre(stats3)); |
145 EXPECT_THAT(db()->GetRows(stats4.origin_domain), IsEmpty()); | 156 EXPECT_THAT(db()->GetRows(stats4.origin_domain), IsEmpty()); |
146 | 157 |
147 // Remove the entries with the timestamp 2 with no origin filter. | 158 // Remove the entries with the timestamp 2 with no origin filter. |
148 // This should delete the remaining entry. | 159 // This should delete the remaining entry. |
149 EXPECT_TRUE( | 160 EXPECT_TRUE( |
150 db()->RemoveStatsByOriginAndTime(base::Callback<bool(const GURL&)>(), | 161 db()->RemoveStatsByOriginAndTime(base::Callback<bool(const GURL&)>(), |
151 base::Time::FromTimeT(2), base::Time())); | 162 base::Time::FromTimeT(2), base::Time())); |
| 163 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
152 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); | 164 EXPECT_THAT(db()->GetRows(stats1.origin_domain), IsEmpty()); |
153 EXPECT_THAT(db()->GetRows(stats2.origin_domain), IsEmpty()); | 165 EXPECT_THAT(db()->GetRows(stats2.origin_domain), IsEmpty()); |
154 EXPECT_THAT(db()->GetRows(stats3.origin_domain), IsEmpty()); | 166 EXPECT_THAT(db()->GetRows(stats3.origin_domain), IsEmpty()); |
155 EXPECT_THAT(db()->GetRows(stats4.origin_domain), IsEmpty()); | 167 EXPECT_THAT(db()->GetRows(stats4.origin_domain), IsEmpty()); |
156 } | 168 } |
157 | 169 |
158 TEST_F(StatisticsTableTest, BadURL) { | 170 TEST_F(StatisticsTableTest, BadURL) { |
159 test_data().origin_domain = GURL("trash"); | 171 test_data().origin_domain = GURL("trash"); |
160 EXPECT_FALSE(db()->AddRow(test_data())); | 172 EXPECT_FALSE(db()->AddRow(test_data())); |
| 173 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
161 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); | 174 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); |
162 EXPECT_FALSE(db()->RemoveRow(test_data().origin_domain)); | 175 EXPECT_FALSE(db()->RemoveRow(test_data().origin_domain)); |
163 } | 176 } |
164 | 177 |
165 TEST_F(StatisticsTableTest, EmptyURL) { | 178 TEST_F(StatisticsTableTest, EmptyURL) { |
166 test_data().origin_domain = GURL(); | 179 test_data().origin_domain = GURL(); |
167 EXPECT_FALSE(db()->AddRow(test_data())); | 180 EXPECT_FALSE(db()->AddRow(test_data())); |
| 181 EXPECT_THAT(db()->GetAllRows(), IsEmpty()); |
168 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); | 182 EXPECT_THAT(db()->GetRows(test_data().origin_domain), IsEmpty()); |
169 EXPECT_FALSE(db()->RemoveRow(test_data().origin_domain)); | 183 EXPECT_FALSE(db()->RemoveRow(test_data().origin_domain)); |
170 } | 184 } |
171 | 185 |
172 } // namespace | 186 } // namespace |
173 } // namespace password_manager | 187 } // namespace password_manager |
OLD | NEW |