15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_cache_metadata.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/drive/drive.pb.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system_util.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/test_util.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/google_apis/test_util.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace drive { 16b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)namespace internal { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FileCacheMetadataTest : public testing::Test { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create cache directories. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) metadata_.reset(new FileCacheMetadata(NULL)); 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<FileCacheMetadata> metadata_; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Test all the methods of FileCacheMetadata except for 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RemoveTemporaryFiles. 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(FileCacheMetadataTest, CacheTest) { 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_EQ(FileCacheMetadata::INITIALIZE_CREATED, 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch metadata_->Initialize(temp_dir_.path().AppendASCII("test.db"))); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Save an initial entry. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string test_resource_id("test_resource_id"); 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) std::string test_md5("test_md5"); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileCacheEntry new_cache_entry; 42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_cache_entry.set_md5(test_md5); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_cache_entry.set_is_present(true); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) metadata_->AddOrUpdateCacheEntry(test_resource_id, new_cache_entry); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that the entry can be retrieved. 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileCacheEntry cache_entry; 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(metadata_->GetCacheEntry(test_resource_id, &cache_entry)); 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(test_md5, cache_entry.md5()); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cache_entry.is_present()); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // resource_id doesn't exist. 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(metadata_->GetCacheEntry("not_found_resource_id", &cache_entry)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update all attributes. 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) test_md5 = "test_md5_2"; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileCacheEntry updated_cache_entry; 60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) updated_cache_entry.set_md5(test_md5); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updated_cache_entry.set_is_pinned(true); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) metadata_->AddOrUpdateCacheEntry(test_resource_id, updated_cache_entry); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the values took. 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(metadata_->GetCacheEntry(test_resource_id, &cache_entry)); 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(test_md5, cache_entry.md5()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cache_entry.is_pinned()); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test dirty cache. 71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) test_md5 = "test_md5_3"; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileCacheEntry new_cache_entry; 74868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_cache_entry.set_md5(test_md5); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_cache_entry.set_is_dirty(true); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) metadata_->AddOrUpdateCacheEntry(test_resource_id, new_cache_entry); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the values took. 807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(metadata_->GetCacheEntry(test_resource_id, &cache_entry)); 81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(test_md5, cache_entry.md5()); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cache_entry.is_dirty()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove the entry. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) metadata_->RemoveCacheEntry(test_resource_id); 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) EXPECT_FALSE(metadata_->GetCacheEntry(test_resource_id, &cache_entry)); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add another one. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_resource_id = "test_resource_id_2"; 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) test_md5 = "test_md5_4"; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FileCacheEntry new_cache_entry; 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) new_cache_entry.set_md5(test_md5); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_cache_entry.set_is_present(true); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) metadata_->AddOrUpdateCacheEntry(test_resource_id, new_cache_entry); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the values took. 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ASSERT_TRUE(metadata_->GetCacheEntry(test_resource_id, &cache_entry)); 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(test_md5, cache_entry.md5()); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cache_entry.is_present()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 104868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(FileCacheMetadataTest, Initialize) { 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::FilePath db_path = temp_dir_.path().AppendASCII("test.db"); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Try to open a bogus file. 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE( 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) google_apis::test_util::WriteStringToFile(db_path, "Hello world")); 110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_EQ(FileCacheMetadata::INITIALIZE_CREATED, 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch metadata_->Initialize(db_path)); 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Open an existing DB. 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) metadata_.reset(new FileCacheMetadata(NULL)); 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(FileCacheMetadata::INITIALIZE_OPENED, 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch metadata_->Initialize(db_path)); 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 118868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Try to open a nonexistent path. 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::FilePath non_existent_path(FILE_PATH_LITERAL( 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "/somewhere/nonexistent/test.db")); 121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) metadata_.reset(new FileCacheMetadata(NULL)); 122868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(FileCacheMetadata::INITIALIZE_FAILED, 123868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) metadata_->Initialize(non_existent_path)); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 126b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} // namespace internal 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace drive 128