#[test]
fn create_source_docker_requires_an_image_name() {
match keyhog_sources::create_source("docker", None) {
Err(keyhog_core::SourceError::InvalidConfiguration {
source_name,
detail,
}) => {
assert_eq!(source_name, "docker");
assert_eq!(detail, "an image name is required");
}
Err(err) => panic!("docker returned the wrong error: {err}"),
Ok(_) => panic!("docker without an image must return Err"),
}
}
#[test]
fn create_source_s3_requires_a_bucket_name() {
match keyhog_sources::create_source("s3", None) {
Err(keyhog_core::SourceError::InvalidConfiguration {
source_name,
detail,
}) => {
assert_eq!(source_name, "s3");
assert_eq!(detail, "a bucket name is required");
}
Err(err) => panic!("s3 returned the wrong error: {err}"),
Ok(_) => panic!("s3 without a bucket must return Err"),
}
}
#[test]
fn create_source_web_rejects_non_boolean_calibration_flag() {
match keyhog_sources::create_source("web", Some("autoroute_loopback_calibration=notabool")) {
Err(keyhog_core::SourceError::InvalidConfiguration {
source_name,
detail,
}) => {
assert_eq!(source_name, "web");
assert!(detail.contains("boolean parameter must be true/false"));
assert!(detail.contains("notabool"));
}
Err(err) => panic!("web returned the wrong error: {err}"),
Ok(_) => panic!("a non-boolean calibration flag must return Err"),
}
}
#[test]
fn create_source_web_accepts_valid_calibration_flag_with_url() {
let result = keyhog_sources::create_source(
"web",
Some("autoroute_loopback_calibration=true\nhttps://example.com/"),
);
assert!(
result.is_ok(),
"a valid calibration flag + URL must build the web source; got {:?}",
result.err().map(|e| e.to_string())
);
}