TerminalBackend
src/terminal_backend.rs
provides the core functionality for interacting with a terminal process. It is responsible for
spawning a shell, sending commands to it, and reading its output. This allows the application to programmatically
control a terminal session to execute and verify the steps defined in choreo
test scripts.
High-Level Description
The TerminalBackend
struct encapsulates a pseudo-terminal (PTY) session, acting as the bridge between the abstract
test Action
s in the AST and concrete operations in a real terminal.
Its primary challenge is solving the “blocking I/O” problem: reading from a terminal will freeze an application until
there is new output. The TerminalBackend
solves this by employing a multi-threaded design. Think of it like a
newsroom:
- The main thread is the news anchor, running the test and deciding what needs to happen next.
- A dedicated reader thread acts as a field reporter, who is sent out to watch the terminal. The reporter waits patiently for any news (output) and immediately sends it back to the newsroom via a channel (a secure message queue).
This ensures the news anchor (the main thread) is never stuck waiting and can remain responsive, checking for new messages from the reporter whenever it needs to.