Integrate release recovery, semantic review, coverage and Windows packaging
This commit is contained in:
@@ -0,0 +1 @@
|
||||
include!("../../build/windows_manifest.rs");
|
||||
@@ -487,9 +487,12 @@ async fn oversized_source_and_json_are_rejected_without_stalling_the_catalog() {
|
||||
.expect("catalog stalled by rejected import")
|
||||
.unwrap();
|
||||
assert_eq!(read.status(), StatusCode::OK);
|
||||
let rejected = tokio::time::timeout(std::time::Duration::from_secs(5), upload)
|
||||
// Completion includes transport/decoding while other tests may saturate
|
||||
// the two-core runner. Catalog responsiveness is asserted separately
|
||||
// above; this watchdog only prevents a hung request from hanging CI.
|
||||
let rejected = tokio::time::timeout(std::time::Duration::from_secs(30), upload)
|
||||
.await
|
||||
.expect("oversized import not rejected promptly")
|
||||
.expect("oversized import did not complete within the test watchdog")
|
||||
.unwrap();
|
||||
assert_eq!(rejected.status(), StatusCode::UNPROCESSABLE_ENTITY);
|
||||
assert_eq!(
|
||||
@@ -500,12 +503,14 @@ async fn oversized_source_and_json_are_rejected_without_stalling_the_catalog() {
|
||||
}
|
||||
// The same budgets apply to replacement and non-mutating candidate checks;
|
||||
// neither endpoint may run expensive structural validation before admission.
|
||||
// Their completion watchdog is not a catalog latency measurement: real
|
||||
// JSON encoding/decoding can contend with accepted deep-graph preparation.
|
||||
for (suffix, media, body) in [
|
||||
("source", "text/plain", source.as_bytes().to_vec()),
|
||||
("model", "application/json", native_json),
|
||||
] {
|
||||
let rejected = tokio::time::timeout(
|
||||
std::time::Duration::from_secs(5),
|
||||
std::time::Duration::from_secs(30),
|
||||
server
|
||||
.client
|
||||
.put(server.url(&format!("/projects/{existing}/{suffix}")))
|
||||
@@ -528,7 +533,7 @@ async fn oversized_source_and_json_are_rejected_without_stalling_the_catalog() {
|
||||
json!({"format":"json", "model":model}),
|
||||
] {
|
||||
let checked = tokio::time::timeout(
|
||||
std::time::Duration::from_secs(5),
|
||||
std::time::Duration::from_secs(30),
|
||||
server
|
||||
.client
|
||||
.post(server.url(&format!("/projects/{existing}/validation")))
|
||||
@@ -568,7 +573,10 @@ async fn accepted_slow_source_does_not_lock_catalog_and_loses_to_a_newer_http_re
|
||||
);
|
||||
// This is within all admission budgets. A nested engineering graph forces
|
||||
// real validation work after the source route's initial revision snapshot.
|
||||
for i in 1..2_000 {
|
||||
// Keep this concurrency fixture below the service's 30-second deadline:
|
||||
// 2,000 nested activities returned a legitimate 504 on the two-core runner.
|
||||
// The overlap assertion below prevents shrinking it into a sequential test.
|
||||
for i in 1..1_000 {
|
||||
source.push_str(&format!(
|
||||
"oa_activity a{i} \"Activity {i}\" {{ parent @a{}; }}\n",
|
||||
i - 1
|
||||
@@ -614,9 +622,12 @@ async fn accepted_slow_source_does_not_lock_catalog_and_loses_to_a_newer_http_re
|
||||
.expect("unrelated preparation held the commit lock")
|
||||
.unwrap();
|
||||
assert_eq!(winner.status(), StatusCode::OK);
|
||||
let loser = tokio::time::timeout(std::time::Duration::from_secs(25), proposed)
|
||||
// The two-second read/PATCH bounds above test responsiveness and lock
|
||||
// ownership. Finishing the deliberately expensive admitted candidate is
|
||||
// a separate watchdog, not a latency promise under parallel CPU contention.
|
||||
let loser = tokio::time::timeout(std::time::Duration::from_secs(45), proposed)
|
||||
.await
|
||||
.unwrap()
|
||||
.expect("admitted candidate did not complete within the test watchdog")
|
||||
.unwrap();
|
||||
assert_eq!(loser.status(), StatusCode::PRECONDITION_FAILED);
|
||||
let failure: Value = loser.json().await.unwrap();
|
||||
|
||||
Reference in New Issue
Block a user