open_file_operation_unittest.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/drive/file_system/open_file_operation.h" 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <map> 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/file_util.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/files/file_path.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/scoped_ptr.h" 128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/task_runner_util.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/drive/drive.pb.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/drive/file_cache.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/drive/file_change.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/drive/file_errors.h" 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/drive/file_system/operation_test_base.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/test/test_utils.h" 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/test_util.h" 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace drive { 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace file_system { 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass OpenFileOperationTest : public OperationTestBase { 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch protected: 27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void SetUp() OVERRIDE { 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OperationTestBase::SetUp(); 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_.reset(new OpenFileOperation( 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) blocking_task_runner(), delegate(), scheduler(), metadata(), cache(), 32a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch temp_dir())); 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<OpenFileOperation> operation_; 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, OpenExistingFile) { 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/File 1.txt")); 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ResourceEntry src_entry; 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &src_entry)); 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const int64 file_size = src_entry.file_info().size(); 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 47a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_FILE, 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 52a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 53a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 local_file_size; 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(file_size, local_file_size); 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 62a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback.is_null()); 63a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback.Run(); 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(1U, delegate()->updated_local_ids().count(src_entry.local_id())); 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, OpenNonExistingFile) { 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/not-exist.txt")); 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 73a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_FILE, 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 78a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 79a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_NOT_FOUND, error); 82a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch EXPECT_TRUE(close_callback.is_null()); 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, CreateExistingFile) { 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/File 1.txt")); 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ResourceEntry src_entry; 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &src_entry)); 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 93a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CREATE_FILE, 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 98a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 99a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 1017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_EXISTS, error); 103a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch EXPECT_TRUE(close_callback.is_null()); 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, CreateNonExistingFile) { 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/not-exist.txt")); 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 112a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 1137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 1147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CREATE_FILE, 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 117a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 118a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 1207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(1U, delegate()->get_changed_files().size()); 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(delegate()->get_changed_files().count(file_in_root)); 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 local_file_size; 127a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(0, local_file_size); // Should be an empty file. 1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 130a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback.is_null()); 131a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback.Run(); 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1U, 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate()->updated_local_ids().count(GetLocalId(file_in_root))); 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, OpenOrCreateExistingFile) { 1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 1387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/File 1.txt")); 1397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ResourceEntry src_entry; 1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &src_entry)); 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const int64 file_size = src_entry.file_info().size(); 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 145a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_OR_CREATE_FILE, 1493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 150a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 151a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 1537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Notified because 'available offline' status of the existing file changes. 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(1U, delegate()->get_changed_files().size()); 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(delegate()->get_changed_files().count(file_in_root)); 15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 local_file_size; 161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 1627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(file_size, local_file_size); 1637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 164a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback.is_null()); 165a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback.Run(); 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(1U, delegate()->updated_local_ids().count(src_entry.local_id())); 16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ResourceEntry result_entry; 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &result_entry)); 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(result_entry.file_specific_info().cache_state().is_present()); 171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(result_entry.file_specific_info().cache_state().is_dirty()); 1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, OpenOrCreateNonExistingFile) { 1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/not-exist.txt")); 1777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 1797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 180a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 1817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 1827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 1837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_OR_CREATE_FILE, 1843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 185a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 186a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 1887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 1907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 1917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 local_file_size; 192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 1937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(0, local_file_size); // Should be an empty file. 1947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 195a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback.is_null()); 196a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback.Run(); 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1U, 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate()->updated_local_ids().count(GetLocalId(file_in_root))); 1997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2017dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, OpenFileTwice) { 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/File 1.txt")); 2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ResourceEntry src_entry; 2057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &src_entry)); 2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const int64 file_size = src_entry.file_info().size(); 2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 2097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 210a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 2117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 2127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 2137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_FILE, 2143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 215a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 216a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 2207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 local_file_size; 222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 2237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(file_size, local_file_size); 2247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Open again. 2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch error = FILE_ERROR_FAILED; 227a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback2; 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_FILE, 2313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 232a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 233a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback2)); 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RunAllBlockingPoolTasksUntilIdle(); 2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(file_size, local_file_size); 2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 241a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback.is_null()); 242a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback2.is_null()); 243a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 244a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback.Run(); 245a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 246a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // There still remains a client opening the file, so it shouldn't be 247a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // uploaded yet. 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(delegate()->updated_local_ids().empty()); 249a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 250a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback2.Run(); 251a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 252a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Here, all the clients close the file, so it should be uploaded then. 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_EQ(1U, delegate()->updated_local_ids().count(src_entry.local_id())); 2547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace file_system 2577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace drive 258