diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/check.rs | 21 |
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}") |