blob: b43584a495ad8827be77e4e076e334820049589b [file] [log] [blame]
// Copyright 2021 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 <string>
#include <vector>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "timberslide/string_transformer.h"
using testing::_;
using testing::Invoke;
using testing::NiceMock;
using testing::Return;
namespace timberslide {
namespace {
struct TestExample {
std::vector<std::string> input;
int64_t ec_uptime;
base::Time::Exploded timestamp;
std::vector<std::string> expected_result;
};
TestExample kTransformerTestData[]{
{{"[1.362299 Sensor create: 0x0]", "[1.898121 HC 0x0b]",
"[1.898910 HC 0x400b]", "[1.898964 HC 0x400b err 1]",
"[1.899776 HC 0x08]", "+[1.900544 HC 0x08 err 3]", "[1.901188 HC 0x8d]",
"[1.901239 HC 0x8d err 1]"},
8204,
{.year = 2021,
.month = 8,
.day_of_week = 5,
.day_of_month = 20,
.hour = 7,
.minute = 56,
.second = 27,
.millisecond = 285},
{"2021-08-20T07:56:20.443000Z [1.362299 Sensor create: 0x0]",
"2021-08-20T07:56:20.979000Z [1.898121 HC 0x0b]",
"2021-08-20T07:56:20.979000Z [1.898910 HC 0x400b]",
"2021-08-20T07:56:20.979000Z [1.898964 HC 0x400b err 1]",
"2021-08-20T07:56:20.980000Z [1.899776 HC 0x08]",
"2021-08-20T07:56:20.981000Z +[1.900544 HC 0x08 err 3]",
"2021-08-20T07:56:20.982000Z [1.901188 HC 0x8d]",
"2021-08-20T07:56:20.982000Z [1.901239 HC 0x8d err 1]"}},
{{"[2.947845 HC 0x408]", "+[2.948953 Seed has already been set.]",
"[2.948997 HC 0x408 err 4]", "[8.151214 HC 0x02]", "[8.152845 HC 0x0b]"},
12202,
{.year = 2021,
.month = 8,
.day_of_week = 5,
.day_of_month = 20,
.hour = 7,
.minute = 56,
.second = 31,
.millisecond = 263},
{"2021-08-20T07:56:22.008000Z [2.947845 HC 0x408]",
"2021-08-20T07:56:22.009000Z +[2.948953 Seed has already been set.]",
"2021-08-20T07:56:22.009000Z [2.948997 HC 0x408 err 4]",
"2021-08-20T07:56:27.212000Z [8.151214 HC 0x02]",
"2021-08-20T07:56:27.213000Z [8.152845 HC 0x0b]"}},
{{"Console is enabled; type HELP for help.",
"> [1.124173 event set 0x0000000000002000]",
"[1.124243 hostcmd init 0x0000000000002000]"},
8204,
{.year = 2021,
.month = 8,
.day_of_week = 5,
.day_of_month = 20,
.hour = 7,
.minute = 56,
.second = 27,
.millisecond = 285},
{"1970-01-01T00:00:00.000000Z Console is enabled; type HELP for help.",
"2021-08-20T07:56:20.205000Z > [1.124173 event set 0x0000000000002000]",
"2021-08-20T07:56:20.205000Z [1.124243 hostcmd init "
"0x0000000000002000]"}},
{{"[1.124305 FP_SENSOR_SEL: FPC]", "FPC libfpsensor.a v0.2.0.064",
"[1.191592 FPC1145 id 0x140c]"},
8204,
{.year = 2021,
.month = 8,
.day_of_week = 5,
.day_of_month = 20,
.hour = 7,
.minute = 56,
.second = 27,
.millisecond = 285},
{"2021-08-20T07:56:20.205000Z [1.124305 FP_SENSOR_SEL: FPC]",
"2021-08-20T07:56:20.205000Z FPC libfpsensor.a v0.2.0.064",
"2021-08-20T07:56:20.272000Z [1.191592 FPC1145 id 0x140c]"}},
{.input = {"[1.124305 FP_SENSOR_SEL: FPC]", "FPC libfpsensor.a v0.2.0.064",
"[1.191592 FPC1145 id 0x140c]"},
.expected_result =
{"1970-01-01T00:00:00.000000Z [1.124305 FP_SENSOR_SEL: FPC]",
"1970-01-01T00:00:00.000000Z FPC libfpsensor.a v0.2.0.064",
"1970-01-01T00:00:00.000000Z [1.191592 FPC1145 id 0x140c]"}},
};
void CheckStringTransform(StringTransformer* xfrm,
const TestExample& example,
bool update_timestamp) {
base::Time timestamp;
if (update_timestamp) {
ASSERT_TRUE(base::Time::FromUTCExploded(example.timestamp, &timestamp));
xfrm->UpdateTimestamps(example.ec_uptime, timestamp);
}
for (int i = 0; i < example.input.size(); i++)
EXPECT_EQ(xfrm->AddHostTs(example.input[i]), example.expected_result[i]);
}
// Check basic functionality
TEST(StringTransformerTest, TestAddTimestamp) {
StringTransformer xfrm;
CheckStringTransform(&xfrm, kTransformerTestData[0], true);
CheckStringTransform(&xfrm, kTransformerTestData[1], true);
}
// Check if first lines without EC timestamp in first block have timestamp
// equal to 0101/000000.000000, but when previous timestamp is available then
// it is applied to line without EC timestamp
TEST(StringTransformerTest, TestLinesWithoutTimestamp) {
StringTransformer xfrm;
CheckStringTransform(&xfrm, kTransformerTestData[2], true);
CheckStringTransform(&xfrm, kTransformerTestData[3], true);
}
// Check if 0101/000000.000000 is applied to all lines in block when
// timestamps are not initialized
TEST(StringTransformerTest, TestTimestampsNotInitialized) {
StringTransformer xfrm;
CheckStringTransform(&xfrm, kTransformerTestData[4], false);
}
} // namespace
} // namespace timberslide