Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/sync_file_system/local/local_file_sync_context.h" | 5 #include "chrome/browser/sync_file_system/local/local_file_sync_context.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| 11 #include "base/file_util.h" | 11 #include "base/file_util.h" |
| 12 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
| 13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 14 #include "base/platform_file.h" | 14 #include "base/platform_file.h" |
| 15 #include "base/single_thread_task_runner.h" | 15 #include "base/single_thread_task_runner.h" |
| 16 #include "base/stl_util.h" | 16 #include "base/stl_util.h" |
| 17 #include "base/threading/thread.h" | 17 #include "base/threading/thread.h" |
| 18 #include "chrome/browser/sync_file_system/local/canned_syncable_file_system.h" | 18 #include "chrome/browser/sync_file_system/local/canned_syncable_file_system.h" |
| 19 #include "chrome/browser/sync_file_system/local/local_file_change_tracker.h" | 19 #include "chrome/browser/sync_file_system/local/local_file_change_tracker.h" |
| 20 #include "chrome/browser/sync_file_system/local/sync_file_system_backend.h" | 20 #include "chrome/browser/sync_file_system/local/sync_file_system_backend.h" |
| 21 #include "chrome/browser/sync_file_system/sync_file_metadata.h" | 21 #include "chrome/browser/sync_file_system/sync_file_metadata.h" |
| 22 #include "chrome/browser/sync_file_system/sync_status_code.h" | 22 #include "chrome/browser/sync_file_system/sync_status_code.h" |
| 23 #include "chrome/browser/sync_file_system/syncable_file_system_util.h" | 23 #include "chrome/browser/sync_file_system/syncable_file_system_util.h" |
| 24 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
| 25 #include "webkit/browser/blob/mock_blob_url_request_context.h" | 25 #include "webkit/browser/blob/mock_blob_url_request_context.h" |
| 26 #include "webkit/browser/fileapi/file_system_context.h" | 26 #include "webkit/browser/fileapi/file_system_context.h" |
| 27 #include "webkit/browser/fileapi/file_system_operation_runner.h" | 27 #include "webkit/browser/fileapi/file_system_operation_runner.h" |
| 28 #include "webkit/browser/fileapi/isolated_context.h" | 28 #include "webkit/browser/fileapi/isolated_context.h" |
| 29 #include "webkit/common/blob/scoped_file.h" | |
| 29 | 30 |
| 30 #define FPL FILE_PATH_LITERAL | 31 #define FPL FILE_PATH_LITERAL |
| 31 | 32 |
| 32 using fileapi::FileSystemContext; | 33 using fileapi::FileSystemContext; |
| 33 using fileapi::FileSystemURL; | 34 using fileapi::FileSystemURL; |
| 34 using fileapi::FileSystemURLSet; | 35 using fileapi::FileSystemURLSet; |
| 35 | 36 |
| 36 // This tests LocalFileSyncContext behavior in multi-thread / | 37 // This tests LocalFileSyncContext behavior in multi-thread / |
| 37 // multi-file-system-context environment. | 38 // multi-file-system-context environment. |
| 38 // Basic combined tests (single-thread / single-file-system-context) | 39 // Basic combined tests (single-thread / single-file-system-context) |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 50 protected: | 51 protected: |
| 51 LocalFileSyncContextTest() | 52 LocalFileSyncContextTest() |
| 52 : status_(SYNC_FILE_ERROR_FAILED), | 53 : status_(SYNC_FILE_ERROR_FAILED), |
| 53 file_error_(base::PLATFORM_FILE_ERROR_FAILED), | 54 file_error_(base::PLATFORM_FILE_ERROR_FAILED), |
| 54 async_modify_finished_(false), | 55 async_modify_finished_(false), |
| 55 has_inflight_prepare_for_sync_(false) {} | 56 has_inflight_prepare_for_sync_(false) {} |
| 56 | 57 |
| 57 virtual void SetUp() OVERRIDE { | 58 virtual void SetUp() OVERRIDE { |
| 58 RegisterSyncableFileSystem(); | 59 RegisterSyncableFileSystem(); |
| 59 | 60 |
| 61 ASSERT_TRUE(dir_.CreateUniqueTempDir()); | |
| 62 | |
| 60 io_thread_.reset(new base::Thread("Thread_IO")); | 63 io_thread_.reset(new base::Thread("Thread_IO")); |
| 61 io_thread_->StartWithOptions( | 64 io_thread_->StartWithOptions( |
| 62 base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); | 65 base::Thread::Options(base::MessageLoop::TYPE_IO, 0)); |
| 63 | 66 |
| 64 file_thread_.reset(new base::Thread("Thread_File")); | 67 file_thread_.reset(new base::Thread("Thread_File")); |
| 65 file_thread_->Start(); | 68 file_thread_->Start(); |
| 66 | 69 |
| 67 ui_task_runner_ = base::MessageLoop::current()->message_loop_proxy(); | 70 ui_task_runner_ = base::MessageLoop::current()->message_loop_proxy(); |
| 68 io_task_runner_ = io_thread_->message_loop_proxy(); | 71 io_task_runner_ = io_thread_->message_loop_proxy(); |
| 69 file_task_runner_ = file_thread_->message_loop_proxy(); | 72 file_task_runner_ = file_thread_->message_loop_proxy(); |
| 70 } | 73 } |
| 71 | 74 |
| 72 virtual void TearDown() OVERRIDE { | 75 virtual void TearDown() OVERRIDE { |
| 73 RevokeSyncableFileSystem(); | 76 RevokeSyncableFileSystem(); |
| 74 io_thread_->Stop(); | 77 io_thread_->Stop(); |
| 75 file_thread_->Stop(); | 78 file_thread_->Stop(); |
| 76 } | 79 } |
| 77 | 80 |
| 78 void StartPrepareForSync(FileSystemContext* file_system_context, | 81 void StartPrepareForSync(FileSystemContext* file_system_context, |
| 79 const FileSystemURL& url, | 82 const FileSystemURL& url, |
| 83 LocalFileSyncContext::SyncMode sync_mode, | |
| 80 SyncFileMetadata* metadata, | 84 SyncFileMetadata* metadata, |
| 81 FileChangeList* changes) { | 85 FileChangeList* changes, |
| 86 webkit_blob::ScopedFile* snapshot) { | |
| 82 ASSERT_TRUE(changes != NULL); | 87 ASSERT_TRUE(changes != NULL); |
| 83 ASSERT_FALSE(has_inflight_prepare_for_sync_); | 88 ASSERT_FALSE(has_inflight_prepare_for_sync_); |
| 84 status_ = SYNC_STATUS_UNKNOWN; | 89 status_ = SYNC_STATUS_UNKNOWN; |
| 85 has_inflight_prepare_for_sync_ = true; | 90 has_inflight_prepare_for_sync_ = true; |
| 86 sync_context_->PrepareForSync( | 91 sync_context_->PrepareForSync( |
| 87 file_system_context, | 92 file_system_context, |
| 88 url, | 93 url, |
| 89 LocalFileSyncContext::SYNC_EXCLUSIVE, | 94 sync_mode, |
| 90 base::Bind(&LocalFileSyncContextTest::DidPrepareForSync, | 95 base::Bind(&LocalFileSyncContextTest::DidPrepareForSync, |
| 91 base::Unretained(this), metadata, changes)); | 96 base::Unretained(this), metadata, changes, snapshot)); |
| 92 } | 97 } |
| 93 | 98 |
| 94 SyncStatusCode PrepareForSync(FileSystemContext* file_system_context, | 99 SyncStatusCode PrepareForSync(FileSystemContext* file_system_context, |
| 95 const FileSystemURL& url, | 100 const FileSystemURL& url, |
| 101 LocalFileSyncContext::SyncMode sync_mode, | |
| 96 SyncFileMetadata* metadata, | 102 SyncFileMetadata* metadata, |
| 97 FileChangeList* changes) { | 103 FileChangeList* changes, |
| 98 StartPrepareForSync(file_system_context, url, metadata, changes); | 104 webkit_blob::ScopedFile* snapshot) { |
| 105 StartPrepareForSync(file_system_context, url, sync_mode, | |
| 106 metadata, changes, snapshot); | |
| 99 base::MessageLoop::current()->Run(); | 107 base::MessageLoop::current()->Run(); |
| 100 return status_; | 108 return status_; |
| 101 } | 109 } |
| 102 | 110 |
| 103 base::Closure GetPrepareForSyncClosure(FileSystemContext* file_system_context, | 111 base::Closure GetPrepareForSyncClosure( |
| 104 const FileSystemURL& url, | 112 FileSystemContext* file_system_context, |
| 105 SyncFileMetadata* metadata, | 113 const FileSystemURL& url, |
| 106 FileChangeList* changes) { | 114 LocalFileSyncContext::SyncMode sync_mode, |
| 115 SyncFileMetadata* metadata, | |
| 116 FileChangeList* changes, | |
| 117 webkit_blob::ScopedFile* snapshot) { | |
| 107 return base::Bind(&LocalFileSyncContextTest::StartPrepareForSync, | 118 return base::Bind(&LocalFileSyncContextTest::StartPrepareForSync, |
| 108 base::Unretained(this), | 119 base::Unretained(this), |
| 109 base::Unretained(file_system_context), | 120 base::Unretained(file_system_context), |
| 110 url, metadata, changes); | 121 url, sync_mode, metadata, changes, snapshot); |
| 111 } | 122 } |
| 112 | 123 |
| 113 void DidPrepareForSync(SyncFileMetadata* metadata_out, | 124 void DidPrepareForSync(SyncFileMetadata* metadata_out, |
| 114 FileChangeList* changes_out, | 125 FileChangeList* changes_out, |
| 126 webkit_blob::ScopedFile* snapshot_out, | |
| 115 SyncStatusCode status, | 127 SyncStatusCode status, |
| 116 const LocalFileSyncInfo& sync_file_info) { | 128 const LocalFileSyncInfo& sync_file_info, |
| 129 scoped_ptr<webkit_blob::ScopedFile> snapshot) { | |
| 117 ASSERT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); | 130 ASSERT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); |
| 118 has_inflight_prepare_for_sync_ = false; | 131 has_inflight_prepare_for_sync_ = false; |
| 119 status_ = status; | 132 status_ = status; |
| 120 *metadata_out = sync_file_info.metadata; | 133 *metadata_out = sync_file_info.metadata; |
| 121 *changes_out = sync_file_info.changes; | 134 *changes_out = sync_file_info.changes; |
| 135 if (snapshot_out && snapshot) | |
| 136 *snapshot_out = snapshot->Pass(); | |
| 122 base::MessageLoop::current()->Quit(); | 137 base::MessageLoop::current()->Quit(); |
| 123 } | 138 } |
| 124 | 139 |
| 125 SyncStatusCode ApplyRemoteChange(FileSystemContext* file_system_context, | 140 SyncStatusCode ApplyRemoteChange(FileSystemContext* file_system_context, |
| 126 const FileChange& change, | 141 const FileChange& change, |
| 127 const base::FilePath& local_path, | 142 const base::FilePath& local_path, |
| 128 const FileSystemURL& url, | 143 const FileSystemURL& url, |
| 129 SyncFileType expected_file_type) { | 144 SyncFileType expected_file_type) { |
| 130 SCOPED_TRACE(testing::Message() << "ApplyChange for " << | 145 SCOPED_TRACE(testing::Message() << "ApplyChange for " << |
| 131 url.DebugString()); | 146 url.DebugString()); |
| 132 | 147 |
| 133 // First we should call PrepareForSync to disable writing. | 148 // First we should call PrepareForSync to disable writing. |
| 134 SyncFileMetadata metadata; | 149 SyncFileMetadata metadata; |
| 135 FileChangeList changes; | 150 FileChangeList changes; |
| 136 EXPECT_EQ(SYNC_STATUS_OK, | 151 EXPECT_EQ(SYNC_STATUS_OK, |
| 137 PrepareForSync(file_system_context, url, &metadata, &changes)); | 152 PrepareForSync(file_system_context, url, |
| 153 LocalFileSyncContext::SYNC_EXCLUSIVE, | |
| 154 &metadata, &changes, NULL)); | |
| 138 EXPECT_EQ(expected_file_type, metadata.file_type); | 155 EXPECT_EQ(expected_file_type, metadata.file_type); |
| 139 | 156 |
| 140 status_ = SYNC_STATUS_UNKNOWN; | 157 status_ = SYNC_STATUS_UNKNOWN; |
| 141 sync_context_->ApplyRemoteChange( | 158 sync_context_->ApplyRemoteChange( |
| 142 file_system_context, change, local_path, url, | 159 file_system_context, change, local_path, url, |
| 143 base::Bind(&LocalFileSyncContextTest::DidApplyRemoteChange, | 160 base::Bind(&LocalFileSyncContextTest::DidApplyRemoteChange, |
| 144 base::Unretained(this))); | 161 base::Unretained(this))); |
| 145 base::MessageLoop::current()->Run(); | 162 base::MessageLoop::current()->Run(); |
| 146 return status_; | 163 return status_; |
| 147 } | 164 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 202 base::MessageLoop::current()->RunUntilIdle(); | 219 base::MessageLoop::current()->RunUntilIdle(); |
| 203 } | 220 } |
| 204 | 221 |
| 205 void PrepareForSync_Basic(LocalFileSyncContext::SyncMode sync_mode, | 222 void PrepareForSync_Basic(LocalFileSyncContext::SyncMode sync_mode, |
| 206 SyncStatusCode simulate_sync_finish_status) { | 223 SyncStatusCode simulate_sync_finish_status) { |
| 207 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 224 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 208 io_task_runner_.get(), | 225 io_task_runner_.get(), |
| 209 file_task_runner_.get()); | 226 file_task_runner_.get()); |
| 210 file_system.SetUp(); | 227 file_system.SetUp(); |
| 211 sync_context_ = new LocalFileSyncContext( | 228 sync_context_ = new LocalFileSyncContext( |
| 212 ui_task_runner_.get(), io_task_runner_.get()); | 229 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 213 ASSERT_EQ(SYNC_STATUS_OK, | 230 ASSERT_EQ(SYNC_STATUS_OK, |
| 214 file_system.MaybeInitializeFileSystemContext( | 231 file_system.MaybeInitializeFileSystemContext( |
| 215 sync_context_.get())); | 232 sync_context_.get())); |
| 216 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 233 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 217 | 234 |
| 218 const FileSystemURL kFile(file_system.URL("file")); | 235 const FileSystemURL kFile(file_system.URL("file")); |
| 219 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kFile)); | 236 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kFile)); |
| 220 | 237 |
| 221 SyncFileMetadata metadata; | 238 SyncFileMetadata metadata; |
| 222 FileChangeList changes; | 239 FileChangeList changes; |
| 223 EXPECT_EQ(SYNC_STATUS_OK, | 240 EXPECT_EQ(SYNC_STATUS_OK, |
| 224 PrepareForSync(file_system.file_system_context(), kFile, | 241 PrepareForSync(file_system.file_system_context(), kFile, |
| 225 &metadata, &changes)); | 242 sync_mode, &metadata, &changes, NULL)); |
| 226 EXPECT_EQ(1U, changes.size()); | 243 EXPECT_EQ(1U, changes.size()); |
| 227 EXPECT_TRUE(changes.list().back().IsFile()); | 244 EXPECT_TRUE(changes.list().back().IsFile()); |
| 228 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 245 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 229 | 246 |
| 230 // We should see the same set of changes. | 247 // We should see the same set of changes. |
| 231 file_system.GetChangesForURLInTracker(kFile, &changes); | 248 file_system.GetChangesForURLInTracker(kFile, &changes); |
| 232 EXPECT_EQ(1U, changes.size()); | 249 EXPECT_EQ(1U, changes.size()); |
| 233 EXPECT_TRUE(changes.list().back().IsFile()); | 250 EXPECT_TRUE(changes.list().back().IsFile()); |
| 234 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 251 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 235 | 252 |
| 236 SimulateFinishSync(file_system.file_system_context(), kFile, | 253 SimulateFinishSync(file_system.file_system_context(), kFile, |
| 237 simulate_sync_finish_status); | 254 simulate_sync_finish_status); |
| 238 | 255 |
| 239 file_system.GetChangesForURLInTracker(kFile, &changes); | 256 file_system.GetChangesForURLInTracker(kFile, &changes); |
| 240 if (simulate_sync_finish_status == SYNC_STATUS_OK) { | 257 if (simulate_sync_finish_status == SYNC_STATUS_OK) { |
| 241 // The change's cleared. | 258 // The change's cleared. |
| 242 EXPECT_TRUE(changes.empty()); | 259 EXPECT_TRUE(changes.empty()); |
| 243 } else { | 260 } else { |
| 244 EXPECT_EQ(1U, changes.size()); | 261 EXPECT_EQ(1U, changes.size()); |
| 245 EXPECT_TRUE(changes.list().back().IsFile()); | 262 EXPECT_TRUE(changes.list().back().IsFile()); |
| 246 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 263 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 247 } | 264 } |
| 248 | 265 |
| 249 sync_context_->ShutdownOnUIThread(); | 266 sync_context_->ShutdownOnUIThread(); |
| 250 sync_context_ = NULL; | 267 sync_context_ = NULL; |
| 251 | 268 |
| 252 file_system.TearDown(); | 269 file_system.TearDown(); |
| 253 } | 270 } |
| 254 | 271 |
| 272 void PrepareForSync_WriteDuringSync( | |
| 273 LocalFileSyncContext::SyncMode sync_mode) { | |
| 274 CannedSyncableFileSystem file_system(GURL(kOrigin1), | |
| 275 io_task_runner_.get(), | |
| 276 file_task_runner_.get()); | |
|
nhiroki
2013/09/17 08:18:48
indent-nit
kinuko
2013/09/17 11:04:43
Done.
| |
| 277 file_system.SetUp(); | |
| 278 sync_context_ = new LocalFileSyncContext( | |
| 279 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); | |
| 280 ASSERT_EQ(SYNC_STATUS_OK, | |
| 281 file_system.MaybeInitializeFileSystemContext( | |
| 282 sync_context_.get())); | |
| 283 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | |
| 284 | |
| 285 const FileSystemURL kFile(file_system.URL("file")); | |
| 286 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kFile)); | |
| 287 | |
| 288 SyncFileMetadata metadata; | |
| 289 FileChangeList changes; | |
| 290 webkit_blob::ScopedFile snapshot; | |
| 291 EXPECT_EQ(SYNC_STATUS_OK, | |
| 292 PrepareForSync(file_system.file_system_context(), kFile, | |
| 293 sync_mode, &metadata, &changes, &snapshot)); | |
| 294 EXPECT_EQ(1U, changes.size()); | |
| 295 EXPECT_TRUE(changes.list().back().IsFile()); | |
| 296 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | |
| 297 | |
| 298 EXPECT_EQ(sync_mode == LocalFileSyncContext::SYNC_SNAPSHOT, | |
| 299 !snapshot.path().empty()); | |
| 300 | |
| 301 // Tracker keeps same set of changes. | |
| 302 file_system.GetChangesForURLInTracker(kFile, &changes); | |
| 303 EXPECT_EQ(1U, changes.size()); | |
| 304 EXPECT_TRUE(changes.list().back().IsFile()); | |
| 305 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | |
| 306 | |
| 307 StartModifyFileOnIOThread(&file_system, kFile); | |
| 308 | |
| 309 if (sync_mode == LocalFileSyncContext::SYNC_SNAPSHOT) { | |
| 310 // Write should succeed. | |
| 311 EXPECT_EQ(base::PLATFORM_FILE_OK, WaitUntilModifyFileIsDone()); | |
| 312 } else { | |
| 313 base::MessageLoop::current()->RunUntilIdle(); | |
| 314 EXPECT_FALSE(async_modify_finished_); | |
| 315 } | |
| 316 | |
| 317 SimulateFinishSync(file_system.file_system_context(), kFile, | |
| 318 SYNC_STATUS_OK); | |
| 319 | |
| 320 EXPECT_EQ(base::PLATFORM_FILE_OK, WaitUntilModifyFileIsDone()); | |
| 321 | |
| 322 // Sync succeeded, but the other change that was made during or | |
| 323 // after sync is recorded. | |
| 324 file_system.GetChangesForURLInTracker(kFile, &changes); | |
| 325 EXPECT_EQ(1U, changes.size()); | |
| 326 EXPECT_TRUE(changes.list().back().IsFile()); | |
| 327 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | |
| 328 | |
| 329 sync_context_->ShutdownOnUIThread(); | |
| 330 sync_context_ = NULL; | |
| 331 | |
| 332 file_system.TearDown(); | |
| 333 } | |
| 334 | |
| 255 ScopedEnableSyncFSDirectoryOperation enable_directory_operation_; | 335 ScopedEnableSyncFSDirectoryOperation enable_directory_operation_; |
| 256 | 336 |
| 337 base::ScopedTempDir dir_; | |
| 338 | |
| 257 // These need to remain until the very end. | 339 // These need to remain until the very end. |
| 258 scoped_ptr<base::Thread> io_thread_; | 340 scoped_ptr<base::Thread> io_thread_; |
| 259 scoped_ptr<base::Thread> file_thread_; | 341 scoped_ptr<base::Thread> file_thread_; |
| 260 base::MessageLoop loop_; | 342 base::MessageLoop loop_; |
| 261 | 343 |
| 262 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; | 344 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; |
| 263 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; | 345 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; |
| 264 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; | 346 scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; |
| 265 | 347 |
| 266 scoped_refptr<LocalFileSyncContext> sync_context_; | 348 scoped_refptr<LocalFileSyncContext> sync_context_; |
| 267 | 349 |
| 268 SyncStatusCode status_; | 350 SyncStatusCode status_; |
| 269 base::PlatformFileError file_error_; | 351 base::PlatformFileError file_error_; |
| 270 bool async_modify_finished_; | 352 bool async_modify_finished_; |
| 271 bool has_inflight_prepare_for_sync_; | 353 bool has_inflight_prepare_for_sync_; |
| 272 }; | 354 }; |
| 273 | 355 |
| 274 TEST_F(LocalFileSyncContextTest, ConstructAndDestruct) { | 356 TEST_F(LocalFileSyncContextTest, ConstructAndDestruct) { |
| 275 sync_context_ = | 357 sync_context_ = |
| 276 new LocalFileSyncContext(ui_task_runner_.get(), io_task_runner_.get()); | 358 new LocalFileSyncContext( |
| 359 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); | |
| 277 sync_context_->ShutdownOnUIThread(); | 360 sync_context_->ShutdownOnUIThread(); |
| 278 } | 361 } |
| 279 | 362 |
| 280 TEST_F(LocalFileSyncContextTest, InitializeFileSystemContext) { | 363 TEST_F(LocalFileSyncContextTest, InitializeFileSystemContext) { |
| 281 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 364 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 282 io_task_runner_.get(), | 365 io_task_runner_.get(), |
| 283 file_task_runner_.get()); | 366 file_task_runner_.get()); |
| 284 file_system.SetUp(); | 367 file_system.SetUp(); |
| 285 | 368 |
| 286 sync_context_ = | 369 sync_context_ = new LocalFileSyncContext( |
| 287 new LocalFileSyncContext(ui_task_runner_.get(), io_task_runner_.get()); | 370 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 288 | 371 |
| 289 // Initializes file_system using |sync_context_|. | 372 // Initializes file_system using |sync_context_|. |
| 290 EXPECT_EQ(SYNC_STATUS_OK, | 373 EXPECT_EQ(SYNC_STATUS_OK, |
| 291 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 374 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 292 | 375 |
| 293 // Make sure everything's set up for file_system to be able to handle | 376 // Make sure everything's set up for file_system to be able to handle |
| 294 // syncable file system operations. | 377 // syncable file system operations. |
| 295 EXPECT_TRUE(file_system.backend()->sync_context() != NULL); | 378 EXPECT_TRUE(file_system.backend()->sync_context() != NULL); |
| 296 EXPECT_TRUE(file_system.backend()->change_tracker() != NULL); | 379 EXPECT_TRUE(file_system.backend()->change_tracker() != NULL); |
| 297 EXPECT_EQ(sync_context_.get(), file_system.backend()->sync_context()); | 380 EXPECT_EQ(sync_context_.get(), file_system.backend()->sync_context()); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 321 TEST_F(LocalFileSyncContextTest, MultipleFileSystemContexts) { | 404 TEST_F(LocalFileSyncContextTest, MultipleFileSystemContexts) { |
| 322 CannedSyncableFileSystem file_system1(GURL(kOrigin1), | 405 CannedSyncableFileSystem file_system1(GURL(kOrigin1), |
| 323 io_task_runner_.get(), | 406 io_task_runner_.get(), |
| 324 file_task_runner_.get()); | 407 file_task_runner_.get()); |
| 325 CannedSyncableFileSystem file_system2(GURL(kOrigin2), | 408 CannedSyncableFileSystem file_system2(GURL(kOrigin2), |
| 326 io_task_runner_.get(), | 409 io_task_runner_.get(), |
| 327 file_task_runner_.get()); | 410 file_task_runner_.get()); |
| 328 file_system1.SetUp(); | 411 file_system1.SetUp(); |
| 329 file_system2.SetUp(); | 412 file_system2.SetUp(); |
| 330 | 413 |
| 331 sync_context_ = | 414 sync_context_ = new LocalFileSyncContext( |
| 332 new LocalFileSyncContext(ui_task_runner_.get(), io_task_runner_.get()); | 415 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 333 | 416 |
| 334 // Initializes file_system1 and file_system2. | 417 // Initializes file_system1 and file_system2. |
| 335 EXPECT_EQ(SYNC_STATUS_OK, | 418 EXPECT_EQ(SYNC_STATUS_OK, |
| 336 file_system1.MaybeInitializeFileSystemContext(sync_context_.get())); | 419 file_system1.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 337 EXPECT_EQ(SYNC_STATUS_OK, | 420 EXPECT_EQ(SYNC_STATUS_OK, |
| 338 file_system2.MaybeInitializeFileSystemContext(sync_context_.get())); | 421 file_system2.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 339 | 422 |
| 340 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system1.OpenFileSystem()); | 423 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system1.OpenFileSystem()); |
| 341 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system2.OpenFileSystem()); | 424 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system2.OpenFileSystem()); |
| 342 | 425 |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 369 // file_system2's tracker now must have the change for kURL2. | 452 // file_system2's tracker now must have the change for kURL2. |
| 370 urls.clear(); | 453 urls.clear(); |
| 371 file_system2.GetChangedURLsInTracker(&urls); | 454 file_system2.GetChangedURLsInTracker(&urls); |
| 372 ASSERT_EQ(1U, urls.size()); | 455 ASSERT_EQ(1U, urls.size()); |
| 373 EXPECT_TRUE(ContainsKey(urls, kURL2)); | 456 EXPECT_TRUE(ContainsKey(urls, kURL2)); |
| 374 | 457 |
| 375 SyncFileMetadata metadata; | 458 SyncFileMetadata metadata; |
| 376 FileChangeList changes; | 459 FileChangeList changes; |
| 377 EXPECT_EQ(SYNC_STATUS_OK, | 460 EXPECT_EQ(SYNC_STATUS_OK, |
| 378 PrepareForSync(file_system1.file_system_context(), kURL1, | 461 PrepareForSync(file_system1.file_system_context(), kURL1, |
| 379 &metadata, &changes)); | 462 LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 463 &metadata, &changes, NULL)); | |
| 380 EXPECT_EQ(1U, changes.size()); | 464 EXPECT_EQ(1U, changes.size()); |
| 381 EXPECT_TRUE(changes.list().back().IsFile()); | 465 EXPECT_TRUE(changes.list().back().IsFile()); |
| 382 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 466 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 383 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); | 467 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); |
| 384 EXPECT_EQ(0, metadata.size); | 468 EXPECT_EQ(0, metadata.size); |
| 385 | 469 |
| 386 changes.clear(); | 470 changes.clear(); |
| 387 EXPECT_EQ(SYNC_STATUS_OK, | 471 EXPECT_EQ(SYNC_STATUS_OK, |
| 388 PrepareForSync(file_system2.file_system_context(), kURL2, | 472 PrepareForSync(file_system2.file_system_context(), kURL2, |
| 389 &metadata, &changes)); | 473 LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 474 &metadata, &changes, NULL)); | |
| 390 EXPECT_EQ(1U, changes.size()); | 475 EXPECT_EQ(1U, changes.size()); |
| 391 EXPECT_FALSE(changes.list().back().IsFile()); | 476 EXPECT_FALSE(changes.list().back().IsFile()); |
| 392 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 477 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 393 EXPECT_EQ(SYNC_FILE_TYPE_DIRECTORY, metadata.file_type); | 478 EXPECT_EQ(SYNC_FILE_TYPE_DIRECTORY, metadata.file_type); |
| 394 EXPECT_EQ(0, metadata.size); | 479 EXPECT_EQ(0, metadata.size); |
| 395 | 480 |
| 396 sync_context_->ShutdownOnUIThread(); | 481 sync_context_->ShutdownOnUIThread(); |
| 397 sync_context_ = NULL; | 482 sync_context_ = NULL; |
| 398 | 483 |
| 399 file_system1.TearDown(); | 484 file_system1.TearDown(); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 413 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncFailure_Exclusive) { | 498 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncFailure_Exclusive) { |
| 414 PrepareForSync_Basic(LocalFileSyncContext::SYNC_EXCLUSIVE, | 499 PrepareForSync_Basic(LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 415 SYNC_STATUS_FAILED); | 500 SYNC_STATUS_FAILED); |
| 416 } | 501 } |
| 417 | 502 |
| 418 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncFailure_Snapshot) { | 503 TEST_F(LocalFileSyncContextTest, PrepareSync_SyncFailure_Snapshot) { |
| 419 PrepareForSync_Basic(LocalFileSyncContext::SYNC_SNAPSHOT, | 504 PrepareForSync_Basic(LocalFileSyncContext::SYNC_SNAPSHOT, |
| 420 SYNC_STATUS_FAILED); | 505 SYNC_STATUS_FAILED); |
| 421 } | 506 } |
| 422 | 507 |
| 508 TEST_F(LocalFileSyncContextTest, PrepareSync_WriteDuringSync_Exclusive) { | |
| 509 PrepareForSync_WriteDuringSync(LocalFileSyncContext::SYNC_EXCLUSIVE); | |
| 510 } | |
| 511 | |
| 512 TEST_F(LocalFileSyncContextTest, PrepareSync_WriteDuringSync_Snapshot) { | |
| 513 PrepareForSync_WriteDuringSync(LocalFileSyncContext::SYNC_SNAPSHOT); | |
| 514 } | |
| 515 | |
| 423 // LocalFileSyncContextTest.PrepareSyncWhileWriting is flaky on android. | 516 // LocalFileSyncContextTest.PrepareSyncWhileWriting is flaky on android. |
| 424 // http://crbug.com/239793 | 517 // http://crbug.com/239793 |
| 425 #if defined(OS_ANDROID) | 518 #if defined(OS_ANDROID) |
| 426 #define MAYBE_PrepareSyncWhileWriting DISABLED_PrepareSyncWhileWriting | 519 #define MAYBE_PrepareSyncWhileWriting DISABLED_PrepareSyncWhileWriting |
| 427 #else | 520 #else |
| 428 #define MAYBE_PrepareSyncWhileWriting PrepareSyncWhileWriting | 521 #define MAYBE_PrepareSyncWhileWriting PrepareSyncWhileWriting |
| 429 #endif | 522 #endif |
| 430 TEST_F(LocalFileSyncContextTest, MAYBE_PrepareSyncWhileWriting) { | 523 TEST_F(LocalFileSyncContextTest, MAYBE_PrepareSyncWhileWriting) { |
| 431 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 524 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 432 io_task_runner_.get(), | 525 io_task_runner_.get(), |
| 433 file_task_runner_.get()); | 526 file_task_runner_.get()); |
| 434 file_system.SetUp(); | 527 file_system.SetUp(); |
| 435 sync_context_ = | 528 sync_context_ = new LocalFileSyncContext( |
| 436 new LocalFileSyncContext(ui_task_runner_.get(), io_task_runner_.get()); | 529 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 437 EXPECT_EQ(SYNC_STATUS_OK, | 530 EXPECT_EQ(SYNC_STATUS_OK, |
| 438 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 531 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 439 | 532 |
| 440 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 533 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 441 | 534 |
| 442 const FileSystemURL kURL1(file_system.URL("foo")); | 535 const FileSystemURL kURL1(file_system.URL("foo")); |
| 443 | 536 |
| 444 // Creates a file in file_system. | 537 // Creates a file in file_system. |
| 445 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kURL1)); | 538 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.CreateFile(kURL1)); |
| 446 | 539 |
| 447 // Kick file write on IO thread. | 540 // Kick file write on IO thread. |
| 448 StartModifyFileOnIOThread(&file_system, kURL1); | 541 StartModifyFileOnIOThread(&file_system, kURL1); |
| 449 | 542 |
| 450 // Until the operation finishes PrepareForSync should return BUSY error. | 543 // Until the operation finishes PrepareForSync should return BUSY error. |
| 451 SyncFileMetadata metadata; | 544 SyncFileMetadata metadata; |
| 452 metadata.file_type = SYNC_FILE_TYPE_UNKNOWN; | 545 metadata.file_type = SYNC_FILE_TYPE_UNKNOWN; |
| 453 FileChangeList changes; | 546 FileChangeList changes; |
| 454 EXPECT_EQ(SYNC_STATUS_FILE_BUSY, | 547 EXPECT_EQ(SYNC_STATUS_FILE_BUSY, |
| 455 PrepareForSync(file_system.file_system_context(), | 548 PrepareForSync(file_system.file_system_context(), kURL1, |
| 456 kURL1, &metadata, &changes)); | 549 LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 550 &metadata, &changes, NULL)); | |
| 457 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); | 551 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); |
| 458 | 552 |
| 459 // Register PrepareForSync method to be invoked when kURL1 becomes | 553 // Register PrepareForSync method to be invoked when kURL1 becomes |
| 460 // syncable. (Actually this may be done after all operations are done | 554 // syncable. (Actually this may be done after all operations are done |
| 461 // on IO thread in this test.) | 555 // on IO thread in this test.) |
| 462 metadata.file_type = SYNC_FILE_TYPE_UNKNOWN; | 556 metadata.file_type = SYNC_FILE_TYPE_UNKNOWN; |
| 463 changes.clear(); | 557 changes.clear(); |
| 464 sync_context_->RegisterURLForWaitingSync( | 558 sync_context_->RegisterURLForWaitingSync( |
| 465 kURL1, GetPrepareForSyncClosure(file_system.file_system_context(), | 559 kURL1, GetPrepareForSyncClosure(file_system.file_system_context(), kURL1, |
| 466 kURL1, &metadata, &changes)); | 560 LocalFileSyncContext::SYNC_EXCLUSIVE, |
| 561 &metadata, &changes, NULL)); | |
| 467 | 562 |
| 468 // Wait for the completion. | 563 // Wait for the completion. |
| 469 EXPECT_EQ(base::PLATFORM_FILE_OK, WaitUntilModifyFileIsDone()); | 564 EXPECT_EQ(base::PLATFORM_FILE_OK, WaitUntilModifyFileIsDone()); |
| 470 | 565 |
| 471 // The PrepareForSync must have been started; wait until DidPrepareForSync | 566 // The PrepareForSync must have been started; wait until DidPrepareForSync |
| 472 // is done. | 567 // is done. |
| 473 base::MessageLoop::current()->Run(); | 568 base::MessageLoop::current()->Run(); |
| 474 ASSERT_FALSE(has_inflight_prepare_for_sync_); | 569 ASSERT_FALSE(has_inflight_prepare_for_sync_); |
| 475 | 570 |
| 476 // Now PrepareForSync should have run and returned OK. | 571 // Now PrepareForSync should have run and returned OK. |
| 477 EXPECT_EQ(SYNC_STATUS_OK, status_); | 572 EXPECT_EQ(SYNC_STATUS_OK, status_); |
| 478 EXPECT_EQ(1U, changes.size()); | 573 EXPECT_EQ(1U, changes.size()); |
| 479 EXPECT_TRUE(changes.list().back().IsFile()); | 574 EXPECT_TRUE(changes.list().back().IsFile()); |
| 480 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 575 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 481 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); | 576 EXPECT_EQ(SYNC_FILE_TYPE_FILE, metadata.file_type); |
| 482 EXPECT_EQ(1, metadata.size); | 577 EXPECT_EQ(1, metadata.size); |
| 483 | 578 |
| 484 sync_context_->ShutdownOnUIThread(); | 579 sync_context_->ShutdownOnUIThread(); |
| 485 sync_context_ = NULL; | 580 sync_context_ = NULL; |
| 486 file_system.TearDown(); | 581 file_system.TearDown(); |
| 487 } | 582 } |
| 488 | 583 |
| 489 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForDeletion) { | 584 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForDeletion) { |
| 490 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 585 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 491 io_task_runner_.get(), | 586 io_task_runner_.get(), |
| 492 file_task_runner_.get()); | 587 file_task_runner_.get()); |
| 493 file_system.SetUp(); | 588 file_system.SetUp(); |
| 494 | 589 |
| 495 sync_context_ = | 590 sync_context_ = new LocalFileSyncContext( |
| 496 new LocalFileSyncContext(ui_task_runner_.get(), io_task_runner_.get()); | 591 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 497 ASSERT_EQ(SYNC_STATUS_OK, | 592 ASSERT_EQ(SYNC_STATUS_OK, |
| 498 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 593 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 499 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 594 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 500 | 595 |
| 501 // Record the initial usage (likely 0). | 596 // Record the initial usage (likely 0). |
| 502 int64 initial_usage = -1; | 597 int64 initial_usage = -1; |
| 503 int64 quota = -1; | 598 int64 quota = -1; |
| 504 EXPECT_EQ(quota::kQuotaStatusOk, | 599 EXPECT_EQ(quota::kQuotaStatusOk, |
| 505 file_system.GetUsageAndQuota(&initial_usage, "a)); | 600 file_system.GetUsageAndQuota(&initial_usage, "a)); |
| 506 | 601 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 574 | 669 |
| 575 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForAddOrUpdate) { | 670 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForAddOrUpdate) { |
| 576 base::ScopedTempDir temp_dir; | 671 base::ScopedTempDir temp_dir; |
| 577 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 672 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 578 | 673 |
| 579 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 674 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 580 io_task_runner_.get(), | 675 io_task_runner_.get(), |
| 581 file_task_runner_.get()); | 676 file_task_runner_.get()); |
| 582 file_system.SetUp(); | 677 file_system.SetUp(); |
| 583 | 678 |
| 584 sync_context_ = | 679 sync_context_ = new LocalFileSyncContext( |
| 585 new LocalFileSyncContext(ui_task_runner_.get(), io_task_runner_.get()); | 680 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 586 ASSERT_EQ(SYNC_STATUS_OK, | 681 ASSERT_EQ(SYNC_STATUS_OK, |
| 587 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 682 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 588 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 683 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 589 | 684 |
| 590 const FileSystemURL kFile1(file_system.URL("file1")); | 685 const FileSystemURL kFile1(file_system.URL("file1")); |
| 591 const FileSystemURL kFile2(file_system.URL("file2")); | 686 const FileSystemURL kFile2(file_system.URL("file2")); |
| 592 const FileSystemURL kDir(file_system.URL("dir")); | 687 const FileSystemURL kDir(file_system.URL("dir")); |
| 593 | 688 |
| 594 const char kTestFileData0[] = "0123456789"; | 689 const char kTestFileData0[] = "0123456789"; |
| 595 const char kTestFileData1[] = "Lorem ipsum!"; | 690 const char kTestFileData1[] = "Lorem ipsum!"; |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 723 | 818 |
| 724 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForAddOrUpdate_NoParent) { | 819 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForAddOrUpdate_NoParent) { |
| 725 base::ScopedTempDir temp_dir; | 820 base::ScopedTempDir temp_dir; |
| 726 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 821 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 727 | 822 |
| 728 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 823 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 729 io_task_runner_.get(), | 824 io_task_runner_.get(), |
| 730 file_task_runner_.get()); | 825 file_task_runner_.get()); |
| 731 file_system.SetUp(); | 826 file_system.SetUp(); |
| 732 | 827 |
| 733 sync_context_ = | 828 sync_context_ = new LocalFileSyncContext( |
| 734 new LocalFileSyncContext(ui_task_runner_.get(), io_task_runner_.get()); | 829 dir_.path(), ui_task_runner_.get(), io_task_runner_.get()); |
| 735 ASSERT_EQ(SYNC_STATUS_OK, | 830 ASSERT_EQ(SYNC_STATUS_OK, |
| 736 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 831 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 737 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); | 832 ASSERT_EQ(base::PLATFORM_FILE_OK, file_system.OpenFileSystem()); |
| 738 | 833 |
| 739 const char kTestFileData[] = "Lorem ipsum!"; | 834 const char kTestFileData[] = "Lorem ipsum!"; |
| 740 const FileSystemURL kDir(file_system.URL("dir")); | 835 const FileSystemURL kDir(file_system.URL("dir")); |
| 741 const FileSystemURL kFile(file_system.URL("dir/file")); | 836 const FileSystemURL kFile(file_system.URL("dir/file")); |
| 742 | 837 |
| 743 // Either kDir or kFile not exist yet. | 838 // Either kDir or kFile not exist yet. |
| 744 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, file_system.FileExists(kDir)); | 839 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, file_system.FileExists(kDir)); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 768 | 863 |
| 769 // Make sure kDir and kFile are created by ApplyRemoteChange. | 864 // Make sure kDir and kFile are created by ApplyRemoteChange. |
| 770 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.FileExists(kFile)); | 865 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.FileExists(kFile)); |
| 771 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.DirectoryExists(kDir)); | 866 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system.DirectoryExists(kDir)); |
| 772 | 867 |
| 773 sync_context_->ShutdownOnUIThread(); | 868 sync_context_->ShutdownOnUIThread(); |
| 774 file_system.TearDown(); | 869 file_system.TearDown(); |
| 775 } | 870 } |
| 776 | 871 |
| 777 } // namespace sync_file_system | 872 } // namespace sync_file_system |
| OLD | NEW |