OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2017 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/reporting/reporting_cache.h" | |
6 | |
7 #include <string> | |
8 | |
9 #include "base/memory/ptr_util.h" | |
10 #include "base/time/time.h" | |
11 #include "base/values.h" | |
12 #include "net/reporting/reporting_client.h" | |
13 #include "net/reporting/reporting_report.h" | |
14 #include "net/reporting/reporting_test_util.h" | |
15 #include "testing/gtest/include/gtest/gtest.h" | |
16 #include "url/gurl.h" | |
17 #include "url/origin.h" | |
18 | |
19 namespace net { | |
20 namespace { | |
21 | |
22 class ReportingCacheTest : public ::testing::Test { | |
23 protected: | |
24 const GURL kUrl1 = GURL("https://origin1/path"); | |
25 const url::Origin kOrigin1 = url::Origin(GURL("https://origin1/")); | |
26 const url::Origin kOrigin2 = url::Origin(GURL("https://origin2/")); | |
27 const GURL kEndpoint1 = GURL("https://endpoint1/"); | |
28 const GURL kEndpoint2 = GURL("https://endpoint2/"); | |
29 const std::string kGroup1 = "group1"; | |
30 const std::string kGroup2 = "group2"; | |
31 const std::string kType = "default"; | |
32 const base::TimeTicks kNow = base::TimeTicks::Now(); | |
33 const base::TimeTicks kExpires1 = kNow + base::TimeDelta::FromDays(7); | |
34 const base::TimeTicks kExpires2 = kExpires1 + base::TimeDelta::FromDays(7); | |
jkarlin
2017/03/23 15:05:37
The above members need _ suffixes.
Julia Tuttle
2017/03/23 19:24:04
Done.
| |
35 | |
36 ReportingCache cache_; | |
37 }; | |
38 | |
39 TEST_F(ReportingCacheTest, Reports) { | |
40 std::vector<const ReportingReport*> reports; | |
41 cache_.GetReports(&reports); | |
42 EXPECT_TRUE(reports.empty()); | |
43 | |
44 cache_.AddReport(kUrl1, kGroup1, kType, | |
45 base::MakeUnique<base::DictionaryValue>(), kNow, 0); | |
46 | |
47 cache_.GetReports(&reports); | |
48 ASSERT_EQ(1u, reports.size()); | |
49 const ReportingReport* report = reports[0]; | |
50 ASSERT_TRUE(report); | |
51 EXPECT_EQ(kUrl1, report->url); | |
52 EXPECT_EQ(kGroup1, report->group); | |
53 EXPECT_EQ(kType, report->type); | |
54 // TODO(juliatuttle): Check body? | |
55 EXPECT_EQ(kNow, report->queued); | |
56 EXPECT_EQ(0, report->attempts); | |
57 EXPECT_FALSE(cache_.IsReportPendingForTesting(report)); | |
58 EXPECT_FALSE(cache_.IsReportDoomedForTesting(report)); | |
59 | |
60 cache_.IncrementReportsAttempts(reports); | |
61 | |
62 cache_.GetReports(&reports); | |
63 ASSERT_EQ(1u, reports.size()); | |
64 report = reports[0]; | |
65 ASSERT_TRUE(report); | |
66 EXPECT_EQ(1, report->attempts); | |
67 | |
68 cache_.RemoveReports(reports); | |
69 | |
70 cache_.GetReports(&reports); | |
71 EXPECT_TRUE(reports.empty()); | |
72 } | |
73 | |
74 TEST_F(ReportingCacheTest, RemoveAllReports) { | |
75 cache_.AddReport(kUrl1, kGroup1, kType, | |
76 base::MakeUnique<base::DictionaryValue>(), kNow, 0); | |
77 cache_.AddReport(kUrl1, kGroup1, kType, | |
78 base::MakeUnique<base::DictionaryValue>(), kNow, 0); | |
79 | |
80 std::vector<const ReportingReport*> reports; | |
81 cache_.GetReports(&reports); | |
82 EXPECT_EQ(2u, reports.size()); | |
83 | |
84 cache_.RemoveAllReports(); | |
85 | |
86 cache_.GetReports(&reports); | |
87 EXPECT_TRUE(reports.empty()); | |
88 } | |
89 | |
90 TEST_F(ReportingCacheTest, RemovePendingReports) { | |
91 cache_.AddReport(kUrl1, kGroup1, kType, | |
92 base::MakeUnique<base::DictionaryValue>(), kNow, 0); | |
93 | |
94 std::vector<const ReportingReport*> reports; | |
95 cache_.GetReports(&reports); | |
96 ASSERT_EQ(1u, reports.size()); | |
97 EXPECT_FALSE(cache_.IsReportPendingForTesting(reports[0])); | |
98 EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0])); | |
99 | |
100 cache_.SetReportsPending(reports); | |
101 EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0])); | |
102 EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0])); | |
103 | |
104 cache_.RemoveReports(reports); | |
105 EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0])); | |
106 EXPECT_TRUE(cache_.IsReportDoomedForTesting(reports[0])); | |
107 | |
108 // After removing report, future calls to GetReports should not return it. | |
109 std::vector<const ReportingReport*> visible_reports; | |
110 cache_.GetReports(&visible_reports); | |
111 EXPECT_TRUE(visible_reports.empty()); | |
112 EXPECT_EQ(1u, cache_.GetFullReportCountForTesting()); | |
113 | |
114 // After clearing pending flag, report should be deleted. | |
115 cache_.ClearReportsPending(reports); | |
116 EXPECT_EQ(0u, cache_.GetFullReportCountForTesting()); | |
117 } | |
118 | |
119 TEST_F(ReportingCacheTest, RemoveAllPendingReports) { | |
120 cache_.AddReport(kUrl1, kGroup1, kType, | |
121 base::MakeUnique<base::DictionaryValue>(), kNow, 0); | |
122 | |
123 std::vector<const ReportingReport*> reports; | |
124 cache_.GetReports(&reports); | |
125 ASSERT_EQ(1u, reports.size()); | |
126 EXPECT_FALSE(cache_.IsReportPendingForTesting(reports[0])); | |
127 EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0])); | |
128 | |
129 cache_.SetReportsPending(reports); | |
130 EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0])); | |
131 EXPECT_FALSE(cache_.IsReportDoomedForTesting(reports[0])); | |
132 | |
133 cache_.RemoveAllReports(); | |
134 EXPECT_TRUE(cache_.IsReportPendingForTesting(reports[0])); | |
135 EXPECT_TRUE(cache_.IsReportDoomedForTesting(reports[0])); | |
136 | |
137 // After removing report, future calls to GetReports should not return it. | |
138 std::vector<const ReportingReport*> visible_reports; | |
139 cache_.GetReports(&visible_reports); | |
140 EXPECT_TRUE(visible_reports.empty()); | |
141 EXPECT_EQ(1u, cache_.GetFullReportCountForTesting()); | |
142 | |
143 // After clearing pending flag, report should be deleted. | |
144 cache_.ClearReportsPending(reports); | |
145 EXPECT_EQ(0u, cache_.GetFullReportCountForTesting()); | |
146 } | |
147 | |
148 TEST_F(ReportingCacheTest, Endpoints) { | |
149 cache_.SetClient(kOrigin1, kEndpoint1, ReportingClient::Subdomains::EXCLUDE, | |
150 kGroup1, kExpires1); | |
151 | |
152 const ReportingClient* client = | |
153 FindClientInCache(&cache_, kOrigin1, kEndpoint1); | |
154 ASSERT_TRUE(client); | |
155 EXPECT_EQ(kOrigin1, client->origin); | |
156 EXPECT_EQ(kEndpoint1, client->endpoint); | |
157 EXPECT_EQ(ReportingClient::Subdomains::EXCLUDE, client->subdomains); | |
158 EXPECT_EQ(kGroup1, client->group); | |
159 EXPECT_EQ(kExpires1, client->expires); | |
160 | |
161 // Replaces original configuration with new Subdomains, group, and expires | |
162 // values. | |
163 cache_.SetClient(kOrigin1, kEndpoint1, ReportingClient::Subdomains::INCLUDE, | |
164 kGroup2, kExpires2); | |
165 | |
166 client = FindClientInCache(&cache_, kOrigin1, kEndpoint1); | |
167 ASSERT_TRUE(client); | |
168 EXPECT_EQ(kOrigin1, client->origin); | |
169 EXPECT_EQ(kEndpoint1, client->endpoint); | |
170 EXPECT_EQ(ReportingClient::Subdomains::INCLUDE, client->subdomains); | |
171 EXPECT_EQ(kGroup2, client->group); | |
172 EXPECT_EQ(kExpires2, client->expires); | |
173 | |
174 cache_.RemoveClients(std::vector<const ReportingClient*>{client}); | |
175 | |
176 client = FindClientInCache(&cache_, kOrigin1, kEndpoint1); | |
177 EXPECT_FALSE(client); | |
178 } | |
179 | |
180 TEST_F(ReportingCacheTest, GetClientsForOriginAndGroup) { | |
181 cache_.SetClient(kOrigin1, kEndpoint1, ReportingClient::Subdomains::EXCLUDE, | |
182 kGroup1, kExpires1); | |
183 cache_.SetClient(kOrigin1, kEndpoint2, ReportingClient::Subdomains::EXCLUDE, | |
184 kGroup2, kExpires1); | |
185 cache_.SetClient(kOrigin2, kEndpoint1, ReportingClient::Subdomains::EXCLUDE, | |
186 kGroup1, kExpires1); | |
187 | |
188 std::vector<const ReportingClient*> clients; | |
189 cache_.GetClientsForOriginAndGroup(kOrigin1, kGroup1, &clients); | |
190 ASSERT_EQ(1u, clients.size()); | |
191 const ReportingClient* client = clients[0]; | |
192 ASSERT_TRUE(client); | |
193 EXPECT_EQ(kOrigin1, client->origin); | |
194 EXPECT_EQ(kGroup1, client->group); | |
195 } | |
196 | |
197 TEST_F(ReportingCacheTest, RemoveClientForOriginAndEndpoint) { | |
198 cache_.SetClient(kOrigin1, kEndpoint1, ReportingClient::Subdomains::EXCLUDE, | |
199 kGroup1, kExpires1); | |
200 cache_.SetClient(kOrigin1, kEndpoint2, ReportingClient::Subdomains::EXCLUDE, | |
201 kGroup2, kExpires1); | |
202 cache_.SetClient(kOrigin2, kEndpoint1, ReportingClient::Subdomains::EXCLUDE, | |
203 kGroup1, kExpires1); | |
204 | |
205 cache_.RemoveClientForOriginAndEndpoint(kOrigin1, kEndpoint1); | |
206 | |
207 std::vector<const ReportingClient*> clients; | |
208 cache_.GetClientsForOriginAndGroup(kOrigin1, kGroup1, &clients); | |
209 EXPECT_TRUE(clients.empty()); | |
210 | |
211 cache_.GetClientsForOriginAndGroup(kOrigin1, kGroup2, &clients); | |
212 EXPECT_EQ(1u, clients.size()); | |
213 | |
214 cache_.GetClientsForOriginAndGroup(kOrigin2, kGroup1, &clients); | |
215 EXPECT_EQ(1u, clients.size()); | |
216 } | |
217 | |
218 TEST_F(ReportingCacheTest, RemoveClientsForEndpoint) { | |
219 cache_.SetClient(kOrigin1, kEndpoint1, ReportingClient::Subdomains::EXCLUDE, | |
220 kGroup1, kExpires1); | |
221 cache_.SetClient(kOrigin1, kEndpoint2, ReportingClient::Subdomains::EXCLUDE, | |
222 kGroup2, kExpires1); | |
223 cache_.SetClient(kOrigin2, kEndpoint1, ReportingClient::Subdomains::EXCLUDE, | |
224 kGroup1, kExpires1); | |
225 | |
226 cache_.RemoveClientsForEndpoint(kEndpoint1); | |
227 | |
228 std::vector<const ReportingClient*> clients; | |
229 cache_.GetClientsForOriginAndGroup(kOrigin1, kGroup1, &clients); | |
230 EXPECT_TRUE(clients.empty()); | |
231 | |
232 cache_.GetClientsForOriginAndGroup(kOrigin1, kGroup2, &clients); | |
233 EXPECT_EQ(1u, clients.size()); | |
234 | |
235 cache_.GetClientsForOriginAndGroup(kOrigin2, kGroup1, &clients); | |
236 EXPECT_TRUE(clients.empty()); | |
237 } | |
238 | |
239 TEST_F(ReportingCacheTest, RemoveAllClients) { | |
240 cache_.SetClient(kOrigin1, kEndpoint1, ReportingClient::Subdomains::EXCLUDE, | |
241 kGroup1, kExpires1); | |
242 cache_.SetClient(kOrigin2, kEndpoint2, ReportingClient::Subdomains::EXCLUDE, | |
243 kGroup1, kExpires1); | |
244 | |
245 cache_.RemoveAllClients(); | |
246 | |
247 std::vector<const ReportingClient*> clients; | |
248 cache_.GetClients(&clients); | |
249 EXPECT_TRUE(clients.empty()); | |
250 } | |
251 | |
252 } // namespace | |
253 } // namespace net | |
OLD | NEW |