| /* 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 "hardware_verifier/dbus_adaptor.h" |
| |
| #include <memory> |
| #include <utility> |
| #include <vector> |
| |
| #include <brillo/dbus/mock_dbus_method_response.h> |
| #include <google/protobuf/util/message_differencer.h> |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| #include "hardware_verifier/hardware_verifier.pb.h" |
| #include "hardware_verifier/hw_verification_report_getter.h" |
| #include "hardware_verifier/mock_hw_verification_report_getter.h" |
| |
| namespace hardware_verifier { |
| |
| namespace { |
| |
| using ::brillo::dbus_utils::MockDBusMethodResponse; |
| |
| using ::testing::_; |
| using ::testing::DoAll; |
| using ::testing::NiceMock; |
| using ::testing::Return; |
| using ::testing::SetArgPointee; |
| |
| using ReportGetterErrorCode = HwVerificationReportGetter::ErrorCode; |
| |
| class DBusAdaptorForTesting : public DBusAdaptor { |
| public: |
| explicit DBusAdaptorForTesting( |
| std::unique_ptr<HwVerificationReportGetter> vr_getter) |
| : DBusAdaptor(std::move(vr_getter)) {} |
| }; |
| |
| class DBusAdaptorTest : public testing::Test { |
| protected: |
| void SetUp() override { |
| auto mock_vr_getter = |
| std::make_unique<NiceMock<MockHwVerificationReportGetter>>(); |
| vr_getter_ = mock_vr_getter.get(); |
| adaptor_.reset(new DBusAdaptorForTesting(std::move(mock_vr_getter))); |
| } |
| |
| void TearDown() override {} |
| |
| // Mocks that will be passed into |adaptor_| for its internal use. |
| MockHwVerificationReportGetter* vr_getter_; |
| |
| // The adaptor that we'll be testing. |
| std::unique_ptr<DBusAdaptor> adaptor_; |
| }; |
| |
| TEST_F(DBusAdaptorTest, VerifyComponents_Success) { |
| HwVerificationReport vr; |
| vr.set_is_compliant(true); |
| ON_CALL(*vr_getter_, Get(_, _, _)) |
| .WillByDefault( |
| DoAll(SetArgPointee<2>(ReportGetterErrorCode ::kErrorCodeNoError), |
| Return(vr))); |
| base::Optional<VerifyComponentsReply> reply; |
| auto response = |
| std::make_unique<MockDBusMethodResponse<VerifyComponentsReply>>(nullptr); |
| response->save_return_args(&reply); |
| adaptor_->VerifyComponents(std::move(response)); |
| |
| EXPECT_TRUE(reply); |
| EXPECT_EQ(reply->error(), ERROR_OK); |
| EXPECT_TRUE(google::protobuf::util::MessageDifferencer::Equals( |
| reply->hw_verification_report(), vr)); |
| } |
| |
| TEST_F(DBusAdaptorTest, VerifyComponents_Fail) { |
| std::vector<std::pair<ReportGetterErrorCode, ErrorCode>> testdata = { |
| {ReportGetterErrorCode::kErrorCodeMissingDefaultHwVerificationSpecFile, |
| ERROR_SKIPPED}, |
| {ReportGetterErrorCode::kErrorCodeInvalidHwVerificationSpecFile, |
| ERROR_INVALID_HW_VERIFICATION_SPEC_FILE}, |
| {ReportGetterErrorCode::kErrorCodeInvalidProbeResultFile, |
| ERROR_INVALID_PROBE_RESULT_FILE}, |
| {ReportGetterErrorCode::kErrorCodeProbeFail, ERROR_PROBE_FAIL}, |
| {ReportGetterErrorCode:: |
| kErrorCodeProbeResultHwVerificationSpecMisalignment, |
| ERROR_PROBE_RESULT_HW_VERIFICATION_SPEC_MISALIGNMENT}}; |
| for (const auto& [input, output] : testdata) { |
| ON_CALL(*vr_getter_, Get(_, _, _)) |
| .WillByDefault(DoAll(SetArgPointee<2>(input), Return(base::nullopt))); |
| base::Optional<VerifyComponentsReply> reply; |
| auto response = |
| std::make_unique<MockDBusMethodResponse<VerifyComponentsReply>>( |
| nullptr); |
| response->save_return_args(&reply); |
| adaptor_->VerifyComponents(std::move(response)); |
| |
| EXPECT_TRUE(reply); |
| EXPECT_EQ(reply->error(), output); |
| } |
| } |
| |
| } // namespace |
| |
| } // namespace hardware_verifier |