aboutsummaryrefslogtreecommitdiff
path: root/src/check.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/check.rs')
-rw-r--r--src/check.rs21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/check.rs b/src/check.rs
index a96de5b..9373641 100644
--- a/src/check.rs
+++ b/src/check.rs
@@ -4,8 +4,9 @@ use chrono::Utc;
use futures::{stream::FuturesUnordered, StreamExt};
use log::info;
use serde::Deserialize;
-use std::{sync::Arc, time::Duration};
+use std::{path::PathBuf, sync::Arc, time::Duration};
use tokio::{
+ fs::read_to_string,
process::Command,
time::{sleep, timeout},
};
@@ -26,6 +27,7 @@ pub enum Check {
Http {
title: Option<String>,
url: String,
+ expected: Option<PathBuf>,
},
Shell {
title: String,
@@ -114,14 +116,25 @@ impl Check {
}
}
}
- Check::Http { url, .. } => {
+ Check::Http { url, expected, .. } => {
let r = reqwest::get(url).await?;
- let s = format!(
+ let mut s = format!(
"{} {}",
r.status().as_str(),
r.status().canonical_reason().unwrap_or_default()
);
- if r.status().is_success() {
+ let mut succ = r.status().is_success();
+ if let Some(path) = expected {
+ let actual = r.text().await?;
+ let expected = read_to_string(path).await?;
+ if actual == expected {
+ s += " (content identical)"
+ } else {
+ succ = false;
+ s += " (content differs)"
+ }
+ }
+ if succ {
Ok(s)
} else {
bail!("{s}")