Initial Dever 0.0.1

This commit is contained in:
Codex committed 2026-11-03 03:32:07 +00:00
commit 81233d098c
1479 files changed
+163782

No files matched your search

+84
View File
@@ -0,0 +1,84 @@
use super::*;
fn count(binary: &Path) -> i64 {
let result = execute(binary, "demo.account.job_count", "{}");
assert!(
result.status.success(),
"{}",
String::from_utf8_lossy(&result.stderr)
);
serde_json::from_slice::<serde_json::Value>(&result.stdout).unwrap()["data"]
.as_i64()
.unwrap()
}
fn submit(port: u16, bearer: &str, subject: &str) {
let (status, body) = request(
port,
"POST",
"/demo/account/admin/jobs/job_submit",
"fixture.test",
&format!("{bearer}Content-Type: application/json\r\n"),
&serde_json::json!({"subject":subject,"key":subject}).to_string(),
);
assert_eq!(status, 200, "{body}");
}
fn worker(binary: &Path, settings: &serde_json::Value) -> Server {
let path = binary.parent().unwrap().join("worker.json");
let mut settings = settings.clone();
settings["runtime"] = serde_json::json!({"mode":"worker","shutdown_ms":1000});
settings["job"] = serde_json::json!({"workers":1,"poll_ms":10,"lease_ms":2000});
std::fs::write(&path, settings.to_string()).unwrap();
Server(
Command::new(binary)
.args(["--config"])
.arg(path)
.spawn()
.unwrap(),
)
}
fn until(binary: &Path, server: &mut Server, expected: i64) {
let deadline = Instant::now() + Duration::from_secs(10);
while count(binary) != expected {
assert!(server.0.try_wait().unwrap().is_none(), "worker exited");
assert!(Instant::now() < deadline, "Job result not committed");
std::thread::sleep(Duration::from_millis(10));
}
}
pub(super) fn before_revocation(
binary: &Path,
port: u16,
bearer: &str,
settings: &serde_json::Value,
) -> i64 {
let before = count(binary);
submit(port, bearer, "job-valid");
let mut server = worker(binary, settings);
until(binary, &mut server, before + 1);
assert!(
Command::new("sh")
.args(["-c", "kill -TERM \"$1\"", "--", &server.0.id().to_string()])
.status()
.unwrap()
.success()
);
assert!(server.0.wait().unwrap().success());
submit(port, bearer, "job-revoked");
before + 1
}
pub(super) fn after_revocation(binary: &Path, settings: &serde_json::Value, before: i64) {
let submitted = execute(
binary,
"demo.account.job_submit",
r#"{"subject":"job-system","key":"system"}"#,
);
assert!(submitted.status.success());
let mut server = worker(binary, settings);
until(binary, &mut server, before + 1);
std::thread::sleep(Duration::from_millis(60));
assert_eq!(count(binary), before + 1, "revoked User job executed");
}