190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system/remove_operation.h" 690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/drive/file_change.h" 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system/operation_test_base.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system_util.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/test/test_utils.h" 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/test_util.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace drive { 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace file_system { 1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)typedef OperationTestBase RemoveOperationTest; 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(RemoveOperationTest, RemoveFile) { 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RemoveOperation operation(blocking_task_runner(), delegate(), metadata(), 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cache()); 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::FilePath nonexisting_file( 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FILE_PATH_LITERAL("drive/root/Dummy file.txt")); 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::FilePath file_in_root(FILE_PATH_LITERAL("drive/root/File 1.txt")); 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::FilePath file_in_subdir( 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FILE_PATH_LITERAL("drive/root/Directory 1/SubDirectory File 1.txt")); 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Remove a file in root. 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ResourceEntry entry; 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FileError error = FILE_ERROR_FAILED; 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &entry)); 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.Remove(file_in_root, 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_recursive 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, error); 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(file_in_root, &entry)); 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string id_file_in_root = entry.local_id(); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntryById(id_file_in_root, &entry)); 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(util::kDriveTrashDirLocalId, entry.parent_local_id()); 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Remove a file in subdirectory. 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) error = FILE_ERROR_FAILED; 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_subdir, &entry)); 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string resource_id = entry.resource_id(); 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.Remove(file_in_subdir, 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_recursive 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, error); 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetLocalResourceEntry(file_in_subdir, &entry)); 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string id_file_in_subdir = entry.local_id(); 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GetLocalResourceEntryById(id_file_in_subdir, &entry)); 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(util::kDriveTrashDirLocalId, entry.parent_local_id()); 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Try removing non-existing file. 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) error = FILE_ERROR_FAILED; 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_NOT_FOUND, 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetLocalResourceEntry(nonexisting_file, &entry)); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) operation.Remove(nonexisting_file, 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_recursive 6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, error); 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Verify delegate notifications. 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(2U, delegate()->get_changed_files().size()); 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(delegate()->get_changed_files().count(file_in_root)); 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(delegate()->get_changed_files().count(file_in_subdir)); 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(2U, delegate()->updated_local_ids().size()); 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(delegate()->updated_local_ids().count(id_file_in_root)); 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(delegate()->updated_local_ids().count(id_file_in_subdir)); 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(RemoveOperationTest, RemoveDirectory) { 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RemoveOperation operation(blocking_task_runner(), delegate(), metadata(), 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) cache()); 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::FilePath empty_dir(FILE_PATH_LITERAL( 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "drive/root/Directory 1/Sub Directory Folder/Sub Sub Directory Folder")); 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::FilePath non_empty_dir(FILE_PATH_LITERAL( 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "drive/root/Directory 1")); 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::FilePath file_in_non_empty_dir(FILE_PATH_LITERAL( 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "drive/root/Directory 1/SubDirectory File 1.txt")); 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Empty directory can be removed even with is_recursive = false. 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FileError error = FILE_ERROR_FAILED; 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ResourceEntry entry; 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.Remove(empty_dir, 9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_recursive 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, error); 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetLocalResourceEntry(empty_dir, &entry)); 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Non-empty directory, cannot. 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) error = FILE_ERROR_FAILED; 10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(non_empty_dir, &entry)); 10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.Remove(non_empty_dir, 10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_recursive 10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_EMPTY, error); 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, 11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetLocalResourceEntry(non_empty_dir, &entry)); 11490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // With is_recursive = true, it can be deleted, however. Descendant entries 11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // are removed together. 11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) error = FILE_ERROR_FAILED; 11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_OK, 11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetLocalResourceEntry(file_in_non_empty_dir, &entry)); 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.Remove(non_empty_dir, 12190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) true, // is_recursive 12290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 12490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, error); 12590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, 12690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetLocalResourceEntry(non_empty_dir, &entry)); 12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, 12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GetLocalResourceEntry(file_in_non_empty_dir, &entry)); 12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 13090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace file_system 13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace drive 133