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 ->AppendBlob(kId1) |
| 135 ->AppendBlob(kId1) |
| 136 ->AppendBlob(kId1) |
| 137 ->AppendBlob(kId1) |
| 138 ->AppendBlob(kId1) |
| 139 ->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)->AppendData(" is the best"); |
| 179 canonicalized_blob_data2.AppendData("Data2")->AppendData(" is the best"); |
| 180 |
| 181 BlobStorageContext context; |
| 182 |
| 183 scoped_ptr<BlobDataHandle> blob_data_handle = |
| 184 context.AddFinishedBlob(&builder1); |
| 185 scoped_ptr<BlobDataHandle> blob_data_handle2 = |
| 186 context.AddFinishedBlob(&builder2); |
| 187 |
| 188 ASSERT_TRUE(blob_data_handle); |
| 189 ASSERT_TRUE(blob_data_handle2); |
| 190 scoped_ptr<BlobDataSnapshot> data1 = blob_data_handle->CreateSnapshot(); |
| 191 scoped_ptr<BlobDataSnapshot> data2 = blob_data_handle2->CreateSnapshot(); |
| 192 EXPECT_EQ(*data1, builder1); |
| 193 EXPECT_EQ(*data2, canonicalized_blob_data2); |
| 194 blob_data_handle.reset(); |
| 195 data2.reset(); |
| 196 |
| 197 { |
| 198 base::RunLoop run_loop; |
| 199 run_loop.RunUntilIdle(); |
| 200 } |
| 201 |
| 202 blob_data_handle = context.GetBlobDataFromUUID(kId1); |
| 203 EXPECT_FALSE(blob_data_handle); |
| 204 EXPECT_TRUE(blob_data_handle2); |
| 205 data2 = blob_data_handle2->CreateSnapshot(); |
| 206 EXPECT_EQ(*data2, canonicalized_blob_data2); |
| 207 |
| 208 // Test shared elements stick around. |
| 209 BlobDataBuilder builder3(kId3); |
| 210 builder3.AppendBlob(kId2)->AppendBlob(kId2); |
| 211 scoped_ptr<BlobDataHandle> blob_data_handle3 = |
| 212 context.AddFinishedBlob(&builder3); |
| 213 blob_data_handle2.reset(); |
| 214 { |
| 215 base::RunLoop run_loop; |
| 216 run_loop.RunUntilIdle(); |
| 217 } |
| 218 blob_data_handle2 = context.GetBlobDataFromUUID(kId2); |
| 219 EXPECT_FALSE(blob_data_handle2); |
| 220 EXPECT_TRUE(blob_data_handle3); |
| 221 scoped_ptr<BlobDataSnapshot> data3 = blob_data_handle3->CreateSnapshot(); |
| 222 |
| 223 scoped_ptr<BlobDataBuilder> canonicalized_blob_data3( |
| 224 BlobDataBuilder::Create(kId3Prime) |
| 225 ->AppendData("Data2") |
| 226 ->AppendData(" is the best") |
| 227 ->AppendData("Data2") |
| 228 ->AppendData(" is the best")); |
| 229 EXPECT_EQ(*data3, *canonicalized_blob_data3); |
| 230 } |
| 231 |
124 TEST(BlobStorageContextTest, CompoundBlobs) { | 232 TEST(BlobStorageContextTest, CompoundBlobs) { |
125 const std::string kId1("id1"); | 233 const std::string kId1("id1"); |
126 const std::string kId2("id2"); | 234 const std::string kId2("id2"); |
127 const std::string kId2Prime("id2.prime"); | 235 const std::string kId2Prime("id2.prime"); |
128 | 236 |
129 base::MessageLoop fake_io_message_loop; | 237 base::MessageLoop fake_io_message_loop; |
130 | 238 |
131 // Setup a set of blob data for testing. | 239 // Setup a set of blob data for testing. |
132 base::Time time1, time2; | 240 base::Time time1, time2; |
133 base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); | 241 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); | 242 base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); |
135 | 243 |
136 scoped_ptr<BlobDataBuilder> blob_data1(new BlobDataBuilder(kId1)); | 244 scoped_ptr<BlobDataBuilder> blob_data1( |
137 blob_data1->AppendData("Data1"); | 245 BlobDataBuilder::Create(kId1) |
138 blob_data1->AppendData("Data2"); | 246 ->AppendData("Data1") |
139 blob_data1->AppendFile(base::FilePath(FILE_PATH_LITERAL("File1.txt")), | 247 ->AppendData("Data2") |
140 10, 1024, time1); | 248 ->AppendFile(base::FilePath(FILE_PATH_LITERAL("File1.txt")), 10, 1024, |
| 249 time1)); |
141 | 250 |
142 scoped_ptr<BlobDataBuilder> blob_data2(new BlobDataBuilder(kId2)); | 251 scoped_ptr<BlobDataBuilder> blob_data2( |
143 blob_data2->AppendData("Data3"); | 252 BlobDataBuilder::Create(kId2) |
144 blob_data2->AppendBlob(kId1, 8, 100); | 253 ->AppendData("Data3") |
145 blob_data2->AppendFile(base::FilePath(FILE_PATH_LITERAL("File2.txt")), | 254 ->AppendBlob(kId1, 8, 100) |
146 0, 20, time2); | 255 ->AppendFile(base::FilePath(FILE_PATH_LITERAL("File2.txt")), 0, 20, |
| 256 time2)); |
147 | 257 |
148 scoped_ptr<BlobDataBuilder> canonicalized_blob_data2( | 258 scoped_ptr<BlobDataBuilder> canonicalized_blob_data2( |
149 new BlobDataBuilder(kId2Prime)); | 259 new BlobDataBuilder(kId2Prime)); |
150 canonicalized_blob_data2->AppendData("Data3"); | 260 canonicalized_blob_data2->AppendData("Data3") |
151 canonicalized_blob_data2->AppendData("a2___", 2); | 261 ->AppendData("a2___", 2) |
152 canonicalized_blob_data2->AppendFile( | 262 ->AppendFile(base::FilePath(FILE_PATH_LITERAL("File1.txt")), 10, 98, |
153 base::FilePath(FILE_PATH_LITERAL("File1.txt")), | 263 time1) |
154 10, 98, time1); | 264 ->AppendFile(base::FilePath(FILE_PATH_LITERAL("File2.txt")), 0, 20, |
155 canonicalized_blob_data2->AppendFile( | 265 time2); |
156 base::FilePath(FILE_PATH_LITERAL("File2.txt")), 0, 20, time2); | |
157 | 266 |
158 BlobStorageContext context; | 267 BlobStorageContext context; |
159 scoped_ptr<BlobDataHandle> blob_data_handle; | 268 scoped_ptr<BlobDataHandle> blob_data_handle; |
160 | 269 |
161 // Test a blob referring to only data and a file. | 270 // Test a blob referring to only data and a file. |
162 blob_data_handle = context.AddFinishedBlob(*blob_data1.get()); | 271 blob_data_handle = context.AddFinishedBlob(blob_data1.get()); |
| 272 |
163 ASSERT_TRUE(blob_data_handle); | 273 ASSERT_TRUE(blob_data_handle); |
164 scoped_ptr<BlobDataSnapshot> data = blob_data_handle->CreateSnapshot(); | 274 scoped_ptr<BlobDataSnapshot> data = blob_data_handle->CreateSnapshot(); |
165 ASSERT_TRUE(blob_data_handle); | 275 ASSERT_TRUE(blob_data_handle); |
166 EXPECT_EQ(*data, *blob_data1); | 276 EXPECT_EQ(*data, *blob_data1); |
167 | 277 |
168 // Test a blob composed in part with another blob. | 278 // Test a blob composed in part with another blob. |
169 blob_data_handle = context.AddFinishedBlob(*blob_data2.get()); | 279 blob_data_handle = context.AddFinishedBlob(blob_data2.get()); |
170 data = blob_data_handle->CreateSnapshot(); | 280 data = blob_data_handle->CreateSnapshot(); |
171 ASSERT_TRUE(blob_data_handle); | 281 ASSERT_TRUE(blob_data_handle); |
172 ASSERT_TRUE(data); | 282 ASSERT_TRUE(data); |
173 EXPECT_EQ(*data, *canonicalized_blob_data2); | 283 EXPECT_EQ(*data, *canonicalized_blob_data2); |
174 | 284 |
175 blob_data_handle.reset(); | 285 blob_data_handle.reset(); |
176 { // Clean up for ASAN | 286 { // Clean up for ASAN |
177 base::RunLoop run_loop; | 287 base::RunLoop run_loop; |
178 run_loop.RunUntilIdle(); | 288 run_loop.RunUntilIdle(); |
179 } | 289 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 EXPECT_FALSE(host.FinishBuildingBlob(kId, "text/plain")); | 366 EXPECT_FALSE(host.FinishBuildingBlob(kId, "text/plain")); |
257 EXPECT_FALSE(host.RegisterPublicBlobURL(kUrl, kId)); | 367 EXPECT_FALSE(host.RegisterPublicBlobURL(kUrl, kId)); |
258 EXPECT_FALSE(host.IncrementBlobRefCount(kId)); | 368 EXPECT_FALSE(host.IncrementBlobRefCount(kId)); |
259 EXPECT_FALSE(host.DecrementBlobRefCount(kId)); | 369 EXPECT_FALSE(host.DecrementBlobRefCount(kId)); |
260 EXPECT_FALSE(host.RevokePublicBlobURL(kUrl)); | 370 EXPECT_FALSE(host.RevokePublicBlobURL(kUrl)); |
261 } | 371 } |
262 | 372 |
263 // TODO(michaeln): tests for the depcrecated url stuff | 373 // TODO(michaeln): tests for the depcrecated url stuff |
264 | 374 |
265 } // namespace content | 375 } // namespace content |
OLD | NEW |