| // 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_ |