Skip to content

Commit 1a1beaa

Browse files
committed
test(process): isolate timeout cleanup timing from compilation
1 parent 3ce5f0c commit 1a1beaa

1 file changed

Lines changed: 39 additions & 8 deletions

File tree

tests/rss_process_tool_tests.rs

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,26 @@ fn default_artifact_limits() -> ArtifactLimits {
403403
}
404404
}
405405

406+
fn compile_exec_runner(exec: &RssExec) -> AgentRunner {
407+
if exec.unlimited_fuel {
408+
compile_rss_with_fuel(exec.module, None)
409+
} else {
410+
compile_rss(exec.module)
411+
}
412+
}
413+
406414
fn run_rss_exec(fixture: &Fixture, config: &ProcessToolConfig, exec: RssExec) -> RssRun {
415+
let runner = compile_exec_runner(&exec);
416+
run_rss_exec_with_runner(fixture, config, exec, runner, None)
417+
}
418+
419+
fn run_rss_exec_with_runner(
420+
fixture: &Fixture,
421+
config: &ProcessToolConfig,
422+
exec: RssExec,
423+
runner: AgentRunner,
424+
process_spawn_hook: Option<Arc<dyn Fn() + Send + Sync>>,
425+
) -> RssRun {
407426
let lifecycle = match exec.shared_lifecycle.clone() {
408427
Some(lifecycle) => lifecycle,
409428
None => Arc::new(build_lifecycle(
@@ -422,6 +441,9 @@ fn run_rss_exec(fixture: &Fixture, config: &ProcessToolConfig, exec: RssExec) ->
422441
.expect("process capability"),
423442
),
424443
};
444+
if let Some(hook) = process_spawn_hook {
445+
processes.set_before_os_spawn_hook(hook);
446+
}
425447
let artifacts = if exec.enable_artifacts {
426448
Some(Arc::new(
427449
ArtifactCapability::new(lifecycle.as_ref().clone(), owner(), exec.artifact_limits)
@@ -453,11 +475,6 @@ fn run_rss_exec(fixture: &Fixture, config: &ProcessToolConfig, exec: RssExec) ->
453475
},
454476
"config": rss_config_json(config),
455477
});
456-
let runner = if exec.unlimited_fuel {
457-
compile_rss_with_fuel(exec.module, None)
458-
} else {
459-
compile_rss(exec.module)
460-
};
461478
let output = runner
462479
.with_host(host)
463480
.run_with_context(json_to_vm_value(&context))
@@ -1077,15 +1094,29 @@ fn foreground_timeout_kills_child_and_grandchild() {
10771094
],
10781095
"timeout_ms": 120
10791096
});
1080-
let started = Instant::now();
1081-
let rss = run_rss_exec(
1097+
let spawn_started_at = Arc::new(Mutex::new(None));
1098+
let exec = default_exec("terminal.rss", "terminal", arguments);
1099+
let runner = compile_exec_runner(&exec);
1100+
let rss = run_rss_exec_with_runner(
10821101
&fixture,
10831102
&config,
1084-
default_exec("terminal.rss", "terminal", arguments),
1103+
exec,
1104+
runner,
1105+
Some({
1106+
let spawn_started_at = Arc::clone(&spawn_started_at);
1107+
Arc::new(move || {
1108+
*spawn_started_at.lock().expect("spawn timer") = Some(Instant::now());
1109+
})
1110+
}),
10851111
);
10861112
assert_eq!(rss.result["ok"], json!(false));
10871113
assert_eq!(rss.result["error"]["code"], json!("deadline_elapsed"));
10881114
assert_canonical_envelope(&rss.result);
1115+
let started = spawn_started_at
1116+
.lock()
1117+
.expect("spawn timer")
1118+
.take()
1119+
.expect("spawn timer marker");
10891120
assert!(started.elapsed() < Duration::from_secs(2));
10901121
let pid: u32 = fs::read_to_string(&marker)
10911122
.expect("pid marker")

0 commit comments

Comments
 (0)