| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_DEVELOPER_DEBUG_DEBUG_AGENT_MOCK_LIMBO_PROVIDER_H_ |
| #define SRC_DEVELOPER_DEBUG_DEBUG_AGENT_MOCK_LIMBO_PROVIDER_H_ |
| |
| #include <map> |
| #include <vector> |
| |
| #include "src/developer/debug/debug_agent/limbo_provider.h" |
| #include "src/developer/debug/debug_agent/mock_exception_handle.h" |
| #include "src/developer/debug/debug_agent/mock_process_handle.h" |
| #include "src/developer/debug/debug_agent/mock_thread_handle.h" |
| |
| namespace debug_agent { |
| |
| class MockLimboProvider final : public LimboProvider { |
| public: |
| struct MockRecord { |
| MockRecord(MockProcessHandle p, MockThreadHandle t, MockExceptionHandle e) |
| : process(std::move(p)), thread(std::move(t)), exception(std::move(e)) {} |
| |
| MockProcessHandle process; |
| MockThreadHandle thread; |
| MockExceptionHandle exception; |
| }; |
| |
| MockLimboProvider() = default; |
| MockLimboProvider(MockLimboProvider&&) = default; |
| virtual ~MockLimboProvider() = default; |
| |
| const std::vector<zx_koid_t>& release_calls() const { return release_calls_; } |
| |
| // LimboProvider implementation. |
| bool Valid() const override { return true; } |
| bool IsProcessInLimbo(zx_koid_t process_koid) const override; |
| const RecordMap& GetLimboRecords() const override; |
| fit::result<debug::Status, RetrievedException> RetrieveException(zx_koid_t process_koid) override; |
| debug::Status ReleaseProcess(zx_koid_t process_koid) override; |
| |
| void AppendException(MockProcessHandle process, MockThreadHandle thread, |
| MockExceptionHandle exception); |
| void CallOnEnterLimbo(); |
| |
| private: |
| static Record FromMockRecord(const MockRecord& mock); |
| |
| // Current contents of limbo. |
| std::map<zx_koid_t, MockRecord> mock_records_; |
| |
| // Recomputed from mock_records_ for every call to GetLimboRecords() because it must return a |
| // reference. |
| mutable RecordMap limbo_; |
| |
| std::vector<zx_koid_t> release_calls_; |
| }; |
| |
| } // namespace debug_agent |
| |
| #endif // SRC_DEVELOPER_DEBUG_DEBUG_AGENT_MOCK_LIMBO_PROVIDER_H_ |