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)