1// Copyright (c) 2011 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 "base/files/file_util.h"
6#include "base/files/scoped_temp_dir.h"
7#include "net/disk_cache/cache_util.h"
8#include "testing/gtest/include/gtest/gtest.h"
9#include "testing/platform_test.h"
10
11namespace disk_cache {
12
13class CacheUtilTest : public PlatformTest {
14 public:
15  virtual void SetUp() {
16    PlatformTest::SetUp();
17    ASSERT_TRUE(tmp_dir_.CreateUniqueTempDir());
18    cache_dir_ = tmp_dir_.path().Append(FILE_PATH_LITERAL("Cache"));
19    file1_ = base::FilePath(cache_dir_.Append(FILE_PATH_LITERAL("file01")));
20    file2_ = base::FilePath(cache_dir_.Append(FILE_PATH_LITERAL(".file02")));
21    dir1_ = base::FilePath(cache_dir_.Append(FILE_PATH_LITERAL("dir01")));
22    file3_ = base::FilePath(dir1_.Append(FILE_PATH_LITERAL("file03")));
23    ASSERT_TRUE(base::CreateDirectory(cache_dir_));
24    FILE *fp = base::OpenFile(file1_, "w");
25    ASSERT_TRUE(fp != NULL);
26    base::CloseFile(fp);
27    fp = base::OpenFile(file2_, "w");
28    ASSERT_TRUE(fp != NULL);
29    base::CloseFile(fp);
30    ASSERT_TRUE(base::CreateDirectory(dir1_));
31    fp = base::OpenFile(file3_, "w");
32    ASSERT_TRUE(fp != NULL);
33    base::CloseFile(fp);
34    dest_dir_ = tmp_dir_.path().Append(FILE_PATH_LITERAL("old_Cache_001"));
35    dest_file1_ = base::FilePath(dest_dir_.Append(FILE_PATH_LITERAL("file01")));
36    dest_file2_ =
37        base::FilePath(dest_dir_.Append(FILE_PATH_LITERAL(".file02")));
38    dest_dir1_ = base::FilePath(dest_dir_.Append(FILE_PATH_LITERAL("dir01")));
39  }
40
41 protected:
42  base::ScopedTempDir tmp_dir_;
43  base::FilePath cache_dir_;
44  base::FilePath file1_;
45  base::FilePath file2_;
46  base::FilePath dir1_;
47  base::FilePath file3_;
48  base::FilePath dest_dir_;
49  base::FilePath dest_file1_;
50  base::FilePath dest_file2_;
51  base::FilePath dest_dir1_;
52};
53
54TEST_F(CacheUtilTest, MoveCache) {
55  EXPECT_TRUE(disk_cache::MoveCache(cache_dir_, dest_dir_));
56  EXPECT_TRUE(base::PathExists(dest_dir_));
57  EXPECT_TRUE(base::PathExists(dest_file1_));
58  EXPECT_TRUE(base::PathExists(dest_file2_));
59  EXPECT_TRUE(base::PathExists(dest_dir1_));
60#if defined(OS_CHROMEOS)
61  EXPECT_TRUE(base::PathExists(cache_dir_)); // old cache dir stays
62#else
63  EXPECT_FALSE(base::PathExists(cache_dir_)); // old cache is gone
64#endif
65  EXPECT_FALSE(base::PathExists(file1_));
66  EXPECT_FALSE(base::PathExists(file2_));
67  EXPECT_FALSE(base::PathExists(dir1_));
68}
69
70TEST_F(CacheUtilTest, DeleteCache) {
71  disk_cache::DeleteCache(cache_dir_, false);
72  EXPECT_TRUE(base::PathExists(cache_dir_)); // cache dir stays
73  EXPECT_FALSE(base::PathExists(dir1_));
74  EXPECT_FALSE(base::PathExists(file1_));
75  EXPECT_FALSE(base::PathExists(file2_));
76  EXPECT_FALSE(base::PathExists(file3_));
77}
78
79TEST_F(CacheUtilTest, DeleteCacheAndDir) {
80  disk_cache::DeleteCache(cache_dir_, true);
81  EXPECT_FALSE(base::PathExists(cache_dir_)); // cache dir is gone
82  EXPECT_FALSE(base::PathExists(dir1_));
83  EXPECT_FALSE(base::PathExists(file1_));
84  EXPECT_FALSE(base::PathExists(file2_));
85  EXPECT_FALSE(base::PathExists(file3_));
86}
87
88TEST_F(CacheUtilTest, DeleteCacheFile) {
89  EXPECT_TRUE(disk_cache::DeleteCacheFile(file1_));
90  EXPECT_FALSE(base::PathExists(file1_));
91  EXPECT_TRUE(base::PathExists(cache_dir_)); // cache dir stays
92  EXPECT_TRUE(base::PathExists(dir1_));
93  EXPECT_TRUE(base::PathExists(file3_));
94}
95
96}  // namespace disk_cache
97