blob: 8358cbf27c259aeae8541438d9379b128a1cfac3 [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 <memory>
#include <string>
#include <google/protobuf/util/message_differencer.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <runtime_probe/proto_bindings/runtime_probe.pb.h>
#include "hardware_verifier/hardware_verifier.pb.h"
#include "hardware_verifier/hw_verification_spec_getter_impl.h"
#include "hardware_verifier/test_utils.h"
using google::protobuf::util::MessageDifferencer;
namespace hardware_verifier {
namespace {
class MockVbSystemPropertyGetter : public VbSystemPropertyGetter {
public:
MOCK_CONST_METHOD0(GetCrosDebug, int());
};
} // namespace
class HwVerificationSpecGetterImplTest : public testing::Test {
protected:
void SetUp() {
mock_vb_system_property_getter_ = new MockVbSystemPropertyGetter();
vp_getter_ = std::make_unique<HwVerificationSpecGetterImpl>(
std::unique_ptr<VbSystemPropertyGetter>(
mock_vb_system_property_getter_));
vp_getter_->root_ = GetTestDataPath();
auto comp_info = golden_expected_vp_.add_component_infos();
comp_info->set_component_category(
runtime_probe::ProbeRequest_SupportCategory_battery);
comp_info->set_component_uuid("batt1");
comp_info->set_qualification_status(QualificationStatus::QUALIFIED);
comp_info = golden_expected_vp_.add_component_infos();
comp_info->set_component_category(
runtime_probe::ProbeRequest_SupportCategory_storage);
comp_info->set_component_uuid("storage1");
comp_info->set_qualification_status(QualificationStatus::REJECTED);
comp_info = golden_expected_vp_.add_component_infos();
comp_info->set_component_category(
runtime_probe::ProbeRequest_SupportCategory_storage);
comp_info->set_component_uuid("storage2");
comp_info->set_qualification_status(QualificationStatus::UNQUALIFIED);
}
void SetFakeRoot(const std::string& root_name) {
vp_getter_->root_ = GetTestDataPath().Append(root_name);
}
void SetCrosDebugFlag(int value) {
EXPECT_CALL(*mock_vb_system_property_getter_, GetCrosDebug())
.WillRepeatedly(testing::Return(value));
}
MockVbSystemPropertyGetter* mock_vb_system_property_getter_;
std::unique_ptr<HwVerificationSpecGetterImpl> vp_getter_;
HwVerificationSpec golden_expected_vp_;
};
TEST_F(HwVerificationSpecGetterImplTest, TestGetDefaultPass) {
SetFakeRoot("test_root1");
const auto actual_vp = vp_getter_->GetDefault();
EXPECT_TRUE(actual_vp);
EXPECT_TRUE(
MessageDifferencer::Equivalent(actual_vp.value(), golden_expected_vp_));
}
TEST_F(HwVerificationSpecGetterImplTest, TestGetDefaultFail) {
// The verification spec file in |test_root2| contains invalid data.
SetFakeRoot("test_root2");
EXPECT_FALSE(vp_getter_->GetDefault());
}
TEST_F(HwVerificationSpecGetterImplTest, TestGetFromFileCrosDebugOff) {
const auto tmp_path = GetTestDataPath().Append("test_root1").Append("tmp");
SetCrosDebugFlag(0);
EXPECT_FALSE(vp_getter_->GetFromFile(
tmp_path.Append("hw_verification_spec1.prototxt")));
}
TEST_F(HwVerificationSpecGetterImplTest, TestGetFromFileNoCheckCrosDebug) {
SetCrosDebugFlag(1);
const auto tmp_path = GetTestDataPath().Append("test_root1").Append("tmp");
const auto actual_vp = vp_getter_->GetFromFile(
tmp_path.Append("hw_verification_spec1.prototxt"));
EXPECT_TRUE(actual_vp);
EXPECT_TRUE(
MessageDifferencer::Equivalent(actual_vp.value(), golden_expected_vp_));
// |hw_verification_spec2.prototxt| contains invalid data.
EXPECT_FALSE(vp_getter_->GetFromFile(
tmp_path.Append("hw_verification_spec2.prototxt")));
// |hw_verification_spec3.prototxt| doesn't exist.
EXPECT_FALSE(vp_getter_->GetFromFile(
tmp_path.Append("hw_verification_spec3.prototxt")));
}
} // namespace hardware_verifier