blob: cce4eab1563434c3e380c6c2da8004104b69cb49 [file] [log] [blame]
// 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.
#ifndef SRC_DEVELOPER_DEBUG_DEBUG_AGENT_LOCAL_STREAM_BACKEND_H_
#define SRC_DEVELOPER_DEBUG_DEBUG_AGENT_LOCAL_STREAM_BACKEND_H_
#include "src/developer/debug/debug_agent/debug_agent.h"
#include "src/developer/debug/ipc/protocol.h"
#include "src/developer/debug/shared/message_loop.h"
#include "src/developer/debug/shared/stream_buffer.h"
namespace debug_ipc {
class MessageReader;
} // namespace debug_ipc
namespace debug_agent {
// This class is meant to receive the raw messages outputted by the debug agent.
// The agent's stream calls this backend to output the data and verifies that
// all the content is sent.
//
// We use this class to intercept the messages sent back from the agent and
// react accordingly. This class is somwhat geared towards tests, mainly in the sense that
// notification handlers are needed as they're needed.
class LocalStreamBackend : public debug_ipc::StreamBuffer::Writer {
public:
LocalStreamBackend();
virtual ~LocalStreamBackend();
// Message dispatcher interface.
// This should be overriden by every test interested in a particular set of
// messages. By default they do nothing.
virtual void HandleAttach(debug_ipc::AttachReply) {}
virtual void HandleNotifyException(debug_ipc::NotifyException) {}
virtual void HandleNotifyIO(debug_ipc::NotifyIO) {}
virtual void HandleNotifyModules(debug_ipc::NotifyModules) {}
virtual void HandleNotifyProcessExiting(debug_ipc::NotifyProcessExiting) {}
virtual void HandleNotifyProcessStarting(debug_ipc::NotifyProcessStarting) {}
virtual void HandleNotifyThreadExiting(debug_ipc::NotifyThread) {}
virtual void HandleNotifyThreadStarting(debug_ipc::NotifyThread) {}
// The stream will call this function to send the data to whatever backend it
// is connected to. It returns how much of the input message it could actually
// write. For this tests purposes, we always read the whole message.
size_t ConsumeStreamBufferData(const char* data, size_t len) override;
debug_ipc::StreamBuffer& stream() { return stream_; }
private:
// This is the stream the debug agent will be given to write to.
debug_ipc::StreamBuffer stream_;
};
} // namespace debug_agent
#endif // SRC_DEVELOPER_DEBUG_DEBUG_AGENT_LOCAL_STREAM_BACKEND_H_