OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/drive/file_system/remove_operation.h" | 5 #include "chrome/browser/chromeos/drive/file_system/remove_operation.h" |
6 | 6 |
7 #include "chrome/browser/chromeos/drive/file_system/operation_test_base.h" | 7 #include "chrome/browser/chromeos/drive/file_system/operation_test_base.h" |
8 #include "chrome/browser/drive/fake_drive_service.h" | 8 #include "chrome/browser/chromeos/drive/file_system_util.h" |
9 #include "chrome/browser/google_apis/gdata_wapi_parser.h" | |
10 #include "chrome/browser/google_apis/test_util.h" | 9 #include "chrome/browser/google_apis/test_util.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
12 | 11 |
13 namespace drive { | 12 namespace drive { |
14 namespace file_system { | 13 namespace file_system { |
15 | 14 |
16 typedef OperationTestBase RemoveOperationTest; | 15 typedef OperationTestBase RemoveOperationTest; |
17 | 16 |
18 TEST_F(RemoveOperationTest, RemoveFile) { | 17 TEST_F(RemoveOperationTest, RemoveFile) { |
19 RemoveOperation operation(blocking_task_runner(), observer(), scheduler(), | 18 RemoveOperation operation(blocking_task_runner(), observer(), metadata(), |
20 metadata(), cache()); | 19 cache()); |
21 | 20 |
22 base::FilePath my_drive(FILE_PATH_LITERAL("drive/root")); | |
23 base::FilePath nonexisting_file( | 21 base::FilePath nonexisting_file( |
24 FILE_PATH_LITERAL("drive/root/Dummy file.txt")); | 22 FILE_PATH_LITERAL("drive/root/Dummy file.txt")); |
25 base::FilePath file_in_root(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 23 base::FilePath file_in_root(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
26 base::FilePath file_in_subdir( | 24 base::FilePath file_in_subdir( |
27 FILE_PATH_LITERAL("drive/root/Directory 1/SubDirectory File 1.txt")); | 25 FILE_PATH_LITERAL("drive/root/Directory 1/SubDirectory File 1.txt")); |
28 | 26 |
29 // Remove a file in root. | 27 // Remove a file in root. |
30 ResourceEntry entry; | 28 ResourceEntry entry; |
31 FileError error = FILE_ERROR_FAILED; | 29 FileError error = FILE_ERROR_FAILED; |
32 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &entry)); | 30 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &entry)); |
33 operation.Remove(file_in_root, | 31 operation.Remove(file_in_root, |
34 false, // is_recursive | 32 false, // is_recursive |
35 google_apis::test_util::CreateCopyResultCallback(&error)); | 33 google_apis::test_util::CreateCopyResultCallback(&error)); |
36 test_util::RunBlockingPoolTask(); | 34 test_util::RunBlockingPoolTask(); |
37 EXPECT_EQ(FILE_ERROR_OK, error); | 35 EXPECT_EQ(FILE_ERROR_OK, error); |
38 EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(file_in_root, &entry)); | 36 EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(file_in_root, &entry)); |
39 | 37 |
| 38 const std::string id_file_in_root = entry.local_id(); |
| 39 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntryById(id_file_in_root, &entry)); |
| 40 EXPECT_EQ(util::kDriveTrashDirLocalId, entry.parent_local_id()); |
| 41 |
40 // Remove a file in subdirectory. | 42 // Remove a file in subdirectory. |
41 error = FILE_ERROR_FAILED; | 43 error = FILE_ERROR_FAILED; |
42 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_subdir, &entry)); | 44 ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_subdir, &entry)); |
43 const std::string resource_id = entry.resource_id(); | 45 const std::string resource_id = entry.resource_id(); |
44 | 46 |
45 operation.Remove(file_in_subdir, | 47 operation.Remove(file_in_subdir, |
46 false, // is_recursive | 48 false, // is_recursive |
47 google_apis::test_util::CreateCopyResultCallback(&error)); | 49 google_apis::test_util::CreateCopyResultCallback(&error)); |
48 test_util::RunBlockingPoolTask(); | 50 test_util::RunBlockingPoolTask(); |
49 EXPECT_EQ(FILE_ERROR_OK, error); | 51 EXPECT_EQ(FILE_ERROR_OK, error); |
50 EXPECT_EQ(FILE_ERROR_NOT_FOUND, | 52 EXPECT_EQ(FILE_ERROR_NOT_FOUND, |
51 GetLocalResourceEntry(file_in_subdir, &entry)); | 53 GetLocalResourceEntry(file_in_subdir, &entry)); |
52 | 54 |
53 // Verify the file is indeed removed in the server. | 55 const std::string id_file_in_subdir = entry.local_id(); |
54 google_apis::GDataErrorCode gdata_error = google_apis::GDATA_OTHER_ERROR; | 56 EXPECT_EQ(FILE_ERROR_OK, |
55 scoped_ptr<google_apis::ResourceEntry> gdata_entry; | 57 GetLocalResourceEntryById(id_file_in_subdir, &entry)); |
56 fake_service()->GetResourceEntry( | 58 EXPECT_EQ(util::kDriveTrashDirLocalId, entry.parent_local_id()); |
57 resource_id, | |
58 google_apis::test_util::CreateCopyResultCallback(&gdata_error, | |
59 &gdata_entry)); | |
60 test_util::RunBlockingPoolTask(); | |
61 ASSERT_EQ(google_apis::HTTP_SUCCESS, gdata_error); | |
62 EXPECT_TRUE(gdata_entry->deleted()); | |
63 | 59 |
64 // Try removing non-existing file. | 60 // Try removing non-existing file. |
65 error = FILE_ERROR_FAILED; | 61 error = FILE_ERROR_FAILED; |
66 ASSERT_EQ(FILE_ERROR_NOT_FOUND, | 62 ASSERT_EQ(FILE_ERROR_NOT_FOUND, |
67 GetLocalResourceEntry(nonexisting_file, &entry)); | 63 GetLocalResourceEntry(nonexisting_file, &entry)); |
68 operation.Remove(base::FilePath::FromUTF8Unsafe("drive/root/Dummy file.txt"), | 64 operation.Remove(nonexisting_file, |
69 false, // is_recursive | 65 false, // is_recursive |
70 google_apis::test_util::CreateCopyResultCallback(&error)); | 66 google_apis::test_util::CreateCopyResultCallback(&error)); |
71 test_util::RunBlockingPoolTask(); | 67 test_util::RunBlockingPoolTask(); |
72 EXPECT_EQ(FILE_ERROR_NOT_FOUND, error); | 68 EXPECT_EQ(FILE_ERROR_NOT_FOUND, error); |
73 | 69 |
74 // Verify observer notifications. | 70 // Verify observer notifications. |
75 EXPECT_EQ(2U, observer()->get_changed_paths().size()); | 71 EXPECT_EQ(2U, observer()->get_changed_paths().size()); |
76 EXPECT_TRUE(observer()->get_changed_paths().count(file_in_root.DirName())); | 72 EXPECT_TRUE(observer()->get_changed_paths().count(file_in_root.DirName())); |
77 EXPECT_TRUE(observer()->get_changed_paths().count(file_in_subdir.DirName())); | 73 EXPECT_TRUE(observer()->get_changed_paths().count(file_in_subdir.DirName())); |
| 74 |
| 75 EXPECT_EQ(2U, observer()->removed_local_ids().size()); |
| 76 EXPECT_TRUE(observer()->removed_local_ids().count(id_file_in_root)); |
| 77 EXPECT_TRUE(observer()->removed_local_ids().count(id_file_in_subdir)); |
78 } | 78 } |
79 | 79 |
80 TEST_F(RemoveOperationTest, RemoveDirectory) { | 80 TEST_F(RemoveOperationTest, RemoveDirectory) { |
81 RemoveOperation operation(blocking_task_runner(), observer(), scheduler(), | 81 RemoveOperation operation(blocking_task_runner(), observer(), metadata(), |
82 metadata(), cache()); | 82 cache()); |
83 | 83 |
84 base::FilePath empty_dir(FILE_PATH_LITERAL( | 84 base::FilePath empty_dir(FILE_PATH_LITERAL( |
85 "drive/root/Directory 1/Sub Directory Folder/Sub Sub Directory Folder")); | 85 "drive/root/Directory 1/Sub Directory Folder/Sub Sub Directory Folder")); |
86 base::FilePath non_empty_dir(FILE_PATH_LITERAL( | 86 base::FilePath non_empty_dir(FILE_PATH_LITERAL( |
87 "drive/root/Directory 1")); | 87 "drive/root/Directory 1")); |
88 base::FilePath file_in_non_empty_dir(FILE_PATH_LITERAL( | 88 base::FilePath file_in_non_empty_dir(FILE_PATH_LITERAL( |
89 "drive/root/Directory 1/SubDirectory File 1.txt")); | 89 "drive/root/Directory 1/SubDirectory File 1.txt")); |
90 | 90 |
91 // Empty directory can be removed even with is_recursive = false. | 91 // Empty directory can be removed even with is_recursive = false. |
92 FileError error = FILE_ERROR_FAILED; | 92 FileError error = FILE_ERROR_FAILED; |
(...skipping 26 matching lines...) Expand all Loading... |
119 true, // is_recursive | 119 true, // is_recursive |
120 google_apis::test_util::CreateCopyResultCallback(&error)); | 120 google_apis::test_util::CreateCopyResultCallback(&error)); |
121 test_util::RunBlockingPoolTask(); | 121 test_util::RunBlockingPoolTask(); |
122 EXPECT_EQ(FILE_ERROR_OK, error); | 122 EXPECT_EQ(FILE_ERROR_OK, error); |
123 EXPECT_EQ(FILE_ERROR_NOT_FOUND, | 123 EXPECT_EQ(FILE_ERROR_NOT_FOUND, |
124 GetLocalResourceEntry(non_empty_dir, &entry)); | 124 GetLocalResourceEntry(non_empty_dir, &entry)); |
125 EXPECT_EQ(FILE_ERROR_NOT_FOUND, | 125 EXPECT_EQ(FILE_ERROR_NOT_FOUND, |
126 GetLocalResourceEntry(file_in_non_empty_dir, &entry)); | 126 GetLocalResourceEntry(file_in_non_empty_dir, &entry)); |
127 } | 127 } |
128 | 128 |
129 TEST_F(RemoveOperationTest, RemoveShared) { | |
130 RemoveOperation operation(blocking_task_runner(), observer(), scheduler(), | |
131 metadata(), cache()); | |
132 | |
133 const base::FilePath kPathInMyDrive(FILE_PATH_LITERAL( | |
134 "drive/root/shared.txt")); | |
135 const base::FilePath kPathInOther(FILE_PATH_LITERAL( | |
136 "drive/other/shared.txt")); | |
137 | |
138 // Prepare a shared file to the root folder. | |
139 google_apis::GDataErrorCode gdata_error = google_apis::GDATA_OTHER_ERROR; | |
140 scoped_ptr<google_apis::ResourceEntry> gdata_entry; | |
141 fake_service()->AddNewFile( | |
142 "text/plain", | |
143 "dummy content", | |
144 fake_service()->GetRootResourceId(), | |
145 kPathInMyDrive.BaseName().AsUTF8Unsafe(), | |
146 true, // shared_with_me, | |
147 google_apis::test_util::CreateCopyResultCallback(&gdata_error, | |
148 &gdata_entry)); | |
149 test_util::RunBlockingPoolTask(); | |
150 ASSERT_EQ(google_apis::HTTP_CREATED, gdata_error); | |
151 CheckForUpdates(); | |
152 | |
153 // Remove it. Locally, the file should be moved to drive/other. | |
154 FileError error = FILE_ERROR_FAILED; | |
155 ResourceEntry entry; | |
156 operation.Remove(kPathInMyDrive, | |
157 false, // is_recursive | |
158 google_apis::test_util::CreateCopyResultCallback(&error)); | |
159 test_util::RunBlockingPoolTask(); | |
160 EXPECT_EQ(FILE_ERROR_OK, error); | |
161 EXPECT_EQ(FILE_ERROR_NOT_FOUND, | |
162 GetLocalResourceEntry(kPathInMyDrive, &entry)); | |
163 EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kPathInOther, &entry)); | |
164 | |
165 // Remotely, the entry should have lost its parent. | |
166 gdata_error = google_apis::GDATA_OTHER_ERROR; | |
167 const std::string resource_id = gdata_entry->resource_id(); | |
168 fake_service()->GetResourceEntry( | |
169 resource_id, | |
170 google_apis::test_util::CreateCopyResultCallback(&gdata_error, | |
171 &gdata_entry)); | |
172 test_util::RunBlockingPoolTask(); | |
173 ASSERT_EQ(google_apis::HTTP_SUCCESS, gdata_error); | |
174 EXPECT_FALSE(gdata_entry->deleted()); // It's not deleted. | |
175 EXPECT_FALSE(gdata_entry->GetLinkByType(google_apis::Link::LINK_PARENT)); | |
176 } | |
177 | |
178 } // namespace file_system | 129 } // namespace file_system |
179 } // namespace drive | 130 } // namespace drive |
OLD | NEW |