Skip to main content

TestServerHarness

Struct TestServerHarness 

Source
pub struct TestServerHarness { /* private fields */ }
Expand description

Test harness that spawns a server process.

Automatically cleans up the server process when dropped.

§Log Capture

All spawn methods capture server logs to tmp/test-logs/{test_name}_{timestamp}.log.

  • spawn() - Auto-extracts test name from thread (recommended)
  • spawn_with_name(name) - Explicit test name for custom naming

Implementations§

Source§

impl TestServerHarness

Source

pub async fn spawn() -> Result<Self, Box<dyn Error + Send + Sync>>

Spawn server with automatic log capture.

Server stderr is captured to tmp/test-logs/{test_name}_{timestamp}.log. Test name is auto-extracted from the current thread name (set by cargo test).

For explicit test naming, use spawn_with_name().

§Errors

Returns error if:

  • Binary not found at expected path
  • Server fails to start within timeout
  • Server panics during startup
  • Log directory cannot be created
Source

pub async fn spawn_with_name( test_name: &str, ) -> Result<Self, Box<dyn Error + Send + Sync>>

Spawn server with explicit test name for log capture.

Server stderr is captured to tmp/test-logs/{test_name}_{timestamp}.log. This is invaluable for debugging test failures as it preserves the server’s tracing output including mode transitions, command executions, and resolver calls.

The server is started with REOVIM_LOG=debug by default for full tracing visibility.

Use this when you need a custom test name (e.g., multi-client tests with a _server suffix).

§Example
let harness = TestServerHarness::spawn_with_name("test_multi_client_server").await?;
// ... run test ...
// On failure, check: tmp/test-logs/test_multi_client_server_20260124_120000.log
§Errors

Returns error if:

  • Binary not found at expected path
  • Server fails to start within timeout
  • Server panics during startup
  • Log directory cannot be created
Source

pub async fn spawn_with_modules( modules: &[&str], ) -> Result<Self, Box<dyn Error + Send + Sync>>

Spawn server with extra modules loaded.

Sets REOVIM_EXTRA_MODULES env var on the spawned server process. Test name is auto-extracted from the current thread name.

§Example
let harness = TestServerHarness::spawn_with_modules(&["textobjects"]).await?;
§Errors

Returns error if server fails to spawn or start.

Source

pub async fn spawn_with_modules_and_env( modules: &[&str], env_vars: &[(&str, &str)], ) -> Result<Self, Box<dyn Error + Send + Sync>>

Spawn server with extra modules and custom environment variables.

§Errors

Returns error if server fails to spawn or start.

Source

pub async fn spawn_with_env( env_vars: &[(&str, &str)], ) -> Result<Self, Box<dyn Error + Send + Sync>>

Spawn server with custom environment variables.

Passes additional env vars to the server process. Useful for overriding XDG_DATA_HOME to provide test fixture data.

§Example
let harness = TestServerHarness::spawn_with_env(
    &[("XDG_DATA_HOME", "/tmp/test-fixtures")],
).await?;
§Errors

Returns error if server fails to spawn or start.

Source

pub const fn port(&self) -> u16

Get the port the server is listening on.

Source

pub fn log_path(&self) -> Option<&Path>

Get the path to the log file.

Returns the path to the log file where server stderr is captured. All spawn methods enable log capture, so this always returns Some.

Trait Implementations§

Source§

impl Drop for TestServerHarness

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more