Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / drive / download_handler_unittest.cc
1 // Copyright (c) 2013 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 "chrome/browser/chromeos/drive/download_handler.h"
6
7 #include "base/files/scoped_temp_dir.h"
8 #include "chrome/browser/chromeos/drive/dummy_file_system.h"
9 #include "chrome/browser/chromeos/drive/file_system_util.h"
10 #include "chrome/test/base/testing_profile.h"
11 #include "content/public/test/mock_download_item.h"
12 #include "content/public/test/mock_download_manager.h"
13 #include "content/public/test/test_browser_thread_bundle.h"
14 #include "content/public/test/test_utils.h"
15 #include "google_apis/drive/test_util.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace drive {
19
20 namespace {
21
22 // Test file system for verifying the behavior of DownloadHandler, by simulating
23 // various responses from FileSystem.
24 class DownloadHandlerTestFileSystem : public DummyFileSystem {
25  public:
26   DownloadHandlerTestFileSystem() : error_(FILE_ERROR_FAILED) {}
27
28   void set_error(FileError error) { error_ = error; }
29
30   // FileSystemInterface overrides.
31   virtual void GetResourceEntry(
32       const base::FilePath& file_path,
33       const GetResourceEntryCallback& callback) override {
34     callback.Run(error_, scoped_ptr<ResourceEntry>(
35         error_ == FILE_ERROR_OK ? new ResourceEntry : NULL));
36   }
37
38   virtual void CreateDirectory(
39       const base::FilePath& directory_path,
40       bool is_exclusive,
41       bool is_recursive,
42       const FileOperationCallback& callback) override {
43     callback.Run(error_);
44   }
45
46  private:
47   FileError error_;
48 };
49
50 }  // namespace
51
52 class DownloadHandlerTest : public testing::Test {
53  public:
54   DownloadHandlerTest()
55       : download_manager_(new content::MockDownloadManager) {}
56
57   virtual void SetUp() override {
58     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
59
60     // Set expectations for download item.
61     EXPECT_CALL(download_item_, GetState())
62         .WillRepeatedly(testing::Return(content::DownloadItem::IN_PROGRESS));
63
64     download_handler_.reset(new DownloadHandler(&test_file_system_));
65     download_handler_->Initialize(download_manager_.get(), temp_dir_.path());
66   }
67
68  protected:
69   base::ScopedTempDir temp_dir_;
70   content::TestBrowserThreadBundle thread_bundle_;
71   TestingProfile profile_;
72   scoped_ptr<content::MockDownloadManager> download_manager_;
73   DownloadHandlerTestFileSystem test_file_system_;
74   scoped_ptr<DownloadHandler> download_handler_;
75   content::MockDownloadItem download_item_;
76 };
77
78 TEST_F(DownloadHandlerTest, SubstituteDriveDownloadPathNonDrivePath) {
79   const base::FilePath non_drive_path(FILE_PATH_LITERAL("/foo/bar"));
80   ASSERT_FALSE(util::IsUnderDriveMountPoint(non_drive_path));
81
82   // Call SubstituteDriveDownloadPath()
83   base::FilePath substituted_path;
84   download_handler_->SubstituteDriveDownloadPath(
85       non_drive_path,
86       &download_item_,
87       google_apis::test_util::CreateCopyResultCallback(&substituted_path));
88   content::RunAllBlockingPoolTasksUntilIdle();
89
90   // Check the result.
91   EXPECT_EQ(non_drive_path, substituted_path);
92   EXPECT_FALSE(download_handler_->IsDriveDownload(&download_item_));
93 }
94
95 TEST_F(DownloadHandlerTest, SubstituteDriveDownloadPath) {
96   const base::FilePath drive_path =
97       util::GetDriveMountPointPath(&profile_).AppendASCII("test.dat");
98
99   // Test the case that the download target directory already exists.
100   test_file_system_.set_error(FILE_ERROR_OK);
101
102   // Call SubstituteDriveDownloadPath()
103   base::FilePath substituted_path;
104   download_handler_->SubstituteDriveDownloadPath(
105       drive_path,
106       &download_item_,
107       google_apis::test_util::CreateCopyResultCallback(&substituted_path));
108   content::RunAllBlockingPoolTasksUntilIdle();
109
110   // Check the result.
111   EXPECT_TRUE(temp_dir_.path().IsParent(substituted_path));
112   ASSERT_TRUE(download_handler_->IsDriveDownload(&download_item_));
113   EXPECT_EQ(drive_path, download_handler_->GetTargetPath(&download_item_));
114 }
115
116 TEST_F(DownloadHandlerTest, SubstituteDriveDownloadPathGetEntryFailure) {
117   const base::FilePath drive_path =
118       util::GetDriveMountPointPath(&profile_).AppendASCII("test.dat");
119
120   // Test the case that access to the download target directory failed for some
121   // reason.
122   test_file_system_.set_error(FILE_ERROR_FAILED);
123
124   // Call SubstituteDriveDownloadPath()
125   base::FilePath substituted_path;
126   download_handler_->SubstituteDriveDownloadPath(
127       drive_path,
128       &download_item_,
129       google_apis::test_util::CreateCopyResultCallback(&substituted_path));
130   content::RunAllBlockingPoolTasksUntilIdle();
131
132   // Check the result.
133   EXPECT_TRUE(substituted_path.empty());
134 }
135
136 // content::SavePackage calls SubstituteDriveDownloadPath before creating
137 // DownloadItem.
138 TEST_F(DownloadHandlerTest, SubstituteDriveDownloadPathForSavePackage) {
139   const base::FilePath drive_path =
140       util::GetDriveMountPointPath(&profile_).AppendASCII("test.dat");
141   test_file_system_.set_error(FILE_ERROR_OK);
142
143   // Call SubstituteDriveDownloadPath()
144   base::FilePath substituted_path;
145   download_handler_->SubstituteDriveDownloadPath(
146       drive_path,
147       NULL,  // DownloadItem is not available at this moment.
148       google_apis::test_util::CreateCopyResultCallback(&substituted_path));
149   content::RunAllBlockingPoolTasksUntilIdle();
150
151   // Check the result of SubstituteDriveDownloadPath().
152   EXPECT_TRUE(temp_dir_.path().IsParent(substituted_path));
153
154   // |download_item_| is not a drive download yet.
155   EXPECT_FALSE(download_handler_->IsDriveDownload(&download_item_));
156
157   // Call SetDownloadParams().
158   download_handler_->SetDownloadParams(drive_path, &download_item_);
159
160   // |download_item_| is a drive download now.
161   ASSERT_TRUE(download_handler_->IsDriveDownload(&download_item_));
162   EXPECT_EQ(drive_path, download_handler_->GetTargetPath(&download_item_));
163 }
164
165 TEST_F(DownloadHandlerTest, CheckForFileExistence) {
166   const base::FilePath drive_path =
167       util::GetDriveMountPointPath(&profile_).AppendASCII("test.dat");
168
169   // Make |download_item_| a drive download.
170   download_handler_->SetDownloadParams(drive_path, &download_item_);
171   ASSERT_TRUE(download_handler_->IsDriveDownload(&download_item_));
172   EXPECT_EQ(drive_path, download_handler_->GetTargetPath(&download_item_));
173
174   // Test for the case when the path exists.
175   test_file_system_.set_error(FILE_ERROR_OK);
176
177   // Call CheckForFileExistence.
178   bool file_exists = false;
179   download_handler_->CheckForFileExistence(
180       &download_item_,
181       google_apis::test_util::CreateCopyResultCallback(&file_exists));
182   content::RunAllBlockingPoolTasksUntilIdle();
183
184   // Check the result.
185   EXPECT_TRUE(file_exists);
186
187   // Test for the case when the path does not exist.
188   test_file_system_.set_error(FILE_ERROR_NOT_FOUND);
189
190   // Call CheckForFileExistence again.
191   download_handler_->CheckForFileExistence(
192       &download_item_,
193       google_apis::test_util::CreateCopyResultCallback(&file_exists));
194   content::RunAllBlockingPoolTasksUntilIdle();
195
196   // Check the result.
197   EXPECT_FALSE(file_exists);
198 }
199
200 }  // namespace drive