blob: 675b2dca938ce98a6be3c5e638fc2a6ee85c5fc1 [file] [log] [blame]
// Copyright 2024 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "crash-reporter/crash_collection_status.h"
#include <string>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
using ::testing::AllOf;
using ::testing::IsEmpty;
using ::testing::Not;
using ::testing::StartsWith;
TEST(CrashCollectionStatusTest, IsSuccessCode) {
EXPECT_TRUE(IsSuccessCode(CrashCollectionStatus::kSuccess));
EXPECT_FALSE(IsSuccessCode(CrashCollectionStatus::kUnknownStatus));
EXPECT_FALSE(IsSuccessCode(CrashCollectionStatus::kOutOfCapacity));
}
TEST(CrashCollectionStatusTest, IsSuccessCode_AllValues) {
for (int i = 0;
i <= static_cast<int>(CrashCollectionStatus::kLastSuccessCode); ++i) {
EXPECT_TRUE(IsSuccessCode(static_cast<CrashCollectionStatus>(i)));
}
for (int i = static_cast<int>(CrashCollectionStatus::kFirstErrorValue);
i <= static_cast<int>(CrashCollectionStatus::kMaxValue); ++i) {
EXPECT_FALSE(IsSuccessCode(static_cast<CrashCollectionStatus>(i)));
}
}
TEST(CrashCollectionStatusTest, CrashCollectionToString_KnownValues) {
EXPECT_EQ(CrashCollectionStatusToString(CrashCollectionStatus::kSuccess),
"Success");
EXPECT_EQ(
CrashCollectionStatusToString(CrashCollectionStatus::kUnknownStatus),
"Unknown Status");
EXPECT_EQ(
CrashCollectionStatusToString(CrashCollectionStatus::kOutOfCapacity),
"Out of capacity");
EXPECT_EQ(
CrashCollectionStatusToString(CrashCollectionStatus::kInvalidPayloadName),
"Payload had invalid name");
EXPECT_EQ(
CrashCollectionStatusToString(CrashCollectionStatus::kInvalidCrashType),
"Invalid crash type");
EXPECT_EQ(
CrashCollectionStatusToString(CrashCollectionStatus::kBadProcessState),
"Bad process_status");
EXPECT_EQ(CrashCollectionStatusToString(
CrashCollectionStatus::kCoreCollectorFailed),
"Failure running core collector");
}
TEST(CrashCollectionStatusTest, CrashCollectionToString_AllValuesListed) {
// Note: If you remove values from the CrashCollectionStatus enum, you'll
// need to skip them in the loops below. Just add a set of values to skip.
for (int i = 0;
i <= static_cast<int>(CrashCollectionStatus::kLastSuccessCode); ++i) {
EXPECT_THAT(
CrashCollectionStatusToString(static_cast<CrashCollectionStatus>(i)),
AllOf(Not(StartsWith("Invalid status enum")), Not(IsEmpty())));
}
for (int i = static_cast<int>(CrashCollectionStatus::kFirstErrorValue);
i <= static_cast<int>(CrashCollectionStatus::kMaxValue); ++i) {
EXPECT_THAT(
CrashCollectionStatusToString(static_cast<CrashCollectionStatus>(i)),
AllOf(Not(StartsWith("Invalid status enum")), Not(IsEmpty())));
}
}
TEST(CrashCollectionStatusTest,
CrashCollectionToString_InvalidValuesDontCrash) {
const int kAfterSuccess =
static_cast<int>(CrashCollectionStatus::kLastSuccessCode) + 1;
EXPECT_THAT(CrashCollectionStatusToString(
static_cast<CrashCollectionStatus>(kAfterSuccess)),
StartsWith("Invalid status enum"));
const int kBeforeFailure =
static_cast<int>(CrashCollectionStatus::kFirstErrorValue) - 1;
EXPECT_THAT(CrashCollectionStatusToString(
static_cast<CrashCollectionStatus>(kBeforeFailure)),
StartsWith("Invalid status enum"));
const int kAfterFailure =
static_cast<int>(CrashCollectionStatus::kMaxValue) + 1;
EXPECT_THAT(CrashCollectionStatusToString(
static_cast<CrashCollectionStatus>(kAfterFailure)),
StartsWith("Invalid status enum"));
}