use std::fs::File;
use std::io::Read;
use reqwest;
use common::prelude::*;
use common::command::FisherCommand;
#[test]
fn fisher_executes_webhooks() {
testing_env(|env| {
let out = env.tempdir()?.join("out").to_str().unwrap().to_string();
env.create_script("test.sh", &[
r#"#!/bin/bash"#,
r#"echo "executed" > "${TEST_OUTPUT_FILE}""#,
])?;
let mut config = env.config();
config.env.insert("TEST_OUTPUT_FILE".into(), out.clone());
let mut fisher = FisherCommand::new(&config)?;
let addr = fisher.server_addr()?;
let mut resp = reqwest::get(&format!("http://{}/hook/test.sh", addr))?;
assert_eq!(resp.status().as_u16(), 200);
assert_eq!(resp.text()?, r#"{"status":"ok"}"#);
loop_timeout! {
if let Ok(mut handle) = File::open(&out) {
let mut buffer = String::new();
handle.read_to_string(&mut buffer)?;
if buffer.len() == 0 {
continue;
}
assert_eq!(&buffer, "executed\n");
break;
}
}
fisher.stop()?;
Ok(())
});
}