146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system/move_operation.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/drive/file_change.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system/operation_test_base.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/test/test_utils.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/drive/test_util.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace drive { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace file_system { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class MoveOperationTest : public OperationTestBase { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void SetUp() OVERRIDE { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OperationTestBase::SetUp(); 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) operation_.reset(new MoveOperation(blocking_task_runner(), 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate(), 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) metadata())); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<MoveOperation> operation_; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(MoveOperationTest, MoveFileInSameDirectory) { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath src_path( 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FILE_PATH_LITERAL("drive/root/Directory 1/SubDirectory File 1.txt")); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::FilePath dest_path( 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FILE_PATH_LITERAL("drive/root/Directory 1/Test.log")); 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResourceEntry src_entry, dest_entry; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &src_entry)); 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_NOT_FOUND, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetLocalResourceEntry(dest_path, &dest_entry)); 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FileError error = FILE_ERROR_FAILED; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) operation_->Move(src_path, 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dest_path, 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RunAllBlockingPoolTasksUntilIdle(); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(FILE_ERROR_OK, error); 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(dest_path, &dest_entry)); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(src_entry.local_id(), dest_entry.local_id()); 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ResourceEntry::DIRTY, dest_entry.metadata_edit_state()); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(src_path, &src_entry)); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2U, delegate()->get_changed_files().size()); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(delegate()->get_changed_files().count(src_path)); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(delegate()->get_changed_files().count(dest_path)); 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1U, delegate()->updated_local_ids().size()); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(delegate()->updated_local_ids().count(src_entry.local_id())); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(MoveOperationTest, MoveFileFromRootToSubDirectory) { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath src_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath dest_path( 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FILE_PATH_LITERAL("drive/root/Directory 1/Test.log")); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceEntry src_entry, dest_entry; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &src_entry)); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(FILE_ERROR_NOT_FOUND, 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetLocalResourceEntry(dest_path, &dest_entry)); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FileError error = FILE_ERROR_FAILED; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) operation_->Move(src_path, 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) dest_path, 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RunAllBlockingPoolTasksUntilIdle(); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, error); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(dest_path, &dest_entry)); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(src_entry.local_id(), dest_entry.local_id()); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(ResourceEntry::DIRTY, dest_entry.metadata_edit_state()); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(src_path, &src_entry)); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2U, delegate()->get_changed_files().size()); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(delegate()->get_changed_files().count(src_path)); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(delegate()->get_changed_files().count(dest_path)); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, delegate()->updated_local_ids().size()); 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(delegate()->updated_local_ids().count(src_entry.local_id())); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(MoveOperationTest, MoveNotExistingFile) { 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath src_path(FILE_PATH_LITERAL("drive/root/Dummy file.txt")); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path(FILE_PATH_LITERAL("drive/root/Test.log")); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FileError error = FILE_ERROR_OK; 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) operation_->Move(src_path, 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) dest_path, 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content::RunAllBlockingPoolTasksUntilIdle(); 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, error); 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ResourceEntry entry; 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(src_path, &entry)); 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(dest_path, &entry)); 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(MoveOperationTest, MoveFileToNonExistingDirectory) { 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::FilePath src_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path(FILE_PATH_LITERAL("drive/root/Dummy/Test.log")); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FileError error = FILE_ERROR_OK; 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) operation_->Move(src_path, 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) dest_path, 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 113a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::RunAllBlockingPoolTasksUntilIdle(); 114a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, error); 115a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 116a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ResourceEntry entry; 117a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &entry)); 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(dest_path, &entry)); 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 120a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Test the case where the parent of |dest_file_path| is a existing file, 122a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)// not a directory. 123a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)TEST_F(MoveOperationTest, MoveFileToInvalidPath) { 124a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) base::FilePath src_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath dest_path( 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FILE_PATH_LITERAL("drive/root/Duplicate Name.txt/Test.log")); 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FileError error = FILE_ERROR_OK; 129a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) operation_->Move(src_path, 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dest_path, 131a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 132a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) content::RunAllBlockingPoolTasksUntilIdle(); 133a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, error); 134a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 135a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) ResourceEntry entry; 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(src_path, &entry)); 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, GetLocalResourceEntry(dest_path, &entry)); 138a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 139a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 140a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} // namespace file_system 141a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} // namespace drive 142a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)