Index: content/browser/loader/upload_data_stream_builder_unittest.cc |
diff --git a/content/browser/loader/upload_data_stream_builder_unittest.cc b/content/browser/loader/upload_data_stream_builder_unittest.cc |
index a946e651e1f9700d673107635f070c2c6bf959be..1be8eccbf36fc311879f46dcd67cef42ff7a92a2 100644 |
--- a/content/browser/loader/upload_data_stream_builder_unittest.cc |
+++ b/content/browser/loader/upload_data_stream_builder_unittest.cc |
@@ -310,4 +310,60 @@ TEST(UploadDataStreamBuilderTest, ResolveBlobAndCreateUploadDataStream) { |
base::RunLoop().RunUntilIdle(); |
} |
+TEST(UploadDataStreamBuilderTest, CreateUploadDataStreamWithEmptyBlob) { |
+ base::MessageLoop message_loop; |
+ { |
+ // Setup blob data for testing. |
+ base::Time time1, time2; |
+ base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); |
+ base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); |
+ |
+ BlobStorageContext blob_storage_context; |
+ |
+ const std::string blob_id0("id-0"); |
+ scoped_ptr<BlobDataBuilder> blob_data_builder( |
+ new BlobDataBuilder(blob_id0)); |
+ scoped_ptr<BlobDataHandle> handle1 = |
+ blob_storage_context.AddFinishedBlob(blob_data_builder.get()); |
+ |
+ const std::string blob_id1("id-1"); |
+ const std::string kBlobData = ""; |
+ blob_data_builder.reset(new BlobDataBuilder(blob_id1)); |
+ blob_data_builder->AppendData(kBlobData); |
+ blob_data_builder->AppendFile( |
+ base::FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1); |
michaeln
2015/03/06 22:31:38
This isn't an empty blob?
cmumford
2015/03/09 20:05:48
Acknowledged.
|
+ scoped_ptr<BlobDataHandle> handle2 = |
+ blob_storage_context.AddFinishedBlob(blob_data_builder.get()); |
+ |
+ ResourceRequestBody::Element blob_element1, blob_element2; |
+ blob_element1.SetToBytes(kBlobData.c_str(), kBlobData.size()); |
+ blob_element2.SetToFilePathRange( |
+ base::FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1); |
mmenke
2015/03/06 20:54:40
The CL description indicates it supports empty fil
cmumford
2015/03/09 20:05:48
Acknowledged.
|
+ |
+ scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody()); |
+ scoped_ptr<net::UploadDataStream> upload(UploadDataStreamBuilder::Build( |
+ request_body.get(), &blob_storage_context, NULL, |
+ base::MessageLoopProxy::current().get())); |
+ |
+ request_body = new ResourceRequestBody(); |
+ request_body->AppendBlob(blob_id1); |
+ request_body->AppendBlob(blob_id1); |
+ request_body->AppendBlob(blob_id1); |
+ |
+ upload = UploadDataStreamBuilder::Build( |
+ request_body.get(), &blob_storage_context, NULL, |
+ base::MessageLoopProxy::current().get()); |
+ ASSERT_TRUE(upload->GetElementReaders()); |
+ const auto& readers = *upload->GetElementReaders(); |
+ ASSERT_EQ(6U, readers.size()); |
+ EXPECT_TRUE(AreElementsEqual(*readers[0], blob_element1)); |
michaeln
2015/03/06 22:31:38
Not sure about this test? It's making sure that bl
cmumford
2015/03/09 20:05:48
Yes, I see your point. I've modified the test to u
|
+ EXPECT_TRUE(AreElementsEqual(*readers[1], blob_element2)); |
+ EXPECT_TRUE(AreElementsEqual(*readers[2], blob_element1)); |
+ EXPECT_TRUE(AreElementsEqual(*readers[3], blob_element2)); |
+ EXPECT_TRUE(AreElementsEqual(*readers[4], blob_element1)); |
+ EXPECT_TRUE(AreElementsEqual(*readers[5], blob_element2)); |
+ } |
+ // Clean up for ASAN. |
+ base::RunLoop().RunUntilIdle(); |
+} |
} // namespace content |