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
impl TestServerHarness
Sourcepub async fn spawn() -> Result<Self, Box<dyn Error + Send + Sync>>
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
Sourcepub async fn spawn_with_name(
test_name: &str,
) -> Result<Self, Box<dyn Error + Send + Sync>>
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
Sourcepub async fn spawn_with_modules(
modules: &[&str],
) -> Result<Self, Box<dyn Error + Send + Sync>>
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.
Sourcepub async fn spawn_with_modules_and_env(
modules: &[&str],
env_vars: &[(&str, &str)],
) -> Result<Self, Box<dyn Error + Send + Sync>>
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.
Sourcepub async fn spawn_with_env(
env_vars: &[(&str, &str)],
) -> Result<Self, Box<dyn Error + Send + Sync>>
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.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for TestServerHarness
impl !RefUnwindSafe for TestServerHarness
impl Send for TestServerHarness
impl Sync for TestServerHarness
impl Unpin for TestServerHarness
impl UnsafeUnpin for TestServerHarness
impl !UnwindSafe for TestServerHarness
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request