blob: d1d2a103dd6bd0e43de86e708da845e673c99d99 [file] [log] [blame]
// Copyright 2022 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 "src/developer/debug/e2e_tests/e2e_test.h"
#include <filesystem>
#include "src/developer/debug/e2e_tests/ffx_debug_agent_bridge.h"
#include "src/developer/debug/zxdb/client/setting_schema_definition.h"
#include "src/developer/debug/zxdb/common/err.h"
#include "src/developer/debug/zxdb/common/host_util.h"
namespace zxdb {
E2eTest::E2eTest() {
session_ = std::make_unique<Session>();
// Setup symbols.
std::filesystem::path symbol_dir =
std::filesystem::path(GetSelfPath()).parent_path() / ZXDB_E2E_TESTS_SYMBOL_DIR;
session_->system().settings().SetList(ClientSettings::System::kBuildIdDirs,
{symbol_dir.string()});
session_->breakpoint_observers().AddObserver(this);
session_->component_observers().AddObserver(this);
session_->process_observers().AddObserver(this);
session_->thread_observers().AddObserver(this);
// Use mock console so we don't have to deal with plaintext output in CI environment which won't
// handle control characters from the line input library or UTF-8 characters. Any output will be
// from reporting errors directly from the test.
console_ = std::make_unique<MockConsole>(session_.get());
console_->EnableOutput();
console_->Init();
FfxDebugAgentBridge* bridge = FfxDebugAgentBridge::Get();
FX_CHECK(bridge) << "debug_agent bridge failed to initialize.";
socket_path_ = bridge->GetDebugAgentSocketPath();
Err e = ConnectToDebugAgent();
FX_CHECK(e.ok()) << e.msg();
FX_CHECK(session().IsConnected()) << "Not connected to DebugAgent.";
}
E2eTest::~E2eTest() {
// Needs to be destructed before |session_|.
console_->Quit();
console_.reset();
Err e = session_->Disconnect();
FX_CHECK(e.ok()) << e.msg();
session_->breakpoint_observers().RemoveObserver(this);
session_->component_observers().RemoveObserver(this);
session_->process_observers().RemoveObserver(this);
session_->thread_observers().RemoveObserver(this);
session_.reset();
}
Err E2eTest::ConnectToDebugAgent() {
SessionConnectionInfo info;
info.type = SessionConnectionType::kUnix;
info.host = socket_path_;
Err err;
session_->Connect(info, [&err, this](const Err& e) {
err = e;
loop().QuitNow();
});
loop().Run();
return err;
}
} // namespace zxdb