OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/files/file_path.h" | 5 #include "base/files/file_path.h" |
6 #include "base/memory/ref_counted.h" | 6 #include "base/memory/ref_counted.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
114 blob_data_handle.reset(); | 114 blob_data_handle.reset(); |
115 another_handle.reset(); | 115 another_handle.reset(); |
116 { // Clean up for ASAN | 116 { // Clean up for ASAN |
117 base::RunLoop run_loop; | 117 base::RunLoop run_loop; |
118 run_loop.RunUntilIdle(); | 118 run_loop.RunUntilIdle(); |
119 } | 119 } |
120 blob_data_handle = context.GetBlobDataFromUUID(kId); | 120 blob_data_handle = context.GetBlobDataFromUUID(kId); |
121 EXPECT_FALSE(blob_data_handle); | 121 EXPECT_FALSE(blob_data_handle); |
122 } | 122 } |
123 | 123 |
124 TEST(BlobStorageContextTest, MemoryUsage) { | |
125 const std::string kId1("id1"); | |
126 const std::string kId2("id2"); | |
127 | |
128 base::MessageLoop fake_io_message_loop; | |
129 | |
130 BlobDataBuilder builder1(kId1); | |
131 BlobDataBuilder builder2(kId2); | |
132 builder1.AppendData("Data1Data2"); | |
133 builder2.AppendBlob(kId1); | |
134 builder2.AppendBlob(kId1); | |
135 builder2.AppendBlob(kId1); | |
136 builder2.AppendBlob(kId1); | |
137 builder2.AppendBlob(kId1); | |
138 builder2.AppendBlob(kId1); | |
139 builder2.AppendBlob(kId1); | |
140 | |
141 BlobStorageContext context; | |
142 EXPECT_EQ(0lu, context.memory_usage()); | |
143 | |
144 scoped_ptr<BlobDataHandle> blob_data_handle = | |
145 context.AddFinishedBlob(&builder1); | |
146 EXPECT_EQ(10lu, context.memory_usage()); | |
147 scoped_ptr<BlobDataHandle> blob_data_handle2 = | |
148 context.AddFinishedBlob(&builder2); | |
149 EXPECT_EQ(10lu, context.memory_usage()); | |
150 | |
151 blob_data_handle.reset(); | |
152 { | |
Alexei Svitkine (slow)
2015/02/10 16:05:05
Nit: Maybe make a helper function for this block.
dmurph
2015/02/10 22:17:47
Done.
| |
153 base::RunLoop run_loop; | |
154 run_loop.RunUntilIdle(); | |
155 } | |
156 EXPECT_EQ(10lu, context.memory_usage()); | |
157 blob_data_handle2.reset(); | |
158 { | |
159 base::RunLoop run_loop; | |
160 run_loop.RunUntilIdle(); | |
161 } | |
162 EXPECT_EQ(0lu, context.memory_usage()); | |
163 } | |
164 | |
165 TEST(BlobStorageContextTest, AddFinishedBlob) { | |
166 const std::string kId1("id1"); | |
167 const std::string kId2("id12"); | |
168 const std::string kId2Prime("id2.prime"); | |
169 const std::string kId3("id3"); | |
170 const std::string kId3Prime("id3.prime"); | |
171 | |
172 base::MessageLoop fake_io_message_loop; | |
173 | |
174 BlobDataBuilder builder1(kId1); | |
175 BlobDataBuilder builder2(kId2); | |
176 BlobDataBuilder canonicalized_blob_data2(kId2Prime); | |
177 builder1.AppendData("Data1Data2"); | |
178 builder2.AppendBlob(kId1, 5, 5); | |
179 builder2.AppendData(" is the best"); | |
180 canonicalized_blob_data2.AppendData("Data2"); | |
181 canonicalized_blob_data2.AppendData(" is the best"); | |
182 | |
183 BlobStorageContext context; | |
184 | |
185 scoped_ptr<BlobDataHandle> blob_data_handle = | |
186 context.AddFinishedBlob(&builder1); | |
187 scoped_ptr<BlobDataHandle> blob_data_handle2 = | |
188 context.AddFinishedBlob(&builder2); | |
189 | |
190 ASSERT_TRUE(blob_data_handle); | |
191 ASSERT_TRUE(blob_data_handle2); | |
192 scoped_ptr<BlobDataSnapshot> data1 = blob_data_handle->CreateSnapshot(); | |
193 scoped_ptr<BlobDataSnapshot> data2 = blob_data_handle2->CreateSnapshot(); | |
194 EXPECT_EQ(*data1, builder1); | |
195 EXPECT_EQ(*data2, canonicalized_blob_data2); | |
196 blob_data_handle.reset(); | |
197 data2.reset(); | |
198 | |
199 { | |
200 base::RunLoop run_loop; | |
201 run_loop.RunUntilIdle(); | |
202 } | |
203 | |
204 blob_data_handle = context.GetBlobDataFromUUID(kId1); | |
205 EXPECT_FALSE(blob_data_handle); | |
206 EXPECT_TRUE(blob_data_handle2); | |
207 data2 = blob_data_handle2->CreateSnapshot(); | |
208 EXPECT_EQ(*data2, canonicalized_blob_data2); | |
209 | |
210 // Test shared elements stick around. | |
211 BlobDataBuilder builder3(kId3); | |
212 builder3.AppendBlob(kId2); | |
213 builder3.AppendBlob(kId2); | |
214 scoped_ptr<BlobDataHandle> blob_data_handle3 = | |
215 context.AddFinishedBlob(&builder3); | |
216 blob_data_handle2.reset(); | |
217 { | |
218 base::RunLoop run_loop; | |
219 run_loop.RunUntilIdle(); | |
220 } | |
221 blob_data_handle2 = context.GetBlobDataFromUUID(kId2); | |
222 EXPECT_FALSE(blob_data_handle2); | |
223 EXPECT_TRUE(blob_data_handle3); | |
224 scoped_ptr<BlobDataSnapshot> data3 = blob_data_handle3->CreateSnapshot(); | |
225 | |
226 BlobDataBuilder canonicalized_blob_data3(kId3Prime); | |
227 canonicalized_blob_data3.AppendData("Data2"); | |
228 canonicalized_blob_data3.AppendData(" is the best"); | |
229 canonicalized_blob_data3.AppendData("Data2"); | |
230 canonicalized_blob_data3.AppendData(" is the best"); | |
231 EXPECT_EQ(*data3, canonicalized_blob_data3); | |
232 | |
233 blob_data_handle.reset(); | |
234 blob_data_handle2.reset(); | |
235 blob_data_handle3.reset(); | |
236 { // Clean up for ASAN | |
237 base::RunLoop run_loop; | |
238 run_loop.RunUntilIdle(); | |
239 } | |
240 } | |
241 | |
124 TEST(BlobStorageContextTest, CompoundBlobs) { | 242 TEST(BlobStorageContextTest, CompoundBlobs) { |
125 const std::string kId1("id1"); | 243 const std::string kId1("id1"); |
126 const std::string kId2("id2"); | 244 const std::string kId2("id2"); |
127 const std::string kId2Prime("id2.prime"); | 245 const std::string kId2Prime("id2.prime"); |
128 | 246 |
129 base::MessageLoop fake_io_message_loop; | 247 base::MessageLoop fake_io_message_loop; |
130 | 248 |
131 // Setup a set of blob data for testing. | 249 // Setup a set of blob data for testing. |
132 base::Time time1, time2; | 250 base::Time time1, time2; |
133 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); | 251 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); |
134 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); | 252 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); |
135 | 253 |
136 scoped_ptr<BlobDataBuilder> blob_data1(new BlobDataBuilder(kId1)); | 254 BlobDataBuilder blob_data1(kId1); |
137 blob_data1->AppendData("Data1"); | 255 blob_data1.AppendData("Data1"); |
138 blob_data1->AppendData("Data2"); | 256 blob_data1.AppendData("Data2"); |
139 blob_data1->AppendFile(base::FilePath(FILE_PATH_LITERAL("File1.txt")), | 257 blob_data1.AppendFile(base::FilePath(FILE_PATH_LITERAL("File1.txt")), 10, |
140 10, 1024, time1); | 258 1024, time1); |
141 | 259 |
142 scoped_ptr<BlobDataBuilder> blob_data2(new BlobDataBuilder(kId2)); | 260 BlobDataBuilder blob_data2(kId2); |
143 blob_data2->AppendData("Data3"); | 261 blob_data2.AppendData("Data3"); |
144 blob_data2->AppendBlob(kId1, 8, 100); | 262 blob_data2.AppendBlob(kId1, 8, 100); |
145 blob_data2->AppendFile(base::FilePath(FILE_PATH_LITERAL("File2.txt")), | 263 blob_data2.AppendFile(base::FilePath(FILE_PATH_LITERAL("File2.txt")), 0, 20, |
146 0, 20, time2); | 264 time2); |
147 | 265 |
148 scoped_ptr<BlobDataBuilder> canonicalized_blob_data2( | 266 BlobDataBuilder canonicalized_blob_data2(kId2Prime); |
149 new BlobDataBuilder(kId2Prime)); | 267 canonicalized_blob_data2.AppendData("Data3"); |
150 canonicalized_blob_data2->AppendData("Data3"); | 268 canonicalized_blob_data2.AppendData("a2___", 2); |
151 canonicalized_blob_data2->AppendData("a2___", 2); | 269 canonicalized_blob_data2.AppendFile( |
152 canonicalized_blob_data2->AppendFile( | 270 base::FilePath(FILE_PATH_LITERAL("File1.txt")), 10, 98, time1); |
153 base::FilePath(FILE_PATH_LITERAL("File1.txt")), | 271 canonicalized_blob_data2.AppendFile( |
154 10, 98, time1); | |
155 canonicalized_blob_data2->AppendFile( | |
156 base::FilePath(FILE_PATH_LITERAL("File2.txt")), 0, 20, time2); | 272 base::FilePath(FILE_PATH_LITERAL("File2.txt")), 0, 20, time2); |
157 | 273 |
158 BlobStorageContext context; | 274 BlobStorageContext context; |
159 scoped_ptr<BlobDataHandle> blob_data_handle; | 275 scoped_ptr<BlobDataHandle> blob_data_handle; |
160 | 276 |
161 // Test a blob referring to only data and a file. | 277 // Test a blob referring to only data and a file. |
162 blob_data_handle = context.AddFinishedBlob(*blob_data1.get()); | 278 blob_data_handle = context.AddFinishedBlob(&blob_data1); |
279 | |
163 ASSERT_TRUE(blob_data_handle); | 280 ASSERT_TRUE(blob_data_handle); |
164 scoped_ptr<BlobDataSnapshot> data = blob_data_handle->CreateSnapshot(); | 281 scoped_ptr<BlobDataSnapshot> data = blob_data_handle->CreateSnapshot(); |
165 ASSERT_TRUE(blob_data_handle); | 282 ASSERT_TRUE(blob_data_handle); |
166 EXPECT_EQ(*data, *blob_data1); | 283 EXPECT_EQ(*data, blob_data1); |
167 | 284 |
168 // Test a blob composed in part with another blob. | 285 // Test a blob composed in part with another blob. |
169 blob_data_handle = context.AddFinishedBlob(*blob_data2.get()); | 286 blob_data_handle = context.AddFinishedBlob(&blob_data2); |
170 data = blob_data_handle->CreateSnapshot(); | 287 data = blob_data_handle->CreateSnapshot(); |
171 ASSERT_TRUE(blob_data_handle); | 288 ASSERT_TRUE(blob_data_handle); |
172 ASSERT_TRUE(data); | 289 ASSERT_TRUE(data); |
173 EXPECT_EQ(*data, *canonicalized_blob_data2); | 290 EXPECT_EQ(*data, canonicalized_blob_data2); |
174 | 291 |
175 blob_data_handle.reset(); | 292 blob_data_handle.reset(); |
176 { // Clean up for ASAN | 293 { // Clean up for ASAN |
177 base::RunLoop run_loop; | 294 base::RunLoop run_loop; |
178 run_loop.RunUntilIdle(); | 295 run_loop.RunUntilIdle(); |
179 } | 296 } |
180 } | 297 } |
181 | 298 |
182 TEST(BlobStorageContextTest, PublicBlobUrls) { | 299 TEST(BlobStorageContextTest, PublicBlobUrls) { |
183 BlobStorageContext context; | 300 BlobStorageContext context; |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
256 EXPECT_FALSE(host.FinishBuildingBlob(kId, "text/plain")); | 373 EXPECT_FALSE(host.FinishBuildingBlob(kId, "text/plain")); |
257 EXPECT_FALSE(host.RegisterPublicBlobURL(kUrl, kId)); | 374 EXPECT_FALSE(host.RegisterPublicBlobURL(kUrl, kId)); |
258 EXPECT_FALSE(host.IncrementBlobRefCount(kId)); | 375 EXPECT_FALSE(host.IncrementBlobRefCount(kId)); |
259 EXPECT_FALSE(host.DecrementBlobRefCount(kId)); | 376 EXPECT_FALSE(host.DecrementBlobRefCount(kId)); |
260 EXPECT_FALSE(host.RevokePublicBlobURL(kUrl)); | 377 EXPECT_FALSE(host.RevokePublicBlobURL(kUrl)); |
261 } | 378 } |
262 | 379 |
263 // TODO(michaeln): tests for the depcrecated url stuff | 380 // TODO(michaeln): tests for the depcrecated url stuff |
264 | 381 |
265 } // namespace content | 382 } // namespace content |
OLD | NEW |