Chromium Code Reviews| 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 |