mcp: HTTP concurrency test; state-machine suite tolerates a contended disk
check / check (push) Canceled after 0s
check / check (push) Canceled after 0s
tests/http_concurrency.rs: six HTTP clients at once against one store (main.rs serve_http shares it): every bare entry refused at threshold 0.00, every receipted one posted, each contested draft posted exactly once, books verify and balance, a restart replays the same head. spec_mcp.rs: the response timeout is 180 s (a mutation run's jobs contend for a synced disk; the baseline timed out at 30 s), and MCP_CASES sets the state machine's cases (just mutants-mcp uses 16). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GWVo7x3UHw5kwCUaWxiejX
This commit is contained in:
1 parent
e6c69a9d34
commit
9837c62117
5 files changed
+393
-4
No files matched your search
@@ -27,7 +27,18 @@ use std::sync::mpsc::{Receiver, RecvTimeoutError, channel};
|
||||
use std::time::Duration;
|
||||
|
||||
/// How long any single response may take before the server counts as hung.
|
||||
const TIMEOUT: Duration = Duration::from_secs(30);
|
||||
/// Long enough for a server's first answer while a mutation run's jobs
|
||||
/// contend for the disk (every journal append is synced).
|
||||
const TIMEOUT: Duration = Duration::from_secs(180);
|
||||
|
||||
/// Random cases for the state machine: 64 on every check; `MCP_CASES`
|
||||
/// sets fewer for a mutation run, more for a deeper one.
|
||||
fn cases() -> u32 {
|
||||
std::env::var("MCP_CASES")
|
||||
.ok()
|
||||
.and_then(|v| v.parse().ok())
|
||||
.unwrap_or(64)
|
||||
}
|
||||
|
||||
/// Keys whose values are money. Derived from the `outputSchema`s: every
|
||||
/// string property described as an amount or "decimal string", plus the
|
||||
@@ -1279,7 +1290,7 @@ fn run_op(m: &mut Mcp, k: &mut Known, op: &Op) {
|
||||
}
|
||||
|
||||
proptest! {
|
||||
#![proptest_config(ProptestConfig { cases: 64, failure_persistence: None, ..ProptestConfig::default() })]
|
||||
#![proptest_config(ProptestConfig { cases: cases(), failure_persistence: None, ..ProptestConfig::default() })]
|
||||
|
||||
/// Invariants 2 and 7 under random call sequences: every call gets
|
||||
/// exactly one response with its id, result xor error; any refusal
|
||||
|
||||
Reference in new issue
Block a user