blob: 8b1640b313490682e109421b28cdba1f161547d0 [file] [log] [blame]
// Copyright 2017 The Chromium OS 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 "crash-reporter/kernel_warning_collector.h"
#include <unistd.h>
#include <string>
#include <base/files/file_enumerator.h>
#include <base/files/file_util.h>
#include <base/files/scoped_temp_dir.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "crash-reporter/test_util.h"
using base::FilePath;
namespace {
const char kTestFilename[] = "test-kernel-warning";
const char kTestCrashDirectory[] = "test-crash-directory";
// Returns true if at least one file in this directory matches the pattern.
bool DirectoryHasFileWithPattern(const FilePath& directory,
const std::string& pattern) {
base::FileEnumerator enumerator(
directory, false, base::FileEnumerator::FileType::FILES, pattern);
FilePath path = enumerator.Next();
return !path.empty();
}
bool DirectoryHasFileWithPatternAndContents(const FilePath& directory,
const std::string& pattern,
const std::string& contents) {
base::FileEnumerator enumerator(
directory, false, base::FileEnumerator::FileType::FILES, pattern);
for (FilePath path = enumerator.Next(); !path.empty();
path = enumerator.Next()) {
LOG(INFO) << "Checking " << path.value();
std::string actual_contents;
if (!base::ReadFileToString(path, &actual_contents)) {
LOG(ERROR) << "Failed to read file " << path.value();
return false;
}
if (actual_contents.find(contents)) {
return true;
}
}
return false;
}
} // namespace
class KernelWarningCollectorMock : public KernelWarningCollector {
public:
MOCK_METHOD(void, SetUpDBus, (), (override));
};
class KernelWarningCollectorTest : public ::testing::Test {
void SetUp() {
EXPECT_CALL(collector_, SetUpDBus()).WillRepeatedly(testing::Return());
collector_.Initialize(false);
ASSERT_TRUE(scoped_temp_dir_.CreateUniqueTempDir());
test_path_ = scoped_temp_dir_.GetPath().Append(kTestFilename);
collector_.warning_report_path_ = test_path_.value();
test_crash_directory_ =
scoped_temp_dir_.GetPath().Append(kTestCrashDirectory);
CreateDirectory(test_crash_directory_);
collector_.set_crash_directory_for_test(test_crash_directory_);
}
protected:
KernelWarningCollectorMock collector_;
base::ScopedTempDir scoped_temp_dir_;
FilePath test_path_;
FilePath test_crash_directory_;
};
TEST_F(KernelWarningCollectorTest, CollectOK) {
// Collector produces a crash report.
ASSERT_TRUE(
test_util::CreateFile(test_path_,
"70e67541-iwl_mvm_rm_sta+0x161/0x344 [iwlmvm]()\n"
"\n"
"<remaining log contents>"));
EXPECT_TRUE(
collector_.Collect(KernelWarningCollector::WarningType::kGeneric));
EXPECT_TRUE(DirectoryHasFileWithPatternAndContents(
test_crash_directory_, "kernel_warning_iwl_mvm_rm_sta.*.meta",
"sig=70e67541-iwl_mvm_rm_sta+0x161/0x344 [iwlmvm]()"));
}
TEST_F(KernelWarningCollectorTest, CollectBad) {
// Collector fails to collect a single line without newline
ASSERT_TRUE(
test_util::CreateFile(test_path_,
"[ 0.000000] percpu: Embedded 32 pages/cpu "
"s91880 r8192 d31000 u131072"));
EXPECT_FALSE(
collector_.Collect(KernelWarningCollector::WarningType::kGeneric));
EXPECT_TRUE(IsDirectoryEmpty(test_crash_directory_));
}
TEST_F(KernelWarningCollectorTest, CollectOKMultiline) {
// Collector produces a crash report.
ASSERT_TRUE(
test_util::CreateFile(test_path_,
"Warning message trigger count: 0\n"
"70e67541-iwl_mvm_rm_sta+0x161/0x344 [iwlmvm]()\n"
"\n"
"<remaining log contents>"));
EXPECT_TRUE(
collector_.Collect(KernelWarningCollector::WarningType::kGeneric));
EXPECT_TRUE(DirectoryHasFileWithPatternAndContents(
test_crash_directory_, "kernel_warning_iwl_mvm_rm_sta.*.meta",
"sig=70e67541-iwl_mvm_rm_sta+0x161/0x344 [iwlmvm]()"));
}
TEST_F(KernelWarningCollectorTest, CollectOKUnknownFunc) {
// Collector produces a crash report.
ASSERT_TRUE(
test_util::CreateFile(test_path_,
"70e67541-unknown-function+0x161/0x344 [iwlmvm]()\n"
"\n"
"<remaining log contents>"));
EXPECT_TRUE(
collector_.Collect(KernelWarningCollector::WarningType::kGeneric));
EXPECT_TRUE(DirectoryHasFileWithPatternAndContents(
test_crash_directory_, "kernel_warning_unknown_function.*.meta",
"sig=70e67541-unknown-function+0x161/0x344 [iwlmvm]()"));
}
TEST_F(KernelWarningCollectorTest, CollectOKBadSig) {
// Collector produces a crash report.
ASSERT_TRUE(test_util::CreateFile(test_path_,
"70e67541-0x161/0x344 [iwlmvm]()\n"
"\n"
"<remaining log contents>"));
EXPECT_TRUE(
collector_.Collect(KernelWarningCollector::WarningType::kGeneric));
EXPECT_TRUE(DirectoryHasFileWithPatternAndContents(
test_crash_directory_, "kernel_warning.*.meta",
"sig=70e67541-0x161/0x344 [iwlmvm]()"));
}
TEST_F(KernelWarningCollectorTest, CollectWifiWarningOK) {
// Collector produces a crash report with a different exec name.
ASSERT_TRUE(
test_util::CreateFile(test_path_,
"70e67541-iwl_mvm_rm_sta+0x161/0x344 [iwlmvm]()\n"
"\n"
"<remaining log contents>"));
EXPECT_TRUE(collector_.Collect(KernelWarningCollector::WarningType::kWifi));
EXPECT_TRUE(DirectoryHasFileWithPattern(
test_crash_directory_, "kernel_wifi_warning_iwl_mvm_rm_sta.*.meta"));
}
TEST_F(KernelWarningCollectorTest, CollectUMACOK) {
// Collector produces a crash report.
ASSERT_TRUE(test_util::CreateFile(
test_path_,
"iwlwifi 0000:00:14.3: Microcode SW error detected. Restarting 0x0.\n"
"iwlwifi 0000:00:14.3: Start IWL Error Log Dump:\n"
"iwlwifi 0000:00:14.3: Status: 0x00000040, count: 6\n"
"iwlwifi 0000:00:14.3: Loaded firmware version: 53.c31ac674.0 "
"QuZ-a0-hr-b0-53.ucode\n"
"iwlwifi 0000:00:14.3: 0x00000071 | NMI_INTERRUPT_UMAC_FATAL \n"
"iwlwifi 0000:00:14.3: 0x000022F0 | trm_hw_status0\n"
"iwlwifi 0000:00:14.3: 0x00000000 | trm_hw_status1\n"
"iwlwifi 0000:00:14.3: 0x004C9C3A | branchlink2\n"
"iwlwifi 0000:00:14.3: 0x00016176 | interruptlink1\n"
"iwlwifi 0000:00:14.3: 0x00016176 | interruptlink2\n"
"iwlwifi 0000:00:14.3: 0x004C496C | data1\n"
"iwlwifi 0000:00:14.3: 0x00001000 | data2\n"
"iwlwifi 0000:00:14.3: 0x00000000 | data3\n"
"iwlwifi 0000:00:14.3: 0x2D807673 | beacon time\n"
"iwlwifi 0000:00:14.3: 0x95C4099B | tsf low\n"
"iwlwifi 0000:00:14.3: 0x00000002 | tsf hi\n"
"iwlwifi 0000:00:14.3: 0x00000000 | time gp1\n"
"iwlwifi 0000:00:14.3: 0x011EEC18 | time gp2\n"
"iwlwifi 0000:00:14.3: 0x00000001 | uCode revision type\n"
"iwlwifi 0000:00:14.3: 0x00000035 | uCode version major\n"
"iwlwifi 0000:00:14.3: 0xC31AC674 | uCode version minor\n"
"iwlwifi 0000:00:14.3: 0x00000351 | hw version\n"
"iwlwifi 0000:00:14.3: 0x00C89004 | board version\n"
"iwlwifi 0000:00:14.3: 0x80B1FC19 | hcmd\n"
"iwlwifi 0000:00:14.3: 0x00020000 | isr0\n"
"iwlwifi 0000:00:14.3: 0x00000000 | isr1\n"
"iwlwifi 0000:00:14.3: 0x08F00002 | isr2\n"
"iwlwifi 0000:00:14.3: 0x04C37FCC | isr3\n"
"iwlwifi 0000:00:14.3: 0x00000000 | isr4\n"
"iwlwifi 0000:00:14.3: 0x003B019C | last cmd Id\n"
"iwlwifi 0000:00:14.3: 0x004C496C | wait_event\n"
"iwlwifi 0000:00:14.3: 0x00000000 | l2p_control\n"
"iwlwifi 0000:00:14.3: 0x00000000 | l2p_duration\n"
"iwlwifi 0000:00:14.3: 0x00000000 | l2p_mhvalid\n"
"iwlwifi 0000:00:14.3: 0x00000000 | l2p_addr_match\n"
"iwlwifi 0000:00:14.3: 0x0000004B | lmpm_pmg_sel\n"
"iwlwifi 0000:00:14.3: 0x00000000 | timestamp\n"
"iwlwifi 0000:00:14.3: 0x000050A8 | flow_handler\n"
"iwlwifi 0000:00:14.3: Start IWL Error Log Dump:\n"
"iwlwifi 0000:00:14.3: Status: 0x00000040, count: 7\n"
"iwlwifi 0000:00:14.3: 0x201002FF | ADVANCED_SYSASSERT\n"
"iwlwifi 0000:00:14.3: 0x00000000 | umac branchlink1\n"
"iwlwifi 0000:00:14.3: 0x80467A40 | umac branchlink2\n"
"iwlwifi 0000:00:14.3: 0xC00866A8 | umac interruptlink1\n"
"iwlwifi 0000:00:14.3: 0x00000000 | umac interruptlink2\n"
"iwlwifi 0000:00:14.3: 0x003C0102 | umac data1\n"
"iwlwifi 0000:00:14.3: 0xDEADBEEF | umac data2\n"
"iwlwifi 0000:00:14.3: 0xDEADBEEF | umac data3\n"
"iwlwifi 0000:00:14.3: 0x00000035 | umac major\n"
"iwlwifi 0000:00:14.3: 0xC31AC674 | umac minor\n"
"iwlwifi 0000:00:14.3: 0x011EEC0D | frame pointer\n"
"iwlwifi 0000:00:14.3: 0xC0886C40 | stack pointer\n"
"iwlwifi 0000:00:14.3: 0x003C0102 | last host cmd\n"
"iwlwifi 0000:00:14.3: 0x00000000 | isr status reg\n"
"iwlwifi 0000:00:14.3: Fseq Registers:\n"
"iwlwifi 0000:00:14.3: 0x60000000 | FSEQ_ERROR_CODE\n"
"iwlwifi 0000:00:14.3: 0x80290033 | FSEQ_TOP_INIT_VERSION\n"
"iwlwifi 0000:00:14.3: 0x00090006 | FSEQ_CNVIO_INIT_VERSION\n"
"iwlwifi 0000:00:14.3: 0x0000A481 | FSEQ_OTP_VERSION\n"
"iwlwifi 0000:00:14.3: 0x00000003 | FSEQ_TOP_CONTENT_VERSION\n"
"iwlwifi 0000:00:14.3: 0x4552414E | FSEQ_ALIVE_TOKEN\n"
"iwlwifi 0000:00:14.3: 0x20000302 | FSEQ_CNVI_ID\n"
"iwlwifi 0000:00:14.3: 0x01300504 | FSEQ_CNVR_ID\n"
"iwlwifi 0000:00:14.3: 0x20000302 | CNVI_AUX_MISC_CHIP\n"
"iwlwifi 0000:00:14.3: 0x01300504 | CNVR_AUX_MISC_CHIP\n"
"iwlwifi 0000:00:14.3: 0x05B0905B | "
"CNVR_SCU_SD_REGS_SD_REG_DIG_DCDC_VTRIM\n"
"iwlwifi 0000:00:14.3: 0x0000025B | "
"CNVR_SCU_SD_REGS_SD_REG_ACTIVE_VDIG_MIRROR\n"
"iwlwifi 0000:00:14.3: Collecting data: trigger 2 fired.\n"
"<remaining log contents>"));
EXPECT_TRUE(
collector_.Collect(KernelWarningCollector::WarningType::kIwlwifi));
EXPECT_TRUE(DirectoryHasFileWithPatternAndContents(
test_crash_directory_, "kernel_iwlwifi_error_ADVANCED_SYSASSERT.*.meta",
"sig=iwlwifi 0000:00:14.3: 0x201002FF | ADVANCED_SYSASSERT"));
}
TEST_F(KernelWarningCollectorTest, CollectSMMUFaultOk) {
ASSERT_TRUE(test_util::CreateFile(
test_path_,
"[ 74.047205] arm-smmu 15000000.iommu: Unhandled context fault: "
"fsr=0x402, iova=0x04367000, fsynr=0x30023, cbfrsynra=0x800, cb=5\n"
"[ 75.303729] ath10k_snoc 18800000.wifi: failed to synchronize thermal "
"read\n"
"<remaining log contents>"));
EXPECT_TRUE(
collector_.Collect(KernelWarningCollector::WarningType::kSMMUFault));
EXPECT_TRUE(DirectoryHasFileWithPatternAndContents(
test_crash_directory_, "kernel_smmu_fault_15000000_iommu.*.meta",
"sig=fsr=0x402, iova=0x04367000, fsynr=0x30023, cbfrsynra=0x800, cb=5"));
}
TEST_F(KernelWarningCollectorTest, CollectSMMUFaultBad) {
ASSERT_TRUE(test_util::CreateFile(
test_path_,
"[ 1.566661] arm-smmu 5040000.iommu: 8 context banks "
"(0 stage-2 only)\n"
"[ 1.573025] arm-smmu 5040000.iommu: Supported page sizes: "
"0x63315000\n"
"[ 1.579385] arm-smmu 5040000.iommu: Stage-1: 48-bit VA -> "
"36-bit IPA\n"
"<remaining log contents>"));
EXPECT_FALSE(
collector_.Collect(KernelWarningCollector::WarningType::kSMMUFault));
EXPECT_TRUE(IsDirectoryEmpty(test_crash_directory_));
}
TEST_F(KernelWarningCollectorTest, CollectLMACOK) {
// Collector produces a crash report.
ASSERT_TRUE(test_util::CreateFile(
test_path_,
"iwlwifi 0000:00:14.3: Microcode SW error detected. Restarting 0x0.\n"
"iwlwifi 0000:00:14.3: Start IWL Error Log Dump:\n"
"iwlwifi 0000:00:14.3: Status: 0x00000040, count: 6\n"
"iwlwifi 0000:00:14.3: Loaded firmware version: 53.c31ac674.0 "
"QuZ-a0-hr-b0-53.ucode\n"
"iwlwifi 0000:00:14.3: 0x00000084 | NMI_INTERRUPT_UNKNOWN \n"
"iwlwifi 0000:00:14.3: 0x000022F0 | trm_hw_status0\n"
"iwlwifi 0000:00:14.3: 0x00000000 | trm_hw_status1\n"
"iwlwifi 0000:00:14.3: 0x004C9C3A | branchlink2\n"
"iwlwifi 0000:00:14.3: 0x0000890E | interruptlink1\n"
"iwlwifi 0000:00:14.3: 0x0000890E | interruptlink2\n"
"iwlwifi 0000:00:14.3: 0x004C492A | data1\n"
"iwlwifi 0000:00:14.3: 0xFF000000 | data2\n"
"iwlwifi 0000:00:14.3: 0x00000000 | data3\n"
"iwlwifi 0000:00:14.3: 0xB180600C | beacon time\n"
"iwlwifi 0000:00:14.3: 0x94A49FFF | tsf low\n"
"iwlwifi 0000:00:14.3: 0x00000002 | tsf hi\n"
"iwlwifi 0000:00:14.3: 0x00000000 | time gp1\n"
"iwlwifi 0000:00:14.3: 0x10D5DCA1 | time gp2\n"
"iwlwifi 0000:00:14.3: 0x00000001 | uCode revision type\n"
"iwlwifi 0000:00:14.3: 0x00000035 | uCode version major\n"
"iwlwifi 0000:00:14.3: 0xC31AC674 | uCode version minor\n"
"iwlwifi 0000:00:14.3: 0x00000351 | hw version\n"
"iwlwifi 0000:00:14.3: 0x00C89004 | board version\n"
"iwlwifi 0000:00:14.3: 0x80F3FC19 | hcmd\n"
"iwlwifi 0000:00:14.3: 0x00020000 | isr0\n"
"iwlwifi 0000:00:14.3: 0x00000000 | isr1\n"
"iwlwifi 0000:00:14.3: 0x08F04002 | isr2\n"
"iwlwifi 0000:00:14.3: 0x04C01FCC | isr3\n"
"iwlwifi 0000:00:14.3: 0x00000000 | isr4\n"
"iwlwifi 0000:00:14.3: 0x00E4019C | last cmd Id\n"
"iwlwifi 0000:00:14.3: 0x004C492A | wait_event\n"
"iwlwifi 0000:00:14.3: 0x00000000 | l2p_control\n"
"iwlwifi 0000:00:14.3: 0x00000000 | l2p_duration\n"
"iwlwifi 0000:00:14.3: 0x00000000 | l2p_mhvalid\n"
"iwlwifi 0000:00:14.3: 0x00000000 | l2p_addr_match\n"
"iwlwifi 0000:00:14.3: 0x00000048 | lmpm_pmg_sel\n"
"iwlwifi 0000:00:14.3: 0x00000000 | timestamp\n"
"iwlwifi 0000:00:14.3: 0x0000A8B8 | flow_handler\n"
"iwlwifi 0000:00:14.3: Start IWL Error Log Dump:\n"
"iwlwifi 0000:00:14.3: Status: 0x00000040, count: 7\n"
"iwlwifi 0000:00:14.3: 0x20000066 | NMI_INTERRUPT_HOST\n"
"iwlwifi 0000:00:14.3: 0x00000000 | umac branchlink1\n"
"iwlwifi 0000:00:14.3: 0x80467A40 | umac branchlink2\n"
"iwlwifi 0000:00:14.3: 0x00000000 | umac interruptlink1\n"
"iwlwifi 0000:00:14.3: 0x80475DFC | umac interruptlink2\n"
"iwlwifi 0000:00:14.3: 0x01000000 | umac data1\n"
"iwlwifi 0000:00:14.3: 0x80475DFC | umac data2\n"
"iwlwifi 0000:00:14.3: 0x00000000 | umac data3\n"
"iwlwifi 0000:00:14.3: 0x00000035 | umac major\n"
"iwlwifi 0000:00:14.3: 0xC31AC674 | umac minor\n"
"iwlwifi 0000:00:14.3: 0x10D5DCA0 | frame pointer\n"
"iwlwifi 0000:00:14.3: 0xC088621C | stack pointer\n"
"iwlwifi 0000:00:14.3: 0x00E60400 | last host cmd\n"
"iwlwifi 0000:00:14.3: 0x00000009 | isr status reg\n"
"iwlwifi 0000:00:14.3: Fseq Registers:\n"
"iwlwifi 0000:00:14.3: 0x60000000 | FSEQ_ERROR_CODE\n"
"iwlwifi 0000:00:14.3: 0x80290033 | FSEQ_TOP_INIT_VERSION\n"
"iwlwifi 0000:00:14.3: 0x00090006 | FSEQ_CNVIO_INIT_VERSION\n"
"iwlwifi 0000:00:14.3: 0x0000A481 | FSEQ_OTP_VERSION\n"
"iwlwifi 0000:00:14.3: 0x00000003 | FSEQ_TOP_CONTENT_VERSION\n"
"iwlwifi 0000:00:14.3: 0x4552414E | FSEQ_ALIVE_TOKEN\n"
"iwlwifi 0000:00:14.3: 0x20000302 | FSEQ_CNVI_ID\n"
"iwlwifi 0000:00:14.3: 0x01300504 | FSEQ_CNVR_ID\n"
"iwlwifi 0000:00:14.3: 0x20000302 | CNVI_AUX_MISC_CHIP\n"
"iwlwifi 0000:00:14.3: 0x01300504 | CNVR_AUX_MISC_CHIP\n"
"iwlwifi 0000:00:14.3: 0x05B0905B | "
"CNVR_SCU_SD_REGS_SD_REG_DIG_DCDC_VTRIM\n"
"iwlwifi 0000:00:14.3: 0x0000025B | "
"CNVR_SCU_SD_REGS_SD_REG_ACTIVE_VDIG_MIRROR\n"
"<remaining log contents>"));
EXPECT_TRUE(
collector_.Collect(KernelWarningCollector::WarningType::kIwlwifi));
EXPECT_TRUE(DirectoryHasFileWithPatternAndContents(
test_crash_directory_,
"kernel_iwlwifi_error_NMI_INTERRUPT_UNKNOWN.*.meta",
"sig=iwlwifi 0000:00:14.3: 0x00000084 | NMI_INTERRUPT_UNKNOWN "));
}
TEST_F(KernelWarningCollectorTest, CollectDriverError) {
// Collector produces a crash report.
ASSERT_TRUE(test_util::CreateFile(
test_path_,
"iwlwifi 0000:01:00.0: Current CMD queue read_ptr 20 write_ptr 21\n"
"iwlwifi 0000:01:00.0: Loaded firmware version: 17.bfb58538.0 "
"7260-17.ucode\n"
"iwlwifi 0000:01:00.0: 0x00000000 | ADVANCED_SYSASSERT\n"
"iwlwifi 0000:01:00.0: 0x00000000 | trm_hw_status0\n"
"iwlwifi 0000:01:00.0: 0x00000000 | trm_hw_status1\n"
"iwlwifi 0000:01:00.0: 0x00000000 | branchlink2\n"
"iwlwifi 0000:01:00.0: 0x00000000 | interruptlink1\n"
"iwlwifi 0000:01:00.0: 0x00000000 | interruptlink2\n"
"iwlwifi 0000:01:00.0: 0x00000000 | data1\n"
"iwlwifi 0000:01:00.0: 0x00000000 | data2\n"
"iwlwifi 0000:01:00.0: 0x00000000 | data3\n"
"iwlwifi 0000:01:00.0: 0x00000000 | beacon time\n"
"iwlwifi 0000:01:00.0: 0x00000000 | tsf low\n"
"iwlwifi 0000:01:00.0: 0x00000000 | tsf hi\n"
"iwlwifi 0000:01:00.0: 0x00000000 | time gp1\n"
"iwlwifi 0000:01:00.0: 0x00000000 | time gp2\n"
"iwlwifi 0000:01:00.0: 0x00000000 | uCode revision type\n"
"iwlwifi 0000:01:00.0: 0x00000000 | uCode version major\n"
"iwlwifi 0000:01:00.0: 0x00000000 | uCode version minor\n"
"iwlwifi 0000:01:00.0: 0x00000000 | hw version\n"
"iwlwifi 0000:01:00.0: 0x00000000 | board version\n"
"iwlwifi 0000:01:00.0: 0x00000000 | hcmd\n"
"iwlwifi 0000:01:00.0: 0x00000000 | isr0\n"
"iwlwifi 0000:01:00.0: 0x00000000 | isr1\n"
"iwlwifi 0000:01:00.0: 0x00000000 | isr2\n"
"iwlwifi 0000:01:00.0: 0x00000000 | isr3\n"
"iwlwifi 0000:01:00.0: 0x00000000 | isr4\n"
"iwlwifi 0000:01:00.0: 0x00000000 | last cmd Id\n"
"iwlwifi 0000:01:00.0: 0x00000000 | wait_event\n"
"iwlwifi 0000:01:00.0: 0x00000000 | l2p_control\n"
"iwlwifi 0000:01:00.0: 0x00000000 | l2p_duration\n"
"iwlwifi 0000:01:00.0: 0x00000000 | l2p_mhvalid\n"
"iwlwifi 0000:01:00.0: 0x00000000 | l2p_addr_match\n"
"iwlwifi 0000:01:00.0: 0x00000000 | lmpm_pmg_sel\n"
"iwlwifi 0000:01:00.0: 0x00000000 | timestamp\n"
"iwlwifi 0000:01:00.0: 0x00000000 | flow_handler\n"
"iwlwifi 0000:01:00.0: Fseq Registers:\n"
"iwlwifi 0000:01:00.0: 0x00000000 | FSEQ_ERROR_CODE\n"
"iwlwifi 0000:01:00.0: 0x00000000 | FSEQ_TOP_INIT_VERSION\n"
"iwlwifi 0000:01:00.0: 0x00000000 | FSEQ_CNVIO_INIT_VERSION\n"
"iwlwifi 0000:01:00.0: 0x00000000 | FSEQ_OTP_VERSION\n"
"iwlwifi 0000:01:00.0: 0x00000000 | FSEQ_TOP_CONTENT_VERSION\n"
"iwlwifi 0000:01:00.0: 0x00000000 | FSEQ_ALIVE_TOKEN\n"
"iwlwifi 0000:01:00.0: 0x00000000 | FSEQ_CNVI_ID\n"
"iwlwifi 0000:01:00.0: 0x00000000 | FSEQ_CNVR_ID\n"
"iwlwifi 0000:01:00.0: 0x00000000 | CNVI_AUX_MISC_CHIP\n"
"iwlwifi 0000:01:00.0: 0x00000000 | CNVR_AUX_MISC_CHIP\n"
"iwlwifi 0000:01:00.0: 0x00000000 | "
"CNVR_SCU_SD_REGS_SD_REG_DIG_DCDC_VTRIM\n"
"iwlwifi 0000:01:00.0: 0x00000000 | "
"CNVR_SCU_SD_REGS_SD_REG_ACTIVE_VDIG_MIRROR\n"
"iwlwifi 0000:01:00.0: Collecting data: trigger 2 fired.\n"
"ieee80211 phy0: Hardware restart was requested\n"
"iwlwifi 0000:01:00.0: Scan failed! ret -110\n"
"<remaining log contents>"));
EXPECT_TRUE(
collector_.Collect(KernelWarningCollector::WarningType::kIwlwifi));
EXPECT_TRUE(DirectoryHasFileWithPatternAndContents(
test_crash_directory_, "kernel_iwlwifi_error_ADVANCED_SYSASSERT.*.meta",
"sig=iwlwifi 0000:01:00.0: 0x00000000 | ADVANCED_SYSASSERT"));
}
TEST_F(KernelWarningCollectorTest, CollectOKBadIwlwifiSig) {
// Collector produces a crash report.
ASSERT_TRUE(test_util::CreateFile(
test_path_,
"iwlwifi 0000:01:00.0: Microcode SW error detected. Restarting 0x0.\n"
"iwlwifi 0000:01:00.0: Start IWL Error Log Dump:\n"
"iwlwifi 0000:01:00.0: Status: 0x00000100, count: 6\n"
"iwlwifi 0000:01:00.0: Loaded firmware version: 43.95eb4e97.0\n"
"iwlwifi 0000:01:00.0: 0x00000071 | BAD_COMMAND\n"
"iwlwifi 0000:01:00.0: 0x000022F0 | trm_hw_status0\n"
"iwlwifi 0000:01:00.0: 0x00000000 | trm_hw_status1\n"
"iwlwifi 0000:01:00.0: 0x0000C860 | flow_handler\n"
"iwlwifi 0000:01:00.0: Start IWL Error Log Dump:\n"
"iwlwifi 0000:01:00.0: Status: 0x00000100, count: 7\n"
"iwlwifi 0000:01:00.0: 0x20000079 | \n"
"iwlwifi 0000:01:00.0: 0x00000000 | umac branchlink1\n"
"<remaining log contents>"));
EXPECT_TRUE(
collector_.Collect(KernelWarningCollector::WarningType::kIwlwifi));
EXPECT_TRUE(DirectoryHasFileWithPatternAndContents(
test_crash_directory_, "kernel_iwlwifi_error.*.meta",
"sig=iwlwifi 0000:01:00.0: Microcode SW error detected. Restarting "
"0x0."));
}