Index: content/browser/blob_storage/blob_flattener_unittest.cc |
diff --git a/content/browser/blob_storage/blob_flattener_unittest.cc b/content/browser/blob_storage/blob_flattener_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..71355e7ea1cb00f99ad2df9fc6e3853254f5babd |
--- /dev/null |
+++ b/content/browser/blob_storage/blob_flattener_unittest.cc |
@@ -0,0 +1,114 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "storage/browser/blob/blob_flattener.h" |
+ |
+#include <memory> |
+ |
+#include "storage/browser/blob/blob_data_builder.h" |
+#include "storage/browser/blob/blob_data_item.h" |
+#include "storage/browser/blob/blob_storage_registry.h" |
+#include "storage/browser/blob/internal_blob_data.h" |
+#include "storage/browser/blob/shareable_blob_data_item.h" |
+#include "storage/common/data_element.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace storage { |
+namespace { |
+ |
+scoped_refptr<ShareableBlobDataItem> CreateDataItem(const char* memory, |
+ size_t size) { |
+ std::unique_ptr<DataElement> element(new DataElement()); |
+ element->SetToBytes(memory, size); |
+ return scoped_refptr<ShareableBlobDataItem>( |
+ new ShareableBlobDataItem(new BlobDataItem(std::move(element)))); |
+}; |
+ |
+void ExpectNoErrors(BlobFlattener* flattener) { |
+ EXPECT_FALSE(flattener->contains_invalid_references); |
+ EXPECT_FALSE(flattener->contains_broken_references); |
+ EXPECT_FALSE(flattener->contains_pending_content); |
+} |
+ |
+// |
+// scoped_refptr<ShareableBlobDataItem> CreateFileItem(size_t offset, |
+// size_t size) { |
+// std::unique_ptr<DataElement> element(new DataElement()); |
+// element->SetToFilePathRange(base::FilePath("kFakePath"), offset, size, |
+// base::Time::Max()); |
+// return scoped_refptr<ShareableBlobDataItem>( |
+// new ShareableBlobDataItem(new BlobDataItem(std::move(element)))); |
+//}; |
+ |
+// |
+// class BlobFlattenerTest : public testing::Test { |
+// protected: |
+// BlobFlattenerTest() {} |
+// ~BlobFlattenerTest() override {} |
+// |
+// |
+// void TearDown() override { |
+// // Make sure we clean up the files. |
+// base::RunLoop().RunUntilIdle(); |
+// file_runner_->RunPendingTasks(); |
+// ASSERT_EQ(true, base::DeleteFile(temp_dir_, true)); |
+// } |
+// |
+// std::unique_ptr<BlobDataHandle> SetupBasicBlob(const std::string& id) { |
+// BlobDataBuilder builder(id); |
+// builder.AppendData("1", 1); |
+// builder.set_content_type("text/plain"); |
+// return context_.AddFinishedBlob(builder); |
+// } |
+// |
+// |
+// BlobStorageRegistry registry; |
+//}; |
+ |
+TEST(BlobFlattener, NoBlobItems) { |
+ BlobStorageRegistry registry; |
+ const std::string kBlobUUID = "kId"; |
+ |
+ BlobDataBuilder builder(kBlobUUID); |
+ builder.AppendData("hi", 2u); |
+ InternalBlobData output; |
+ BlobFlattener flattener(builder, &output, ®istry); |
+ |
+ ExpectNoErrors(&flattener); |
+ EXPECT_EQ(0u, flattener.dependent_blobs.size()); |
+ EXPECT_EQ(0u, flattener.copies.size()); |
+ EXPECT_EQ(2u, flattener.total_size.ValueOrDie()); |
+ EXPECT_EQ(2u, flattener.memory_needed.ValueOrDie()); |
+ |
+ ASSERT_EQ(1u, output.items().size()); |
+ EXPECT_EQ(*CreateDataItem("hi", 2u)->item(), *output.items()[0]->item()); |
+} |
+ |
+TEST(BlobFlattener, ErrorCases) { |
+ BlobStorageRegistry registry; |
+ const std::string kBlobUUID = "kId"; |
+ |
+ // Invalid blob reference. |
+ { |
+ BlobDataBuilder builder(kBlobUUID); |
+ builder.AppendBlob("doesnotexist"); |
+ InternalBlobData output; |
+ BlobFlattener flattener(builder, &output, ®istry); |
+ EXPECT_TRUE(flattener.contains_broken_references); |
+ } |
+ |
+ // Circular reference. |
+ { |
+ BlobDataBuilder builder(kBlobUUID); |
+ builder.AppendBlob(kBlobUUID); |
+ InternalBlobData output; |
+ BlobFlattener flattener(builder, &output, ®istry); |
+ EXPECT_TRUE(flattener.contains_broken_references); |
+ } |
+ |
+ // |
+} |
+ |
+} // namespace |
+} // namespace storage |