| // 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 <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| #include "timberslide/mock_timberslide.h" |
| #include "timberslide/timberslide.h" |
| |
| using testing::_; |
| using testing::Invoke; |
| using testing::NiceMock; |
| using testing::Return; |
| |
| namespace timberslide { |
| namespace { |
| |
| const char kSampleLogs[] = |
| "[0.001000 UART initialized after sysjump]\n" |
| "[1.000000 Sensor create: 0x0]\n"; |
| |
| const char kExpectedLogsWithUptime[] = |
| "0101/000000.001000 [0.001000 UART initialized after sysjump]\n" |
| "0101/000001.000000 [1.000000 Sensor create: 0x0]\n"; |
| |
| class LogListenerImplMock : public LogListener { |
| public: |
| MOCK_METHOD(void, OnLogLine, (const std::string&), (override)); |
| }; |
| |
| TEST(TimberslideTest, ProcessLogBuffer_GetEcUptimeSupported) { |
| auto now = base::Time::FromDoubleT(1.0); |
| NiceMock<MockTimberSlide> mock; |
| EXPECT_CALL(mock, GetEcUptime).WillOnce([](int64_t* time) { |
| *time = 1 * base::Time::kMillisecondsPerSecond; |
| return true; |
| }); |
| std::string ret = mock.ProcessLogBuffer(kSampleLogs, now); |
| EXPECT_EQ(ret, kExpectedLogsWithUptime); |
| } |
| |
| TEST(TimberslideTest, ProcessLogBuffer_GetEcUptimeNotSupported) { |
| auto now = base::Time::FromDoubleT(1.0); |
| NiceMock<MockTimberSlide> mock; |
| EXPECT_CALL(mock, GetEcUptime).WillOnce(Return(false)); |
| std::string ret = mock.ProcessLogBuffer(kSampleLogs, now); |
| EXPECT_EQ(ret, kSampleLogs); |
| } |
| |
| class TimberslideLogLineTest : public testing::TestWithParam<bool> {}; |
| |
| TEST_P(TimberslideLogLineTest, ProcessLogBuffer_OnLogLine) { |
| base::Time now; |
| auto metrics_listener = std::make_unique<LogListenerImplMock>(); |
| EXPECT_CALL(*metrics_listener, OnLogLine) |
| .WillOnce([](const std::string& line) { |
| EXPECT_EQ(line, "[0.001000 UART initialized after sysjump]"); |
| }) |
| .WillOnce([](const std::string& line) { |
| EXPECT_EQ(line, "[1.000000 Sensor create: 0x0]"); |
| }); |
| NiceMock<MockTimberSlide> mock(std::move(metrics_listener)); |
| // We only pass the original EC log line to OnLogLine, not the additional |
| // timestamp we add if uptime is supported, so we test both variants. |
| ON_CALL(mock, GetEcUptime).WillByDefault(Return(GetParam())); |
| std::string ret = mock.ProcessLogBuffer(kSampleLogs, now); |
| } |
| |
| INSTANTIATE_TEST_SUITE_P(TimberslideTest, |
| TimberslideLogLineTest, |
| testing::Bool(), |
| testing::PrintToStringParamName()); |
| |
| } // namespace |
| } // namespace timberslide |