77 lines
2.3 KiB
Rust
77 lines
2.3 KiB
Rust
use remora_contracts::generated_wire::{EventFrame, JobFailure, JobSubmission};
|
|
use serde::de::DeserializeOwned;
|
|
use serde_json::{Value, json};
|
|
|
|
#[test]
|
|
fn generated_roots_accept_the_shared_valid_corpus() {
|
|
let corpus: Value =
|
|
serde_json::from_str(include_str!("../../../contracts/golden/domain.json")).unwrap();
|
|
assert_all::<JobSubmission>(&corpus["job_submissions"]);
|
|
assert_all::<JobFailure>(&corpus["job_failures"]);
|
|
assert_all::<EventFrame>(&corpus["event_frames"]);
|
|
}
|
|
|
|
#[test]
|
|
fn generated_roots_reject_governance_regressions() {
|
|
assert_invalid::<JobSubmission>(json!({
|
|
"source": {
|
|
"kind": "http",
|
|
"url": "not a URL",
|
|
"result_path": "file.bin"
|
|
}
|
|
}));
|
|
assert_invalid::<JobSubmission>(json!({
|
|
"source": {
|
|
"kind": "hugging_face",
|
|
"repository_type": "model",
|
|
"repository_id": "missing-owner",
|
|
"revision": "main"
|
|
}
|
|
}));
|
|
assert_invalid::<JobFailure>(json!({
|
|
"class": "source_not_found",
|
|
"message": "missing",
|
|
"retryable": true
|
|
}));
|
|
assert_invalid::<EventFrame>(json!({
|
|
"schema_version": 2,
|
|
"kind": "heartbeat",
|
|
"event_id": "event_0001",
|
|
"sequence": 1,
|
|
"cursor": "cursor-value-0001",
|
|
"occurred_at": "2026-07-15T00:00:00Z"
|
|
}));
|
|
assert_invalid::<EventFrame>(json!({
|
|
"schema_version": 1,
|
|
"kind": "heartbeat",
|
|
"event_id": "event_0001",
|
|
"sequence": 1,
|
|
"cursor": "cursor-value-0001",
|
|
"occurred_at": "2026-07-15T00:00:00Z",
|
|
"unexpected": true
|
|
}));
|
|
let paths: Vec<Value> = (0..=10_000)
|
|
.map(|index| Value::String(format!("file-{index}")))
|
|
.collect();
|
|
assert_invalid::<JobSubmission>(json!({
|
|
"source": {
|
|
"kind": "hugging_face",
|
|
"repository_type": "model",
|
|
"repository_id": "owner/repository",
|
|
"revision": "main",
|
|
"selection": {
|
|
"paths": paths
|
|
}
|
|
}
|
|
}));
|
|
}
|
|
|
|
fn assert_all<T: DeserializeOwned>(values: &Value) {
|
|
for value in values.as_array().unwrap() {
|
|
serde_json::from_value::<T>(value.clone()).unwrap();
|
|
}
|
|
}
|
|
|
|
fn assert_invalid<T: DeserializeOwned>(value: Value) {
|
|
assert!(serde_json::from_value::<T>(value).is_err());
|
|
}
|