Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <windows.h> | 5 #include <windows.h> |
| 6 | 6 |
| 7 #include <fstream> | 7 #include <fstream> |
| 8 | 8 |
| 9 #include "base/base_paths.h" | 9 #include "base/base_paths.h" |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| 11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
| 12 #include "base/path_service.h" | 12 #include "base/path_service.h" |
| 13 #include "base/process_util.h" | 13 #include "base/process_util.h" |
| 14 #include "base/string_util.h" | 14 #include "base/string_util.h" |
| 15 #include "chrome/installer/util/installer_util_test_common.h" | |
| 16 #include "chrome/installer/util/move_tree_work_item.h" | |
| 15 #include "chrome/installer/util/work_item.h" | 17 #include "chrome/installer/util/work_item.h" |
| 16 #include "chrome/installer/util/move_tree_work_item.h" | |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 19 |
| 19 namespace { | 20 namespace { |
| 20 class MoveTreeWorkItemTest : public testing::Test { | 21 class MoveTreeWorkItemTest : public testing::Test { |
| 21 protected: | 22 protected: |
| 22 virtual void SetUp() { | 23 virtual void SetUp() { |
| 23 ASSERT_TRUE(temp_from_dir_.CreateUniqueTempDir()); | 24 ASSERT_TRUE(temp_from_dir_.CreateUniqueTempDir()); |
| 24 ASSERT_TRUE(temp_to_dir_.CreateUniqueTempDir()); | 25 ASSERT_TRUE(temp_to_dir_.CreateUniqueTempDir()); |
| 25 } | 26 } |
| 26 | 27 |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 379 work_item->Rollback(); | 380 work_item->Rollback(); |
| 380 | 381 |
| 381 EXPECT_TRUE(file_util::PathExists(from_dir)); | 382 EXPECT_TRUE(file_util::PathExists(from_dir)); |
| 382 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, from_file)); | 383 EXPECT_TRUE(file_util::ContentsEqual(exe_full_path, from_file)); |
| 383 EXPECT_TRUE(file_util::PathExists(to_dir)); | 384 EXPECT_TRUE(file_util::PathExists(to_dir)); |
| 384 EXPECT_EQ(0, ReadTextFile(to_file).compare(kTextContent1)); | 385 EXPECT_EQ(0, ReadTextFile(to_file).compare(kTextContent1)); |
| 385 } | 386 } |
| 386 | 387 |
| 387 // Move one directory from source to destination when destination already | 388 // Move one directory from source to destination when destination already |
| 388 // exists. | 389 // exists. |
| 389 TEST_F(MoveTreeWorkItemTest, | 390 TEST_F(MoveTreeWorkItemTest, MoveDirectoryDestExistsCheckForDuplicatesFull) { |
| 390 FLAKY_MoveDirectoryDestExistsCheckForDuplicatesFull) { | |
| 391 // Create two level deep source dir | 391 // Create two level deep source dir |
| 392 FilePath from_dir1(temp_from_dir_.path()); | 392 FilePath from_dir1(temp_from_dir_.path()); |
| 393 from_dir1 = from_dir1.AppendASCII("From_Dir1"); | 393 from_dir1 = from_dir1.AppendASCII("From_Dir1"); |
| 394 file_util::CreateDirectory(from_dir1); | 394 file_util::CreateDirectory(from_dir1); |
| 395 ASSERT_TRUE(file_util::PathExists(from_dir1)); | 395 ASSERT_TRUE(file_util::PathExists(from_dir1)); |
| 396 | 396 |
| 397 FilePath from_dir2(from_dir1); | 397 FilePath from_dir2(from_dir1); |
| 398 from_dir2 = from_dir2.AppendASCII("From_Dir2"); | 398 from_dir2 = from_dir2.AppendASCII("From_Dir2"); |
| 399 file_util::CreateDirectory(from_dir2); | 399 file_util::CreateDirectory(from_dir2); |
| 400 ASSERT_TRUE(file_util::PathExists(from_dir2)); | 400 ASSERT_TRUE(file_util::PathExists(from_dir2)); |
| 401 | 401 |
| 402 FilePath from_file(from_dir2); | 402 FilePath from_file(from_dir2); |
| 403 from_file = from_file.AppendASCII("From_File"); | 403 from_file = from_file.AppendASCII("From_File"); |
| 404 CreateTextFile(from_file.value(), kTextContent1); | 404 CreateTextFile(from_file.value(), kTextContent1); |
| 405 ASSERT_TRUE(file_util::PathExists(from_file)); | 405 ASSERT_TRUE(file_util::PathExists(from_file)); |
| 406 | 406 |
| 407 // Create destination path | 407 // Create destination path |
| 408 FilePath to_dir(temp_from_dir_.path()); | 408 FilePath to_dir(temp_from_dir_.path()); |
| 409 to_dir = to_dir.AppendASCII("To_Dir"); | 409 to_dir = to_dir.AppendASCII("To_Dir"); |
| 410 file_util::CreateDirectory(to_dir); | 410 file_util::CreateDirectory(to_dir); |
|
grt (UTC plus 2)
2012/10/31 17:33:06
is it equivalent to replace 410-414 with:
// Cre
gab
2012/11/01 15:52:05
Yep, done.
| |
| 411 ASSERT_TRUE(file_util::PathExists(to_dir)); | 411 ASSERT_TRUE(file_util::PathExists(to_dir)); |
| 412 | 412 |
| 413 // Create a sub-directory of the same name as in the source directory. | 413 // Create a sub-directory identical to the one in the source directory. |
| 414 FilePath to_dir2(to_dir); | 414 installer::test::CopyFileHierarchy(from_dir2, to_dir); |
| 415 to_dir2 = to_dir2.AppendASCII("From_Dir2"); | |
| 416 file_util::CreateDirectory(to_dir2); | |
| 417 ASSERT_TRUE(file_util::PathExists(to_dir2)); | |
| 418 | 415 |
| 419 // Create an identical file in the to sub-directory. | 416 // Lock one of the files in the to destination directory to prevent moves. |
| 420 FilePath orig_to_file(to_dir2); | 417 FilePath orig_to_file( |
| 421 orig_to_file = orig_to_file.AppendASCII("From_File"); | 418 to_dir.AppendASCII("From_Dir2").AppendASCII("From_File")); |
| 422 CreateTextFile(orig_to_file.value(), kTextContent1); | |
| 423 ASSERT_TRUE(file_util::PathExists(orig_to_file)); | |
| 424 | |
| 425 // Lock one of the files in the to sub-directory to prevent moves. | |
| 426 file_util::MemoryMappedFile mapped_file; | 419 file_util::MemoryMappedFile mapped_file; |
| 427 EXPECT_TRUE(mapped_file.Initialize(orig_to_file)); | 420 EXPECT_TRUE(mapped_file.Initialize(orig_to_file)); |
| 428 | 421 |
| 429 // First check that we can't do the regular Move(). | 422 // First check that we can't do the regular Move(). |
| 430 scoped_ptr<MoveTreeWorkItem> work_item( | 423 scoped_ptr<MoveTreeWorkItem> work_item( |
| 431 WorkItem::CreateMoveTreeWorkItem(from_dir1, | 424 WorkItem::CreateMoveTreeWorkItem(from_dir1, |
| 432 to_dir, | 425 to_dir, |
| 433 temp_to_dir_.path(), | 426 temp_to_dir_.path(), |
| 434 WorkItem::ALWAYS_MOVE)); | 427 WorkItem::ALWAYS_MOVE)); |
| 435 EXPECT_FALSE(work_item->Do()); | 428 EXPECT_FALSE(work_item->Do()); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 544 // the source files. | 537 // the source files. |
| 545 EXPECT_TRUE(file_util::PathExists(from_dir1)); | 538 EXPECT_TRUE(file_util::PathExists(from_dir1)); |
| 546 EXPECT_TRUE(file_util::PathExists(to_dir)); | 539 EXPECT_TRUE(file_util::PathExists(to_dir)); |
| 547 EXPECT_TRUE(file_util::PathExists(orig_to_file)); | 540 EXPECT_TRUE(file_util::PathExists(orig_to_file)); |
| 548 EXPECT_EQ(0, ReadTextFile(orig_to_file).compare(kTextContent1)); | 541 EXPECT_EQ(0, ReadTextFile(orig_to_file).compare(kTextContent1)); |
| 549 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1)); | 542 EXPECT_EQ(0, ReadTextFile(from_file).compare(kTextContent1)); |
| 550 | 543 |
| 551 // Also, after rollback the new "to" file should be gone. | 544 // Also, after rollback the new "to" file should be gone. |
| 552 EXPECT_FALSE(file_util::PathExists(new_to_file2)); | 545 EXPECT_FALSE(file_util::PathExists(new_to_file2)); |
| 553 } | 546 } |
| OLD | NEW |