blob: fad72becccb7f1cc224ca40e273370545f186caf [file]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "libec/rollback_info_command.h"
#include <memory>
#include <utility>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
namespace ec {
namespace {
using ::testing::Return;
TEST(RollbackInfoCommand, RollbackInfoCommand) {
RollbackInfoCommand cmd_v0(0);
EXPECT_EQ(cmd_v0.Version(), 0);
EXPECT_EQ(cmd_v0.GetVersion(), 0);
EXPECT_EQ(cmd_v0.Command(), EC_CMD_ROLLBACK_INFO);
RollbackInfoCommand cmd_v1(1);
EXPECT_EQ(cmd_v1.Version(), 1);
EXPECT_EQ(cmd_v1.GetVersion(), 1);
EXPECT_EQ(cmd_v1.Command(), EC_CMD_ROLLBACK_INFO);
}
// Mock the underlying EcCommand to test.
class RollbackInfoCommandTest : public testing::Test {
public:
class MockRollbackInfoCommand_v0 : public RollbackInfoCommand_v0 {
public:
using RollbackInfoCommand_v0::RollbackInfoCommand_v0;
MOCK_METHOD(const struct ec_response_rollback_info*,
Resp,
(),
(const, override));
};
class MockRollbackInfoCommand_v1 : public RollbackInfoCommand_v1 {
public:
using RollbackInfoCommand_v1::RollbackInfoCommand_v1;
MOCK_METHOD(const struct ec_response_rollback_info_v1*,
Resp,
(),
(const, override));
};
};
TEST_F(RollbackInfoCommandTest, Success_v0) {
auto mock_v0 = std::make_unique<MockRollbackInfoCommand_v0>();
struct ec_response_rollback_info response = {
.id = 3,
.rollback_min_version = 2,
.rw_rollback_version = 1,
};
EXPECT_CALL(*mock_v0, Resp).WillRepeatedly(Return(&response));
RollbackInfoCommand mock_command(0, std::move(mock_v0), nullptr);
EXPECT_EQ(mock_command.ID(), 3);
EXPECT_EQ(mock_command.MinVersion(), 2);
EXPECT_EQ(mock_command.RWVersion(), 1);
EXPECT_FALSE(mock_command.IsSecretInited().has_value());
}
TEST_F(RollbackInfoCommandTest, Success_v1) {
auto mock_v1 = std::make_unique<MockRollbackInfoCommand_v1>();
struct ec_response_rollback_info_v1 response = {
.id = 4,
.rollback_min_version = 3,
.rw_rollback_version = 2,
.is_secret_inited = 1,
};
EXPECT_CALL(*mock_v1, Resp).WillRepeatedly(Return(&response));
RollbackInfoCommand mock_command(1, nullptr, std::move(mock_v1));
EXPECT_EQ(mock_command.ID(), 4);
EXPECT_EQ(mock_command.MinVersion(), 3);
EXPECT_EQ(mock_command.RWVersion(), 2);
ASSERT_TRUE(mock_command.IsSecretInited().has_value());
EXPECT_TRUE(mock_command.IsSecretInited().value());
}
} // namespace
} // namespace ec