Index: services/url_response_disk_cache/url_response_disk_cache_db_unittests.cc |
diff --git a/services/url_response_disk_cache/url_response_disk_cache_db_unittests.cc b/services/url_response_disk_cache/url_response_disk_cache_db_unittests.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d1e2ef892d40e2b4e439c9bcd9ccf6ee6814c6ae |
--- /dev/null |
+++ b/services/url_response_disk_cache/url_response_disk_cache_db_unittests.cc |
@@ -0,0 +1,144 @@ |
+// 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 "base/files/scoped_temp_dir.h" |
+#include "base/threading/platform_thread.h" |
+#include "services/url_response_disk_cache/url_response_disk_cache_db.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace mojo { |
+ |
+namespace { |
+ |
+class URLResponseDiskCacheDBTest : public ::testing::Test { |
+ protected: |
+ void SetUp() override { |
+ ASSERT_TRUE(tmp_dir_.CreateUniqueTempDir()); |
+ Open(); |
+ } |
+ |
+ void Open() { |
+ db_ = nullptr; |
+ base::FilePath db_path = tmp_dir_.path().Append("db"); |
+ db_ = new URLResponseDiskCacheDB(db_path); |
+ } |
+ |
+ CacheEntryPtr NewEntry() { |
+ CacheEntryPtr entry = CacheEntry::New(); |
+ entry->response = URLResponse::New(); |
+ entry->entry_directory = "/cache"; |
+ entry->response_body_path = "/cache/content"; |
+ return entry.Pass(); |
+ } |
+ |
+ base::ScopedTempDir tmp_dir_; |
+ scoped_refptr<URLResponseDiskCacheDB> db_; |
+}; |
+ |
+TEST_F(URLResponseDiskCacheDBTest, Create) {} |
+ |
+TEST_F(URLResponseDiskCacheDBTest, Version) { |
+ EXPECT_EQ(0lu, db_->GetVersion()); |
+ db_->SetVersion(15); |
+ EXPECT_EQ(15lu, db_->GetVersion()); |
+} |
+ |
+TEST_F(URLResponseDiskCacheDBTest, Persist) { |
+ db_->SetVersion(15); |
+ EXPECT_EQ(15lu, db_->GetVersion()); |
+ Open(); |
+ EXPECT_EQ(15lu, db_->GetVersion()); |
+} |
+ |
+TEST_F(URLResponseDiskCacheDBTest, Entry) { |
+ std::string origin = "origin"; |
+ std::string url = "url"; |
+ db_->PutNew(origin, url, NewEntry()); |
+ CacheEntryPtr entry = db_->GetNewest(origin, url); |
+ EXPECT_TRUE(entry); |
+ Open(); |
+ entry = db_->GetNewest(origin, url); |
+ EXPECT_TRUE(entry); |
+} |
+ |
+TEST_F(URLResponseDiskCacheDBTest, Newest) { |
+ std::string origin = "origin"; |
+ std::string url = "url"; |
+ std::string new_entry_directory = "/newcache/"; |
+ db_->PutNew(origin, url, NewEntry()); |
+ base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(5)); |
+ CacheEntryPtr entry = NewEntry(); |
+ entry->entry_directory = new_entry_directory; |
+ db_->PutNew(origin, url, entry.Pass()); |
+ entry = db_->GetNewest(origin, url); |
+ EXPECT_TRUE(entry); |
+ EXPECT_EQ(new_entry_directory, entry->entry_directory); |
+} |
+ |
+TEST_F(URLResponseDiskCacheDBTest, Iterator) { |
+ std::string origin = "origin"; |
+ std::string url1 = "a"; |
+ std::string url2 = "b"; |
+ std::string url3 = "b"; |
ppi
2015/09/16 12:32:27
did you mean either url2 or url3 to be "c"?
qsr
2015/09/16 13:50:29
Done.
|
+ db_->PutNew(origin, url2, NewEntry()); |
+ CacheEntryPtr entry = db_->GetNewest(origin, url2); |
+ EXPECT_TRUE(entry); |
+ db_->PutNew(origin, url1, NewEntry()); |
+ db_->PutNew(origin, url3, NewEntry()); |
+ entry = CacheEntry::New(); |
+ scoped_ptr<URLResponseDiskCacheDB::Iterator> iterator = db_->GetIterator(); |
+ EXPECT_TRUE(iterator->HasNext()); |
+ CacheKeyPtr key; |
+ iterator->GetNext(&key, &entry); |
+ EXPECT_TRUE(iterator->HasNext()); |
+ EXPECT_TRUE(key); |
+ EXPECT_EQ(url1, key->url); |
+ EXPECT_TRUE(entry); |
+ iterator->GetNext(&key, &entry); |
+ EXPECT_TRUE(iterator->HasNext()); |
+ EXPECT_TRUE(key); |
+ EXPECT_EQ(url2, key->url); |
+ EXPECT_TRUE(entry); |
+ iterator->GetNext(&key, &entry); |
+ EXPECT_FALSE(iterator->HasNext()); |
+ EXPECT_TRUE(key); |
+ EXPECT_EQ(url3, key->url); |
+ EXPECT_TRUE(entry); |
+} |
+ |
+TEST_F(URLResponseDiskCacheDBTest, Delete) { |
+ std::string origin = "origin"; |
+ std::string url = "url"; |
+ db_->PutNew(origin, url, NewEntry()); |
+ CacheEntryPtr entry = db_->GetNewest(origin, url); |
+ EXPECT_TRUE(entry); |
+ entry = CacheEntry::New(); |
+ scoped_ptr<URLResponseDiskCacheDB::Iterator> iterator = db_->GetIterator(); |
+ EXPECT_TRUE(iterator->HasNext()); |
+ CacheKeyPtr key; |
+ iterator->GetNext(&key, &entry); |
+ EXPECT_FALSE(iterator->HasNext()); |
+ EXPECT_TRUE(key); |
+ EXPECT_TRUE(entry); |
+ db_->Delete(key.Pass()); |
+ entry = db_->GetNewest(origin, url); |
+ EXPECT_FALSE(entry); |
+} |
+ |
+TEST_F(URLResponseDiskCacheDBTest, IteratorFrozen) { |
+ std::string origin = "origin"; |
+ std::string url = "url"; |
+ db_->PutNew(origin, url, NewEntry()); |
+ scoped_ptr<URLResponseDiskCacheDB::Iterator> iterator = db_->GetIterator(); |
+ std::string url2 = "url2"; |
+ db_->PutNew(origin, url2, NewEntry()); |
+ |
+ EXPECT_TRUE(iterator->HasNext()); |
+ iterator->GetNext(nullptr, nullptr); |
+ EXPECT_FALSE(iterator->HasNext()); |
+} |
+ |
+} // namespace |
+ |
+} // namespace mojo |