| // Copyright 2018 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. |
| |
| #include "garnet/bin/zxdb/client/remote_api_test.h" |
| |
| #include <inttypes.h> |
| |
| #include "garnet/bin/zxdb/client/session.h" |
| #include "garnet/bin/zxdb/client/system_impl.h" |
| #include "garnet/bin/zxdb/client/target_impl.h" |
| #include "garnet/bin/zxdb/client/thread_impl.h" |
| #include "garnet/lib/debug_ipc/protocol.h" |
| #include "lib/fxl/strings/string_printf.h" |
| |
| namespace zxdb { |
| |
| RemoteAPITest::RemoteAPITest() { loop_.Init(); } |
| |
| RemoteAPITest::~RemoteAPITest() { loop_.Cleanup(); } |
| |
| void RemoteAPITest::SetUp() { |
| session_ = std::make_unique<Session>(GetRemoteAPIImpl(), GetArch()); |
| } |
| |
| void RemoteAPITest::TearDown() { session_.reset(); } |
| |
| Process* RemoteAPITest::InjectProcess(uint64_t process_koid) { |
| auto targets = session().system_impl().GetTargetImpls(); |
| if (targets.size() != 1u) { |
| ADD_FAILURE(); |
| return nullptr; |
| } |
| if (targets[0]->GetState() != Target::State::kNone) { |
| ADD_FAILURE(); |
| return nullptr; |
| } |
| targets[0]->CreateProcessForTesting(process_koid, "test"); |
| return targets[0]->GetProcess(); |
| } |
| |
| Thread* RemoteAPITest::InjectThread(uint64_t process_koid, |
| uint64_t thread_koid) { |
| debug_ipc::NotifyThread notify; |
| notify.process_koid = process_koid; |
| notify.record.koid = thread_koid; |
| notify.record.name = fxl::StringPrintf("test %" PRIu64, thread_koid); |
| notify.record.state = debug_ipc::ThreadRecord::State::kRunning; |
| |
| session_->DispatchNotifyThread( |
| debug_ipc::MsgHeader::Type::kNotifyThreadStarting, notify); |
| |
| return session_->ThreadImplFromKoid(process_koid, thread_koid); |
| } |
| |
| void RemoteAPITest::InjectException( |
| const debug_ipc::NotifyException& exception) { |
| session_->DispatchNotifyException(exception); |
| } |
| |
| } // namespace zxdb |