blob: 2887495eb5c4a1949ea6298c1264d53211987539 [file] [log] [blame]
// 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;
};
explicit MockLimboProvider() : LimboProvider() {}
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;
fitx::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_