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 { |
| 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 |