| // Copyright 2015 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_storage_registry.h" |
| |
| #include "base/callback.h" |
| #include "storage/browser/blob/blob_entry.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "url/gurl.h" |
| |
| namespace storage { |
| namespace { |
| |
| TEST(BlobStorageRegistry, UUIDRegistration) { |
| const std::string kBlob1 = "Blob1"; |
| const std::string kType = "type1"; |
| const std::string kDisposition = "disp1"; |
| BlobStorageRegistry registry; |
| |
| EXPECT_FALSE(registry.DeleteEntry(kBlob1)); |
| EXPECT_EQ(0u, registry.blob_count()); |
| |
| BlobEntry* entry = registry.CreateEntry(kBlob1, kType, kDisposition); |
| ASSERT_NE(nullptr, entry); |
| EXPECT_EQ(BlobStatus::PENDING_QUOTA, entry->status()); |
| EXPECT_EQ(kType, entry->content_type()); |
| EXPECT_EQ(kDisposition, entry->content_disposition()); |
| EXPECT_EQ(0u, entry->refcount()); |
| |
| EXPECT_EQ(entry, registry.GetEntry(kBlob1)); |
| EXPECT_TRUE(registry.DeleteEntry(kBlob1)); |
| entry = registry.CreateEntry(kBlob1, kType, kDisposition); |
| |
| EXPECT_EQ(1u, registry.blob_count()); |
| } |
| |
| TEST(BlobStorageRegistry, URLRegistration) { |
| const std::string kBlob = "Blob1"; |
| const std::string kType = "type1"; |
| const std::string kDisposition = "disp1"; |
| const std::string kBlob2 = "Blob2"; |
| const GURL kURL = GURL("blob://Blob1"); |
| const GURL kURL2 = GURL("blob://Blob2"); |
| BlobStorageRegistry registry; |
| |
| EXPECT_FALSE(registry.IsURLMapped(kURL)); |
| EXPECT_EQ(nullptr, registry.GetEntryFromURL(kURL, nullptr)); |
| EXPECT_FALSE(registry.DeleteURLMapping(kURL, nullptr)); |
| EXPECT_FALSE(registry.CreateUrlMapping(kURL, kBlob)); |
| EXPECT_EQ(0u, registry.url_count()); |
| BlobEntry* entry = registry.CreateEntry(kBlob, kType, kDisposition); |
| |
| EXPECT_FALSE(registry.IsURLMapped(kURL)); |
| EXPECT_TRUE(registry.CreateUrlMapping(kURL, kBlob)); |
| EXPECT_FALSE(registry.CreateUrlMapping(kURL, kBlob2)); |
| |
| EXPECT_TRUE(registry.IsURLMapped(kURL)); |
| EXPECT_EQ(entry, registry.GetEntryFromURL(kURL, nullptr)); |
| std::string uuid; |
| EXPECT_EQ(entry, registry.GetEntryFromURL(kURL, &uuid)); |
| EXPECT_EQ(kBlob, uuid); |
| EXPECT_EQ(1u, registry.url_count()); |
| |
| registry.CreateEntry(kBlob2, kType, kDisposition); |
| EXPECT_TRUE(registry.CreateUrlMapping(kURL2, kBlob2)); |
| EXPECT_EQ(2u, registry.url_count()); |
| EXPECT_TRUE(registry.DeleteURLMapping(kURL2, &uuid)); |
| EXPECT_EQ(kBlob2, uuid); |
| EXPECT_FALSE(registry.IsURLMapped(kURL2)); |
| |
| // Both urls point to the same blob. |
| EXPECT_TRUE(registry.CreateUrlMapping(kURL2, kBlob)); |
| std::string uuid2; |
| EXPECT_EQ(registry.GetEntryFromURL(kURL, &uuid), |
| registry.GetEntryFromURL(kURL2, &uuid2)); |
| EXPECT_EQ(uuid, uuid2); |
| } |
| |
| } // namespace |
| } // namespace storage |