1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/installer/util/google_update_settings.h"
#include <string>
#include "base/compiler_specific.h"
#include "base/files/file_util.h"
#include "base/path_service.h"
#include "base/test/scoped_path_override.h"
#include "build/build_config.h"
#include "chrome/browser/google/google_brand.h"
#include "chrome/common/chrome_paths.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
#if BUILDFLAG(IS_WIN)
#include "base/test/test_reg_util_win.h"
#endif // BUILDFLAG(IS_WIN)
class GoogleUpdateTest : public PlatformTest {
public:
GoogleUpdateTest(const GoogleUpdateTest&) = delete;
GoogleUpdateTest& operator=(const GoogleUpdateTest&) = delete;
#if BUILDFLAG(IS_WIN)
void SetUp() override {
// Override HKCU to prevent writing to real keys. On Windows, the metrics
// reporting consent is stored in the registry, and it is used to determine
// the metrics reporting state when it is unset (e.g. during tests, which
// start with fresh user data dirs). Otherwise, this may cause flakiness
// since tests will sometimes start with metrics reporting enabled and
// sometimes disabled.
ASSERT_NO_FATAL_FAILURE(
override_manager_.OverrideRegistry(HKEY_CURRENT_USER));
PlatformTest::SetUp();
}
#endif // BUILDFLAG(IS_WIN)
protected:
GoogleUpdateTest() : user_data_dir_override_(chrome::DIR_USER_DATA) {}
~GoogleUpdateTest() override = default;
private:
#if BUILDFLAG(IS_WIN)
registry_util::RegistryOverrideManager override_manager_;
#endif // BUILDFLAG(IS_WIN)
base::ScopedPathOverride user_data_dir_override_;
};
TEST_F(GoogleUpdateTest, StatsConsent) {
// Stats are off by default.
EXPECT_FALSE(GoogleUpdateSettings::GetCollectStatsConsent());
// Stats reporting is ON.
EXPECT_TRUE(GoogleUpdateSettings::SetCollectStatsConsent(true));
EXPECT_TRUE(GoogleUpdateSettings::GetCollectStatsConsent());
// Stats reporting is OFF.
EXPECT_TRUE(GoogleUpdateSettings::SetCollectStatsConsent(false));
EXPECT_FALSE(GoogleUpdateSettings::GetCollectStatsConsent());
}
#if BUILDFLAG(IS_WIN)
TEST_F(GoogleUpdateTest, LastRunTime) {
// Querying the value that does not exists should fail.
EXPECT_TRUE(GoogleUpdateSettings::RemoveLastRunTime());
EXPECT_EQ(-1, GoogleUpdateSettings::GetLastRunTime());
// Setting and querying the last update time in fast sequence
// should give 0 days.
EXPECT_TRUE(GoogleUpdateSettings::SetLastRunTime());
EXPECT_EQ(0, GoogleUpdateSettings::GetLastRunTime());
}
#endif // BUILDFLAG(IS_WIN)
TEST_F(GoogleUpdateTest, IsOrganic) {
// Test some brand codes to ensure that future changes to this method won't
// go unnoticed.
// GGRV is non-organic.
EXPECT_FALSE(google_brand::IsOrganic("GGRV"));
// Other GGR* are organic.
EXPECT_TRUE(google_brand::IsOrganic("GGRA"));
// GGLS must always be organic.
EXPECT_TRUE(google_brand::IsOrganic("GGLS"));
}
TEST_F(GoogleUpdateTest, IsOrganicFirstRunBrandCodes) {
// Test some brand codes to ensure that future changes to this method won't
// go unnoticed.
EXPECT_FALSE(google_brand::IsOrganicFirstRun("CHFO"));
EXPECT_FALSE(google_brand::IsOrganicFirstRun("CHMA"));
EXPECT_TRUE(google_brand::IsOrganicFirstRun("EUBA"));
EXPECT_TRUE(google_brand::IsOrganicFirstRun("GGRA"));
#if BUILDFLAG(IS_MAC)
// An empty brand string on Mac is used for channels other than stable,
// which are always organic.
EXPECT_TRUE(google_brand::IsOrganicFirstRun(""));
#endif
}
TEST_F(GoogleUpdateTest, IsEnterpriseBrandCodes) {
EXPECT_TRUE(google_brand::IsEnterprise("GGRV"));
std::string gce_prefix = "GCE";
for (char ch = 'A'; ch <= 'Z'; ++ch) {
EXPECT_EQ(google_brand::IsEnterprise(gce_prefix + ch), ch != 'L');
}
for (const std::string prefix :
{"GCC", "GCF", "GCG", "GCH", "GCK", "GCL", "GCM", "GCO", "GCP", "GCQ",
"GCS", "GCT", "GCU", "GCV", "GCW"}) {
for (char ch = 'A'; ch <= 'Z'; ++ch) {
EXPECT_TRUE(google_brand::IsEnterprise(prefix + ch));
}
}
EXPECT_FALSE(google_brand::IsEnterprise("ggrv"));
EXPECT_FALSE(google_brand::IsEnterprise("gcea"));
EXPECT_FALSE(google_brand::IsEnterprise("GGRA"));
EXPECT_FALSE(google_brand::IsEnterprise("AGCE"));
EXPECT_FALSE(google_brand::IsEnterprise("GCZE"));
EXPECT_FALSE(google_brand::IsEnterprise("CHFO"));
EXPECT_FALSE(google_brand::IsEnterprise("CHMA"));
EXPECT_FALSE(google_brand::IsEnterprise("EUBA"));
EXPECT_FALSE(google_brand::IsEnterprise(""));
}
#if BUILDFLAG(IS_CHROMEOS)
// Test for http://crbug.com/383003
TEST_F(GoogleUpdateTest, ConsentFileIsWorldReadable) {
// Turn on stats reporting.
EXPECT_TRUE(GoogleUpdateSettings::SetCollectStatsConsent(true));
base::FilePath consent_dir;
ASSERT_TRUE(base::PathService::Get(chrome::DIR_USER_DATA, &consent_dir));
ASSERT_TRUE(base::DirectoryExists(consent_dir));
base::FilePath consent_file = consent_dir.Append("Consent To Send Stats");
ASSERT_TRUE(base::PathExists(consent_file));
int permissions;
ASSERT_TRUE(base::GetPosixFilePermissions(consent_file, &permissions));
EXPECT_TRUE(permissions & base::FILE_PERMISSION_READ_BY_OTHERS);
}
#endif
|