blob: 74083699f00f8ff2b0ed14698c9f4beb602c240f [file] [log] [blame]
[email protected]77e07b82012-04-23 18:40:571// Copyright (c) 2012 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
[email protected]cf7405f2013-01-26 00:21:585#include "base/files/file_util_proxy.h"
[email protected]77e07b82012-04-23 18:40:576
[email protected]77e07b82012-04-23 18:40:577#include "base/bind.h"
[email protected]e3177dd2014-08-13 20:22:148#include "base/files/file_util.h"
[email protected]ea1a3f62012-11-16 20:34:239#include "base/files/scoped_temp_dir.h"
[email protected]77e07b82012-04-23 18:40:5710#include "base/memory/weak_ptr.h"
[email protected]77e07b82012-04-23 18:40:5711#include "base/threading/thread.h"
12#include "testing/gtest/include/gtest/gtest.h"
13
14namespace base {
15
16class FileUtilProxyTest : public testing::Test {
17 public:
18 FileUtilProxyTest()
[email protected]1ef90012014-01-15 22:24:3319 : file_thread_("FileUtilProxyTestFileThread"),
[email protected]141bcc52014-01-27 21:36:0020 error_(File::FILE_OK),
[email protected]c9f977b2013-04-25 12:17:1521 weak_factory_(this) {}
[email protected]77e07b82012-04-23 18:40:5722
dcheng8aef37612014-12-23 02:56:4723 void SetUp() override {
[email protected]77e07b82012-04-23 18:40:5724 ASSERT_TRUE(dir_.CreateUniqueTempDir());
25 ASSERT_TRUE(file_thread_.Start());
26 }
27
[email protected]141bcc52014-01-27 21:36:0028 void DidFinish(File::Error error) {
[email protected]77e07b82012-04-23 18:40:5729 error_ = error;
[email protected]91cae252013-01-10 14:56:1730 MessageLoop::current()->QuitWhenIdle();
[email protected]77e07b82012-04-23 18:40:5731 }
32
[email protected]141bcc52014-01-27 21:36:0033 void DidGetFileInfo(File::Error error,
34 const File::Info& file_info) {
[email protected]77e07b82012-04-23 18:40:5735 error_ = error;
36 file_info_ = file_info;
[email protected]91cae252013-01-10 14:56:1737 MessageLoop::current()->QuitWhenIdle();
[email protected]77e07b82012-04-23 18:40:5738 }
39
[email protected]77e07b82012-04-23 18:40:5740 protected:
[email protected]77e07b82012-04-23 18:40:5741 TaskRunner* file_task_runner() const {
skyostil054861d2015-04-30 19:06:1542 return file_thread_.task_runner().get();
[email protected]77e07b82012-04-23 18:40:5743 }
44 const FilePath& test_dir_path() const { return dir_.path(); }
45 const FilePath test_path() const { return dir_.path().AppendASCII("test"); }
46
[email protected]1ef90012014-01-15 22:24:3347 MessageLoopForIO message_loop_;
[email protected]77e07b82012-04-23 18:40:5748 Thread file_thread_;
49
50 ScopedTempDir dir_;
[email protected]141bcc52014-01-27 21:36:0051 File::Error error_;
[email protected]77e07b82012-04-23 18:40:5752 FilePath path_;
[email protected]141bcc52014-01-27 21:36:0053 File::Info file_info_;
[email protected]77e07b82012-04-23 18:40:5754 std::vector<char> buffer_;
[email protected]77e07b82012-04-23 18:40:5755 WeakPtrFactory<FileUtilProxyTest> weak_factory_;
56};
57
[email protected]77e07b82012-04-23 18:40:5758
59TEST_F(FileUtilProxyTest, GetFileInfo_File) {
60 // Setup.
[email protected]e5c2a22e2014-03-06 20:42:3061 ASSERT_EQ(4, WriteFile(test_path(), "test", 4));
[email protected]54124ed2014-01-07 10:06:5862 File::Info expected_info;
[email protected]9eae4e62013-12-04 20:56:4963 GetFileInfo(test_path(), &expected_info);
[email protected]77e07b82012-04-23 18:40:5764
65 // Run.
66 FileUtilProxy::GetFileInfo(
67 file_task_runner(),
68 test_path(),
69 Bind(&FileUtilProxyTest::DidGetFileInfo, weak_factory_.GetWeakPtr()));
70 MessageLoop::current()->Run();
71
72 // Verify.
[email protected]141bcc52014-01-27 21:36:0073 EXPECT_EQ(File::FILE_OK, error_);
[email protected]77e07b82012-04-23 18:40:5774 EXPECT_EQ(expected_info.size, file_info_.size);
75 EXPECT_EQ(expected_info.is_directory, file_info_.is_directory);
76 EXPECT_EQ(expected_info.is_symbolic_link, file_info_.is_symbolic_link);
77 EXPECT_EQ(expected_info.last_modified, file_info_.last_modified);
78 EXPECT_EQ(expected_info.last_accessed, file_info_.last_accessed);
79 EXPECT_EQ(expected_info.creation_time, file_info_.creation_time);
80}
81
82TEST_F(FileUtilProxyTest, GetFileInfo_Directory) {
83 // Setup.
[email protected]426d1c92013-12-03 20:08:5484 ASSERT_TRUE(base::CreateDirectory(test_path()));
[email protected]54124ed2014-01-07 10:06:5885 File::Info expected_info;
[email protected]9eae4e62013-12-04 20:56:4986 GetFileInfo(test_path(), &expected_info);
[email protected]77e07b82012-04-23 18:40:5787
88 // Run.
89 FileUtilProxy::GetFileInfo(
90 file_task_runner(),
91 test_path(),
92 Bind(&FileUtilProxyTest::DidGetFileInfo, weak_factory_.GetWeakPtr()));
93 MessageLoop::current()->Run();
94
95 // Verify.
[email protected]141bcc52014-01-27 21:36:0096 EXPECT_EQ(File::FILE_OK, error_);
[email protected]77e07b82012-04-23 18:40:5797 EXPECT_EQ(expected_info.size, file_info_.size);
98 EXPECT_EQ(expected_info.is_directory, file_info_.is_directory);
99 EXPECT_EQ(expected_info.is_symbolic_link, file_info_.is_symbolic_link);
100 EXPECT_EQ(expected_info.last_modified, file_info_.last_modified);
101 EXPECT_EQ(expected_info.last_accessed, file_info_.last_accessed);
102 EXPECT_EQ(expected_info.creation_time, file_info_.creation_time);
103}
104
[email protected]77e07b82012-04-23 18:40:57105TEST_F(FileUtilProxyTest, Touch) {
[email protected]d1b29082014-05-22 03:39:05106 ASSERT_EQ(4, WriteFile(test_path(), "test", 4));
[email protected]77e07b82012-04-23 18:40:57107 Time last_accessed_time = Time::Now() - TimeDelta::FromDays(12345);
108 Time last_modified_time = Time::Now() - TimeDelta::FromHours(98765);
109
110 FileUtilProxy::Touch(
111 file_task_runner(),
[email protected]d1b29082014-05-22 03:39:05112 test_path(),
[email protected]77e07b82012-04-23 18:40:57113 last_accessed_time,
114 last_modified_time,
115 Bind(&FileUtilProxyTest::DidFinish, weak_factory_.GetWeakPtr()));
116 MessageLoop::current()->Run();
[email protected]141bcc52014-01-27 21:36:00117 EXPECT_EQ(File::FILE_OK, error_);
[email protected]77e07b82012-04-23 18:40:57118
[email protected]54124ed2014-01-07 10:06:58119 File::Info info;
[email protected]9eae4e62013-12-04 20:56:49120 GetFileInfo(test_path(), &info);
[email protected]77e07b82012-04-23 18:40:57121
122 // The returned values may only have the seconds precision, so we cast
123 // the double values to int here.
124 EXPECT_EQ(static_cast<int>(last_modified_time.ToDoubleT()),
125 static_cast<int>(info.last_modified.ToDoubleT()));
126 EXPECT_EQ(static_cast<int>(last_accessed_time.ToDoubleT()),
127 static_cast<int>(info.last_accessed.ToDoubleT()));
128}
129
[email protected]77e07b82012-04-23 18:40:57130} // namespace base