12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 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. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system/create_directory_operation.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system/operation_test_base.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/test/test_utils.h" 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/test_util.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace drive { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace file_system { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class CreateDirectoryOperationTest : public OperationTestBase { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns FILE_ERROR_OK if a directory is found at |path|. 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FileError FindDirectory(const base::FilePath& path) { 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ResourceEntry entry; 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FileError error = GetLocalResourceEntry(path, &entry); 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (error == FILE_ERROR_OK && !entry.file_info().is_directory()) 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) error = FILE_ERROR_NOT_A_DIRECTORY; 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return error; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(CreateDirectoryOperationTest, CreateDirectory) { 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CreateDirectoryOperation operation(blocking_task_runner(), 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate(), 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) metadata()); 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::FilePath kExistingFile( 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FILE_PATH_LITERAL("drive/root/File 1.txt")); 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::FilePath kExistingDirectory( 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FILE_PATH_LITERAL("drive/root/Directory 1")); 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::FilePath kNewDirectory1( 3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FILE_PATH_LITERAL("drive/root/New Directory")); 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const base::FilePath kNewDirectory2 = 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) kNewDirectory1.AppendASCII("New Directory 2/a/b/c"); 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Create a new directory, not recursively. 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, FindDirectory(kNewDirectory1)); 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FileError error = FILE_ERROR_FAILED; 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.CreateDirectory( 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) kNewDirectory1, 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) true, // is_exclusive 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_recursive 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, error); 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, FindDirectory(kNewDirectory1)); 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(1U, delegate()->get_changed_files().size()); 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ( 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1U, 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate()->get_changed_files().CountDirectory(kNewDirectory1.DirName())); 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ResourceEntry entry; 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(kNewDirectory1, &entry)); 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(ResourceEntry::DIRTY, entry.metadata_edit_state()); 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(entry.file_info().is_directory()); 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(base::Time::FromInternalValue( 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) entry.file_info().last_modified()).is_null()); 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(base::Time::FromInternalValue( 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) entry.file_info().last_accessed()).is_null()); 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(1U, delegate()->updated_local_ids().size()); 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(1U, delegate()->updated_local_ids().count(entry.local_id())); 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Create a new directory recursively. 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, FindDirectory(kNewDirectory2)); 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.CreateDirectory( 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) kNewDirectory2, 7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) true, // is_exclusive 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_recursive 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 7790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, error); 7890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_FOUND, FindDirectory(kNewDirectory2)); 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.CreateDirectory( 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) kNewDirectory2, 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) true, // is_exclusive 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) true, // is_recursive 8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, error); 8790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, FindDirectory(kNewDirectory2)); 8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Try to create an existing directory. 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.CreateDirectory( 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) kExistingDirectory, 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) true, // is_exclusive 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_recursive 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_EXISTS, error); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.CreateDirectory( 9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) kExistingDirectory, 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_exclusive 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_recursive 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, error); 10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Try to create a directory with a path for an existing file. 10790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.CreateDirectory( 10890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) kExistingFile, 10990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_exclusive 11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) true, // is_recursive 11190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, error); 11490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Try to create a directory under a file. 11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) operation.CreateDirectory( 11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) kExistingFile.AppendASCII("New Directory"), 11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) false, // is_exclusive 11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) true, // is_recursive 12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) google_apis::test_util::CreateCopyResultCallback(&error)); 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(FILE_ERROR_NOT_A_DIRECTORY, error); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace file_system 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace drive 127