Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / installer / util / logging_installer_unittest.cc
blob7bc1c4532ff1916a1f9058f3d4259a5947db906c
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
3 // found in the LICENSE file.
5 #include <string>
7 #include "base/file_util.h"
8 #include "base/files/file_path.h"
9 #include "base/files/scoped_temp_dir.h"
10 #include "base/platform_file.h"
11 #include "base/win/scoped_handle.h"
12 #include "chrome/installer/util/logging_installer.h"
13 #include "testing/gtest/include/gtest/gtest.h"
15 TEST(LoggingInstallerTest, TestTruncate) {
16 const std::string test_data(installer::kMaxInstallerLogFileSize + 1, 'a');
18 base::ScopedTempDir temp_dir;
19 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
21 base::FilePath temp_file = temp_dir.path().Append(L"temp");
22 EXPECT_EQ(test_data.size(),
23 file_util::WriteFile(temp_file, &test_data[0], test_data.size()));
24 ASSERT_TRUE(base::PathExists(temp_file));
26 int64 file_size = 0;
27 EXPECT_TRUE(base::GetFileSize(temp_file, &file_size));
28 EXPECT_EQ(test_data.size(), file_size);
30 EXPECT_EQ(installer::LOGFILE_TRUNCATED,
31 installer::TruncateLogFileIfNeeded(temp_file));
33 EXPECT_TRUE(base::GetFileSize(temp_file, &file_size));
34 EXPECT_EQ(installer::kTruncatedInstallerLogFileSize , file_size);
36 // Check that the temporary file was deleted.
37 EXPECT_FALSE(base::PathExists(temp_file.Append(L".tmp")));
40 TEST(LoggingInstallerTest, TestTruncationNotNeeded) {
41 const std::string test_data(installer::kMaxInstallerLogFileSize, 'a');
43 base::ScopedTempDir temp_dir;
44 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
46 base::FilePath temp_file = temp_dir.path().Append(L"temp");
47 EXPECT_EQ(test_data.size(),
48 file_util::WriteFile(temp_file, &test_data[0], test_data.size()));
49 ASSERT_TRUE(base::PathExists(temp_file));
51 int64 file_size = 0;
52 EXPECT_TRUE(base::GetFileSize(temp_file, &file_size));
53 EXPECT_EQ(test_data.size(), file_size);
55 EXPECT_EQ(installer::LOGFILE_UNTOUCHED,
56 installer::TruncateLogFileIfNeeded(temp_file));
57 EXPECT_TRUE(base::PathExists(temp_file));
58 EXPECT_TRUE(base::GetFileSize(temp_file, &file_size));
59 EXPECT_EQ(test_data.size(), file_size);
62 TEST(LoggingInstallerTest, TestInUseNeedsTruncation) {
63 const std::string test_data(installer::kMaxInstallerLogFileSize + 1, 'a');
65 base::ScopedTempDir temp_dir;
66 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
68 base::FilePath temp_file = temp_dir.path().Append(L"temp");
69 EXPECT_EQ(test_data.size(),
70 file_util::WriteFile(temp_file, &test_data[0], test_data.size()));
71 ASSERT_TRUE(base::PathExists(temp_file));
72 int64 file_size = 0;
73 EXPECT_TRUE(base::GetFileSize(temp_file, &file_size));
74 EXPECT_EQ(test_data.size(), file_size);
76 // Prevent the log file from being moved or deleted.
77 const int file_flags = base::PLATFORM_FILE_OPEN |
78 base::PLATFORM_FILE_READ |
79 base::PLATFORM_FILE_EXCLUSIVE_READ;
80 base::win::ScopedHandle temp_platform_file(
81 base::CreatePlatformFile(temp_file, file_flags, NULL, NULL));
82 ASSERT_TRUE(temp_platform_file.IsValid());
84 EXPECT_EQ(installer::LOGFILE_UNTOUCHED,
85 installer::TruncateLogFileIfNeeded(temp_file));
86 EXPECT_TRUE(base::PathExists(temp_file));
87 EXPECT_TRUE(base::GetFileSize(temp_file, &file_size));
88 EXPECT_EQ(test_data.size(), file_size);
91 TEST(LoggingInstallerTest, TestMoveFailsNeedsTruncation) {
92 const std::string test_data(installer::kMaxInstallerLogFileSize + 1, 'a');
94 base::ScopedTempDir temp_dir;
95 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
97 base::FilePath temp_file = temp_dir.path().Append(L"temp");
98 EXPECT_EQ(test_data.size(),
99 file_util::WriteFile(temp_file, &test_data[0], test_data.size()));
100 ASSERT_TRUE(base::PathExists(temp_file));
101 int64 file_size = 0;
102 EXPECT_TRUE(base::GetFileSize(temp_file, &file_size));
103 EXPECT_EQ(test_data.size(), file_size);
105 // Create an inconvenient, non-deletable file in the location that
106 // TruncateLogFileIfNeeded would like to move the log file to.
107 const int file_flags = base::PLATFORM_FILE_CREATE |
108 base::PLATFORM_FILE_READ |
109 base::PLATFORM_FILE_EXCLUSIVE_READ;
110 base::FilePath temp_file_move_dest(
111 temp_file.value() + FILE_PATH_LITERAL(".tmp"));
112 base::win::ScopedHandle temp_move_destination_file(
113 base::CreatePlatformFile(temp_file_move_dest, file_flags, NULL, NULL));
114 ASSERT_TRUE(temp_move_destination_file.IsValid());
116 EXPECT_EQ(installer::LOGFILE_DELETED,
117 installer::TruncateLogFileIfNeeded(temp_file));
118 EXPECT_FALSE(base::PathExists(temp_file));