blob: 0d793810171b2ec1d8bc311c0df0ff22e8173c3f [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/feedback/crashpad_agent/config.h"
#include <zircon/errors.h>
#include "src/lib/fxl/test/test_settings.h"
#include "src/lib/syslog/cpp/logger.h"
#include "third_party/googletest/googletest/include/gtest/gtest.h"
namespace feedback {
namespace {
constexpr CrashServerConfig::UploadPolicy kDisabled = CrashServerConfig::UploadPolicy::DISABLED;
constexpr CrashServerConfig::UploadPolicy kEnabled = CrashServerConfig::UploadPolicy::ENABLED;
constexpr CrashServerConfig::UploadPolicy kReadFromPrivacySettings =
CrashServerConfig::UploadPolicy::READ_FROM_PRIVACY_SETTINGS;
void CheckEmptyConfig(const Config& config) {
EXPECT_EQ(config.crash_server.upload_policy, kDisabled);
EXPECT_EQ(config.crash_server.url, nullptr);
}
TEST(ConfigTest, ParseConfig_ValidConfig_UploadDisabled) {
Config config;
ASSERT_EQ(ParseConfig("/pkg/data/valid_config_upload_disabled.json", &config), ZX_OK);
EXPECT_EQ(config.crashpad_database.max_size_in_kb, 1024u);
EXPECT_EQ(config.crash_server.upload_policy, kDisabled);
EXPECT_EQ(config.crash_server.url, nullptr);
}
TEST(ConfigTest, ParseConfig_ValidConfig_UploadEnabled) {
Config config;
ASSERT_EQ(ParseConfig("/pkg/data/valid_config_upload_enabled.json", &config), ZX_OK);
EXPECT_EQ(config.crashpad_database.max_size_in_kb, 1024u);
EXPECT_EQ(config.crash_server.upload_policy, kEnabled);
EXPECT_EQ(*config.crash_server.url, "http://localhost:1234");
}
TEST(ConfigTest, ParseConfig_ValidConfig_UploadReadFromPrivacySettings) {
Config config;
ASSERT_EQ(ParseConfig("/pkg/data/valid_config_upload_read_from_privacy_settings.json", &config),
ZX_OK);
EXPECT_EQ(config.crashpad_database.max_size_in_kb, 1024u);
EXPECT_EQ(config.crash_server.upload_policy, kReadFromPrivacySettings);
EXPECT_EQ(*config.crash_server.url, "http://localhost:1234");
}
TEST(ConfigTest, ParseConfig_ValidConfig_UploadDisabledServerUrlIgnored) {
Config config;
ASSERT_EQ(ParseConfig("/pkg/data/valid_config_upload_disabled_spurious_server.json", &config),
ZX_OK);
EXPECT_EQ(config.crashpad_database.max_size_in_kb, 1024u);
EXPECT_EQ(config.crash_server.upload_policy, kDisabled);
// Even though a URL is set in the config file, we check that it is not set in the struct.
EXPECT_EQ(config.crash_server.url, nullptr);
}
TEST(ConfigTest, ParseConfig_MissingConfig) {
Config config;
ASSERT_EQ(ParseConfig("undefined file", &config), ZX_ERR_IO);
CheckEmptyConfig(config);
}
TEST(ConfigTest, ParseConfig_BadConfig_SpuriousField) {
Config config;
ASSERT_EQ(ParseConfig("/pkg/data/bad_schema_spurious_field_config.json", &config),
ZX_ERR_INTERNAL);
CheckEmptyConfig(config);
}
TEST(ConfigTest, ParseConfig_BadConfig_MissingRequiredField) {
Config config;
ASSERT_EQ(ParseConfig("/pkg/data/bad_schema_missing_required_field_config.json", &config),
ZX_ERR_INTERNAL);
CheckEmptyConfig(config);
}
TEST(ConfigTest, ParseConfig_BadConfig_MissingServerUrlWithUploadEnabled) {
Config config;
ASSERT_EQ(ParseConfig("/pkg/data/bad_schema_missing_server_upload_enabled_config.json", &config),
ZX_ERR_INTERNAL);
CheckEmptyConfig(config);
}
TEST(ConfigTest, ParseConfig_BadConfig_MissingServerUrlWithUploadReadFromPrivacySettings) {
Config config;
ASSERT_EQ(ParseConfig(
"/pkg/data/bad_schema_missing_server_upload_read_from_privacy_settings_config.json",
&config),
ZX_ERR_INTERNAL);
CheckEmptyConfig(config);
}
TEST(ConfigTest, ParseConfig_BadConfig_InvalidUploadPolicy) {
Config config;
ASSERT_EQ(ParseConfig("/pkg/data/bad_schema_invalid_upload_policy_config.json", &config),
ZX_ERR_INTERNAL);
CheckEmptyConfig(config);
}
} // namespace
// Pretty-prints CrashServerConfig::UploadPolicy in gTest matchers instead of the default byte
// string in case of failed expectations.
void PrintTo(const CrashServerConfig::UploadPolicy& upload_policy, std::ostream* os) {
*os << ToString(upload_policy);
}
} // namespace feedback
int main(int argc, char** argv) {
if (!fxl::SetTestSettings(argc, argv)) {
return EXIT_FAILURE;
}
testing::InitGoogleTest(&argc, argv);
syslog::InitLogger({"feedback", "test"});
return RUN_ALL_TESTS();
}