use slotgate::execution::job_outcome::JobOutcome;
use slotgate::execution::job_status::JobStatus;
use slotgate::execution::outcome_line::OutcomeLine;
use std::path::PathBuf;
use std::time::Duration;
fn outcome(status: JobStatus) -> JobOutcome {
JobOutcome {
job_name: String::from("cluster::byzantine_tests::duplicate_prepare"),
status,
duration: Duration::from_millis(28_510),
stdout_path: PathBuf::from(
"logs/run/cluster__byzantine_tests__duplicate_prepare/stdout.log",
),
stderr_path: PathBuf::from(
"logs/run/cluster__byzantine_tests__duplicate_prepare/stderr.log",
),
}
}
#[test]
fn render_a_failed_job_points_at_the_captured_stdout() {
let failed = outcome(JobStatus::Failed);
let rendered = OutcomeLine::render(&failed);
assert!(rendered.contains("[FAIL]"));
assert!(rendered.contains("cluster__byzantine_tests__duplicate_prepare/stdout.log"));
}
#[test]
fn render_a_passed_job_stays_on_one_line() {
let passed = outcome(JobStatus::Passed);
let rendered = OutcomeLine::render(&passed);
assert!(!rendered.contains('\n'));
assert!(!rendered.contains("stdout.log"));
}
#[test]
fn render_a_timed_out_job_points_at_the_captured_stdout() {
let timed_out = outcome(JobStatus::TimedOut);
let rendered = OutcomeLine::render(&timed_out);
assert!(rendered.contains("[TIMEOUT]"));
assert!(rendered.contains("stdout.log"));
}
#[test]
fn render_keeps_the_job_name_and_duration_on_the_headline() {
let rendered = OutcomeLine::render(&outcome(JobStatus::Passed));
assert_eq!(
rendered,
" [PASS] cluster::byzantine_tests::duplicate_prepare (28.51s)"
);
}