Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Side by Side Diff: chrome/browser/chromeos/drive/file_system/remove_operation_unittest.cc

Issue 68543002: drive: Support offline delete (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Stop modifying local state after server side update Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/file_system/remove_operation.cc ('k') | chrome/browser/chromeos/drive/sync/remove_performer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698