open_file_operation_unittest.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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" 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/drive/file_errors.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chromeos/drive/file_system/operation_test_base.h" 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/test_util.h" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace drive { 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace file_system { 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass OpenFileOperationTest : public OperationTestBase { 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch protected: 25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void SetUp() OVERRIDE { 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OperationTestBase::SetUp(); 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_.reset(new OpenFileOperation( 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch blocking_task_runner(), observer(), scheduler(), metadata(), cache(), 30a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch temp_dir())); 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<OpenFileOperation> operation_; 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, OpenExistingFile) { 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/File 1.txt")); 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ResourceEntry src_entry; 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &src_entry)); 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const int64 file_size = src_entry.file_info().size(); 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 45a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_FILE, 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 50a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 51a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch test_util::RunBlockingPoolTask(); 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 local_file_size; 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(file_size, local_file_size); 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 60a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback.is_null()); 61a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback.Run(); 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1U, observer()->updated_local_ids().count(src_entry.local_id())); 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, OpenNonExistingFile) { 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/not-exist.txt")); 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 71a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_FILE, 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 76a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 77a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch test_util::RunBlockingPoolTask(); 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_NOT_FOUND, error); 80a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch EXPECT_TRUE(close_callback.is_null()); 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, CreateExistingFile) { 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/File 1.txt")); 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ResourceEntry src_entry; 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &src_entry)); 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 91a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CREATE_FILE, 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 96a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 97a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch test_util::RunBlockingPoolTask(); 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_EXISTS, error); 101a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch EXPECT_TRUE(close_callback.is_null()); 1027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1047dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, CreateNonExistingFile) { 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 1067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/not-exist.txt")); 1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 110a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 1137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch CREATE_FILE, 1143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 115a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 116a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 1177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch test_util::RunBlockingPoolTask(); 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1U, observer()->get_changed_paths().size()); 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(observer()->get_changed_paths().count(file_in_root.DirName())); 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 1237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 1247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 local_file_size; 125a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(0, local_file_size); // Should be an empty file. 1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 128a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback.is_null()); 129a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback.Run(); 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1U, 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) observer()->updated_local_ids().count(GetLocalId(file_in_root))); 1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, OpenOrCreateExistingFile) { 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/File 1.txt")); 1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ResourceEntry src_entry; 1387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &src_entry)); 1397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const int64 file_size = src_entry.file_info().size(); 1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 143a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_OR_CREATE_FILE, 1473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 148a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 149a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch test_util::RunBlockingPoolTask(); 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 15258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Notified because 'available offline' status of the existing file changes. 15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_EQ(1U, observer()->get_changed_paths().size()); 15458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EXPECT_TRUE(observer()->get_changed_paths().count(file_in_root.DirName())); 15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 local_file_size; 159a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(file_size, local_file_size); 1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 162a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback.is_null()); 163a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback.Run(); 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1U, observer()->updated_local_ids().count(src_entry.local_id())); 16558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ResourceEntry result_entry; 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &result_entry)); 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(result_entry.file_specific_info().cache_state().is_present()); 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(result_entry.file_specific_info().cache_state().is_dirty()); 1707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, OpenOrCreateNonExistingFile) { 1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/not-exist.txt")); 1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 1777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 178a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 1797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 1807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 1817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_OR_CREATE_FILE, 1823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 183a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 184a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch test_util::RunBlockingPoolTask(); 1867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 1887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 1897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 local_file_size; 190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 1917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(0, local_file_size); // Should be an empty file. 1927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 193a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback.is_null()); 194a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback.Run(); 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1U, 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) observer()->updated_local_ids().count(GetLocalId(file_in_root))); 1977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1997dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(OpenFileOperationTest, OpenFileTwice) { 2007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::FilePath file_in_root( 2017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FILE_PATH_LITERAL("drive/root/File 1.txt")); 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ResourceEntry src_entry; 2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(FILE_ERROR_OK, GetLocalResourceEntry(file_in_root, &src_entry)); 2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const int64 file_size = src_entry.file_info().size(); 2057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileError error = FILE_ERROR_FAILED; 2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::FilePath file_path; 208a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback; 2097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 2107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 2117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_FILE, 2123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 213a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 214a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback)); 2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch test_util::RunBlockingPoolTask(); 2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int64 local_file_size; 220a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(file_size, local_file_size); 2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Open again. 2247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch error = FILE_ERROR_FAILED; 225a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch base::Closure close_callback2; 2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch operation_->OpenFile( 2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch file_in_root, 2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch OPEN_FILE, 2293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string(), // mime_type 230a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch google_apis::test_util::CreateCopyResultCallback( 231a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch &error, &file_path, &close_callback2)); 2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch test_util::RunBlockingPoolTask(); 2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(FILE_ERROR_OK, error); 2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(file_path)); 236a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::GetFileSize(file_path, &local_file_size)); 2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(file_size, local_file_size); 2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 239a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback.is_null()); 240a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ASSERT_FALSE(close_callback2.is_null()); 241a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 242a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback.Run(); 243a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 244a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // There still remains a client opening the file, so it shouldn't be 245a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // uploaded yet. 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(observer()->updated_local_ids().empty()); 247a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 248a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch close_callback2.Run(); 249a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 250a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Here, all the clients close the file, so it should be uploaded then. 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(1U, observer()->updated_local_ids().count(src_entry.local_id())); 2527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace file_system 2557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace drive 256