blob: 8f4b69e0f873c934cc1d8c13a81747c57614e795 [file] [log] [blame] [edit]
// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBHWSEC_BACKEND_MOCK_BACKEND_H_
#define LIBHWSEC_BACKEND_MOCK_BACKEND_H_
#include <memory>
#include <utility>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
// Allow using the backend interface via mock backend.
#define LIBHWSEC_MOCK_BACKEND
#include "libhwsec/backend/backend.h"
#include "libhwsec/backend/mock_attestation.h"
#include "libhwsec/backend/mock_config.h"
#include "libhwsec/backend/mock_da_mitigation.h"
#include "libhwsec/backend/mock_deriving.h"
#include "libhwsec/backend/mock_encryption.h"
#include "libhwsec/backend/mock_event_management.h"
#include "libhwsec/backend/mock_key_management.h"
#include "libhwsec/backend/mock_pinweaver.h"
#include "libhwsec/backend/mock_pinweaver_manager.h"
#include "libhwsec/backend/mock_random.h"
#include "libhwsec/backend/mock_recovery_crypto.h"
#include "libhwsec/backend/mock_ro_data.h"
#include "libhwsec/backend/mock_sealing.h"
#include "libhwsec/backend/mock_session_management.h"
#include "libhwsec/backend/mock_signature_sealing.h"
#include "libhwsec/backend/mock_signing.h"
#include "libhwsec/backend/mock_state.h"
#include "libhwsec/backend/mock_storage.h"
#include "libhwsec/backend/mock_u2f.h"
#include "libhwsec/backend/mock_vendor.h"
#include "libhwsec/backend/mock_version_attestation.h"
namespace hwsec {
class MockBackend : public Backend {
public:
struct MockBackendData {
testing::NiceMock<MockState> state;
testing::NiceMock<MockDAMitigation> da_mitigation;
testing::NiceMock<MockStorage> storage;
testing::NiceMock<MockRoData> ro_data;
testing::NiceMock<MockSealing> sealing;
testing::NiceMock<MockSignatureSealing> signature_sealing;
testing::NiceMock<MockDeriving> deriving;
testing::NiceMock<MockEncryption> encryption;
testing::NiceMock<MockSigning> signing;
testing::NiceMock<MockKeyManagement> key_management;
testing::NiceMock<MockSessionManagement> session_management;
testing::NiceMock<MockConfig> config;
testing::NiceMock<MockRandom> random;
testing::NiceMock<MockPinWeaver> pinweaver;
testing::NiceMock<MockPinWeaverManager> pinweaver_manager;
testing::NiceMock<MockVendor> vendor;
testing::NiceMock<MockRecoveryCrypto> recovery_crypto;
testing::NiceMock<MockU2f> u2f;
testing::NiceMock<MockAttestation> attestation;
testing::NiceMock<MockVersionAttestation> version_attestation;
testing::NiceMock<MockEventManagement> event_management;
};
MockBackend() = default;
explicit MockBackend(std::unique_ptr<Backend> backend)
: default_backend_(std::move(backend)),
mock_data_(MockBackendData{
.state =
testing::NiceMock<MockState>(default_backend_->Get<State>()),
.da_mitigation = testing::NiceMock<MockDAMitigation>(
default_backend_->Get<DAMitigation>()),
.storage = testing::NiceMock<MockStorage>(
default_backend_->Get<Storage>()),
.ro_data =
testing::NiceMock<MockRoData>(default_backend_->Get<RoData>()),
.sealing = testing::NiceMock<MockSealing>(
default_backend_->Get<Sealing>()),
.signature_sealing = testing::NiceMock<MockSignatureSealing>(
default_backend_->Get<SignatureSealing>()),
.deriving = testing::NiceMock<MockDeriving>(
default_backend_->Get<Deriving>()),
.encryption = testing::NiceMock<MockEncryption>(
default_backend_->Get<Encryption>()),
.signing = testing::NiceMock<MockSigning>(
default_backend_->Get<Signing>()),
.key_management = testing::NiceMock<MockKeyManagement>(
default_backend_->Get<KeyManagement>()),
.session_management = testing::NiceMock<MockSessionManagement>(
default_backend_->Get<SessionManagement>()),
.config =
testing::NiceMock<MockConfig>(default_backend_->Get<Config>()),
.random =
testing::NiceMock<MockRandom>(default_backend_->Get<Random>()),
.pinweaver = testing::NiceMock<MockPinWeaver>(
default_backend_->Get<PinWeaver>()),
.pinweaver_manager = testing::NiceMock<MockPinWeaverManager>(
default_backend_->Get<PinWeaverManager>()),
.vendor =
testing::NiceMock<MockVendor>(default_backend_->Get<Vendor>()),
.recovery_crypto = testing::NiceMock<MockRecoveryCrypto>(
default_backend_->Get<RecoveryCrypto>()),
.u2f = testing::NiceMock<MockU2f>(default_backend_->Get<U2f>()),
.attestation = testing::NiceMock<MockAttestation>(
default_backend_->Get<Attestation>()),
.version_attestation = testing::NiceMock<MockVersionAttestation>(
default_backend_->Get<VersionAttestation>()),
.event_management = testing::NiceMock<MockEventManagement>(
default_backend_->Get<EventManagement>()),
}) {}
~MockBackend() override = default;
MockBackendData& GetMock() { return mock_data_; }
private:
State* GetState() override { return &mock_data_.state; }
DAMitigation* GetDAMitigation() override { return &mock_data_.da_mitigation; }
Storage* GetStorage() override { return &mock_data_.storage; }
RoData* GetRoData() override { return &mock_data_.ro_data; }
Sealing* GetSealing() override { return &mock_data_.sealing; }
SignatureSealing* GetSignatureSealing() override {
return &mock_data_.signature_sealing;
}
Deriving* GetDeriving() override { return &mock_data_.deriving; }
Encryption* GetEncryption() override { return &mock_data_.encryption; }
Signing* GetSigning() override { return &mock_data_.signing; }
KeyManagement* GetKeyManagement() override {
return &mock_data_.key_management;
}
SessionManagement* GetSessionManagement() override {
return &mock_data_.session_management;
}
Config* GetConfig() override { return &mock_data_.config; }
Random* GetRandom() override { return &mock_data_.random; }
PinWeaver* GetPinWeaver() override { return &mock_data_.pinweaver; }
PinWeaverManager* GetPinWeaverManager() override {
return &mock_data_.pinweaver_manager;
}
Vendor* GetVendor() override { return &mock_data_.vendor; }
RecoveryCrypto* GetRecoveryCrypto() override {
return &mock_data_.recovery_crypto;
}
U2f* GetU2f() override { return &mock_data_.u2f; }
Attestation* GetAttestation() override { return &mock_data_.attestation; }
VersionAttestation* GetVersionAttestation() override {
return &mock_data_.version_attestation;
}
EventManagement* GetEventManagement() override {
return &mock_data_.event_management;
}
std::unique_ptr<Backend> default_backend_;
MockBackendData mock_data_;
};
} // namespace hwsec
#endif // LIBHWSEC_BACKEND_MOCK_BACKEND_H_