use super::*;
use crate::{
config::Configuration,
event_handlers::{Command, StatsHandle, StatsHandler},
traits::FeroxSerialize,
CommandSender, Joiner,
};
use anyhow::Result;
use reqwest::StatusCode;
use std::sync::Arc;
use tempfile::NamedTempFile;
pub fn setup_stats_test() -> (Joiner, StatsHandle) {
let config = Arc::new(Configuration::new().unwrap());
StatsHandler::initialize(config)
}
pub async fn teardown_stats_test(sender: CommandSender, task: Joiner) {
sender.send(Command::Exit).unwrap_or_default();
task.await.unwrap().unwrap();
}
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
async fn statistics_handler_exits() -> Result<()> {
let (task, handle) = setup_stats_test();
handle.tx.send(Command::Exit)?;
task.await??;
Ok(())
}
#[test]
fn save_writes_stats_object_to_disk() {
let config = Configuration::new().unwrap();
let stats = Stats::new(config.json);
stats.add_request();
stats.add_request();
stats.add_request();
stats.add_request();
stats.add_error(StatError::Timeout);
stats.add_error(StatError::Timeout);
stats.add_error(StatError::Timeout);
stats.add_error(StatError::Timeout);
stats.add_status_code(StatusCode::OK);
stats.add_status_code(StatusCode::OK);
stats.add_status_code(StatusCode::OK);
let outfile = NamedTempFile::new().unwrap();
assert!(stats.save(174.33, outfile.path().to_str().unwrap()).is_ok());
assert!(stats.as_json().unwrap().contains("statistics"));
assert!(stats.as_json().unwrap().contains("11")); assert!(stats.as_str().is_empty());
}