blob: dd21b3db0c2c42550ca5bbe9721dacbf872bd7be [file] [log] [blame]
// Copyright 2019 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 <base/macros.h>
#include <base/strings/stringprintf.h>
#include <gtest/gtest.h>
#include "diagnostics/cros_healthd/routines/smartctl_check/smartctl_check_utils.h"
namespace diagnostics {
namespace {
constexpr char kSmartctlOutputFormat[] =
"%sAvailable Spare: %s\nAvailable Spare Threshold: %s";
} // namespace
TEST(SmartctlCheckUtilsTest, GoodParseSimple) {
int available_spare_pct, available_spare_threshold_pct;
EXPECT_TRUE(ScrapeAvailableSparePercents(
base::StringPrintf(kSmartctlOutputFormat, "", "75%", "25%"),
&available_spare_pct, &available_spare_threshold_pct));
EXPECT_EQ(available_spare_pct, 75);
EXPECT_EQ(available_spare_threshold_pct, 25);
}
TEST(SmartctlCheckUtilsTest, GoodParseLeadingLF) {
int available_spare_pct, available_spare_threshold_pct;
EXPECT_TRUE(ScrapeAvailableSparePercents(
base::StringPrintf(kSmartctlOutputFormat, "\n", "75%", "25%"),
&available_spare_pct, &available_spare_threshold_pct));
EXPECT_EQ(available_spare_pct, 75);
EXPECT_EQ(available_spare_threshold_pct, 25);
}
TEST(SmartctlCheckUtilsTest, GoodParseNullOutValues) {
EXPECT_TRUE(ScrapeAvailableSparePercents(
base::StringPrintf(kSmartctlOutputFormat, "\n", "75%", "25%"), nullptr,
nullptr));
}
TEST(SmartctlCheckUtilsTest, GoodParseLeadingLine) {
int available_spare_pct, available_spare_threshold_pct;
EXPECT_TRUE(ScrapeAvailableSparePercents(
base::StringPrintf(kSmartctlOutputFormat, "Other info: 100%\n", "75%",
"25%"),
&available_spare_pct, &available_spare_threshold_pct));
EXPECT_EQ(available_spare_pct, 75);
EXPECT_EQ(available_spare_threshold_pct, 25);
}
TEST(SmartctlCheckUtilsTest, BadParseBadSpare) {
int available_spare_pct, available_spare_threshold_pct;
EXPECT_FALSE(ScrapeAvailableSparePercents(
base::StringPrintf(kSmartctlOutputFormat, "", "bad", "10%"),
&available_spare_pct, &available_spare_threshold_pct));
}
TEST(SmartctlCheckUtilsTest, BadParseBadSpareThreshold) {
int available_spare_pct, available_spare_threshold_pct;
EXPECT_FALSE(ScrapeAvailableSparePercents(
base::StringPrintf(kSmartctlOutputFormat, "", "100%", "10"),
&available_spare_pct, &available_spare_threshold_pct));
}
TEST(SmartctlCheckUtilsTest, BadParseOnlySpareThreshold) {
int available_spare_pct, available_spare_threshold_pct;
EXPECT_FALSE(ScrapeAvailableSparePercents("Available Spare Threshold: 10%",
&available_spare_pct,
&available_spare_threshold_pct));
}
TEST(SmartctlCheckUtilsTest, BadParseOnlySpare) {
int available_spare_pct, available_spare_threshold_pct;
EXPECT_FALSE(ScrapeAvailableSparePercents("Available Spare: 80%",
&available_spare_pct,
&available_spare_threshold_pct));
}
TEST(SmartctlCheckUtilsTest, BadParseOnlyBadSpare) {
int available_spare_pct, available_spare_threshold_pct;
EXPECT_FALSE(ScrapeAvailableSparePercents("Available Spare: bad",
&available_spare_pct,
&available_spare_threshold_pct));
}
TEST(SmartctlCheckUtilsTest, BadParseOnlyBadSpareThreshold) {
int available_spare_pct, available_spare_threshold_pct;
EXPECT_FALSE(ScrapeAvailableSparePercents("Available Spare Threshold: bad",
&available_spare_pct,
&available_spare_threshold_pct));
}
} // namespace diagnostics