1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "storage/browser/fileapi/file_system_usage_cache.h" 6 7#include "base/basictypes.h" 8#include "base/files/file_util.h" 9#include "base/files/scoped_temp_dir.h" 10#include "base/message_loop/message_loop.h" 11#include "testing/gtest/include/gtest/gtest.h" 12 13using storage::FileSystemUsageCache; 14 15namespace content { 16 17class FileSystemUsageCacheTest : public testing::Test { 18 public: 19 FileSystemUsageCacheTest() 20 : usage_cache_(base::MessageLoopProxy::current().get()) {} 21 22 virtual void SetUp() { 23 ASSERT_TRUE(data_dir_.CreateUniqueTempDir()); 24 } 25 26 protected: 27 base::FilePath GetUsageFilePath() { 28 return data_dir_.path().Append(FileSystemUsageCache::kUsageFileName); 29 } 30 31 FileSystemUsageCache* usage_cache() { 32 return &usage_cache_; 33 } 34 35 private: 36 base::MessageLoop message_loop_; 37 base::ScopedTempDir data_dir_; 38 FileSystemUsageCache usage_cache_; 39 40 DISALLOW_COPY_AND_ASSIGN(FileSystemUsageCacheTest); 41}; 42 43TEST_F(FileSystemUsageCacheTest, CreateTest) { 44 base::FilePath usage_file_path = GetUsageFilePath(); 45 EXPECT_TRUE(usage_cache()->UpdateUsage(usage_file_path, 0)); 46} 47 48TEST_F(FileSystemUsageCacheTest, SetSizeTest) { 49 static const int64 size = 240122; 50 base::FilePath usage_file_path = GetUsageFilePath(); 51 int64 usage = 0; 52 ASSERT_TRUE(usage_cache()->UpdateUsage(usage_file_path, size)); 53 EXPECT_TRUE(usage_cache()->GetUsage(usage_file_path, &usage)); 54 EXPECT_EQ(size, usage); 55} 56 57TEST_F(FileSystemUsageCacheTest, SetLargeSizeTest) { 58 static const int64 size = kint64max; 59 base::FilePath usage_file_path = GetUsageFilePath(); 60 int64 usage = 0; 61 ASSERT_TRUE(usage_cache()->UpdateUsage(usage_file_path, size)); 62 EXPECT_TRUE(usage_cache()->GetUsage(usage_file_path, &usage)); 63 EXPECT_EQ(size, usage); 64} 65 66TEST_F(FileSystemUsageCacheTest, IncAndGetSizeTest) { 67 base::FilePath usage_file_path = GetUsageFilePath(); 68 uint32 dirty = 0; 69 int64 usage = 0; 70 ASSERT_TRUE(usage_cache()->UpdateUsage(usage_file_path, 98214)); 71 ASSERT_TRUE(usage_cache()->IncrementDirty(usage_file_path)); 72 EXPECT_TRUE(usage_cache()->GetDirty(usage_file_path, &dirty)); 73 EXPECT_EQ(1u, dirty); 74 EXPECT_TRUE(usage_cache()->GetUsage(usage_file_path, &usage)); 75 EXPECT_EQ(98214, usage); 76} 77 78TEST_F(FileSystemUsageCacheTest, DecAndGetSizeTest) { 79 static const int64 size = 71839; 80 base::FilePath usage_file_path = GetUsageFilePath(); 81 int64 usage = 0; 82 ASSERT_TRUE(usage_cache()->UpdateUsage(usage_file_path, size)); 83 // DecrementDirty for dirty = 0 is invalid. It returns false. 84 ASSERT_FALSE(usage_cache()->DecrementDirty(usage_file_path)); 85 EXPECT_TRUE(usage_cache()->GetUsage(usage_file_path, &usage)); 86 EXPECT_EQ(size, usage); 87} 88 89TEST_F(FileSystemUsageCacheTest, IncDecAndGetSizeTest) { 90 static const int64 size = 198491; 91 base::FilePath usage_file_path = GetUsageFilePath(); 92 int64 usage = 0; 93 ASSERT_TRUE(usage_cache()->UpdateUsage(usage_file_path, size)); 94 ASSERT_TRUE(usage_cache()->IncrementDirty(usage_file_path)); 95 ASSERT_TRUE(usage_cache()->DecrementDirty(usage_file_path)); 96 EXPECT_TRUE(usage_cache()->GetUsage(usage_file_path, &usage)); 97 EXPECT_EQ(size, usage); 98} 99 100TEST_F(FileSystemUsageCacheTest, DecIncAndGetSizeTest) { 101 base::FilePath usage_file_path = GetUsageFilePath(); 102 uint32 dirty = 0; 103 int64 usage = 0; 104 ASSERT_TRUE(usage_cache()->UpdateUsage(usage_file_path, 854238)); 105 // DecrementDirty for dirty = 0 is invalid. It returns false. 106 ASSERT_FALSE(usage_cache()->DecrementDirty(usage_file_path)); 107 ASSERT_TRUE(usage_cache()->IncrementDirty(usage_file_path)); 108 // It tests DecrementDirty (which returns false) has no effect, i.e 109 // does not make dirty = -1 after DecrementDirty. 110 EXPECT_TRUE(usage_cache()->GetDirty(usage_file_path, &dirty)); 111 EXPECT_EQ(1u, dirty); 112 EXPECT_TRUE(usage_cache()->GetUsage(usage_file_path, &usage)); 113 EXPECT_EQ(854238, usage); 114} 115 116TEST_F(FileSystemUsageCacheTest, ManyIncsSameDecsAndGetSizeTest) { 117 static const int64 size = 82412; 118 base::FilePath usage_file_path = GetUsageFilePath(); 119 int64 usage = 0; 120 ASSERT_TRUE(usage_cache()->UpdateUsage(usage_file_path, size)); 121 for (int i = 0; i < 20; i++) 122 ASSERT_TRUE(usage_cache()->IncrementDirty(usage_file_path)); 123 for (int i = 0; i < 20; i++) 124 ASSERT_TRUE(usage_cache()->DecrementDirty(usage_file_path)); 125 EXPECT_TRUE(usage_cache()->GetUsage(usage_file_path, &usage)); 126 EXPECT_EQ(size, usage); 127} 128 129TEST_F(FileSystemUsageCacheTest, ManyIncsLessDecsAndGetSizeTest) { 130 uint32 dirty = 0; 131 int64 usage = 0; 132 base::FilePath usage_file_path = GetUsageFilePath(); 133 ASSERT_TRUE(usage_cache()->UpdateUsage(usage_file_path, 19319)); 134 for (int i = 0; i < 20; i++) 135 ASSERT_TRUE(usage_cache()->IncrementDirty(usage_file_path)); 136 for (int i = 0; i < 19; i++) 137 ASSERT_TRUE(usage_cache()->DecrementDirty(usage_file_path)); 138 EXPECT_TRUE(usage_cache()->GetDirty(usage_file_path, &dirty)); 139 EXPECT_EQ(1u, dirty); 140 EXPECT_TRUE(usage_cache()->GetUsage(usage_file_path, &usage)); 141 EXPECT_EQ(19319, usage); 142} 143 144TEST_F(FileSystemUsageCacheTest, GetSizeWithoutCacheFileTest) { 145 int64 usage = 0; 146 base::FilePath usage_file_path = GetUsageFilePath(); 147 EXPECT_FALSE(usage_cache()->GetUsage(usage_file_path, &usage)); 148} 149 150TEST_F(FileSystemUsageCacheTest, IncrementDirtyWithoutCacheFileTest) { 151 base::FilePath usage_file_path = GetUsageFilePath(); 152 EXPECT_FALSE(usage_cache()->IncrementDirty(usage_file_path)); 153} 154 155TEST_F(FileSystemUsageCacheTest, DecrementDirtyWithoutCacheFileTest) { 156 base::FilePath usage_file_path = GetUsageFilePath(); 157 EXPECT_FALSE(usage_cache()->IncrementDirty(usage_file_path)); 158} 159 160} // namespace content 161