use super::validate_governance::*;
use super::validate_ordering_b::*;
use super::validate_ownership::*;
use super::validate_safety::*;
use std::io::Write;
fn write_temp_config(yaml: &str) -> tempfile::NamedTempFile {
let mut f = tempfile::NamedTempFile::new().unwrap();
f.write_all(yaml.as_bytes()).unwrap();
f.flush().unwrap();
f
}
fn basic_config() -> &'static str {
r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
pkg_nginx:
type: package
machine: m
provider: apt
packages: [nginx]
svc_nginx:
type: service
machine: m
name: nginx
depends_on: [pkg_nginx]
"#
}
#[test]
fn test_circular_deps_no_cycles() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_circular_deps(f.path(), false);
assert!(result.is_ok());
}
#[test]
fn test_circular_deps_no_cycles_json() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_circular_deps(f.path(), true);
assert!(result.is_ok());
}
#[test]
fn test_circular_deps_with_cycle() {
let yaml = r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
a:
type: package
machine: m
provider: apt
packages: [a]
depends_on: [b]
b:
type: package
machine: m
provider: apt
packages: [b]
depends_on: [a]
"#;
let f = write_temp_config(yaml);
let result = cmd_validate_check_circular_deps(f.path(), false);
let _ = result;
}
#[test]
fn test_circular_deps_with_cycle_json() {
let yaml = r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
a:
type: package
machine: m
provider: apt
packages: [a]
depends_on: [b]
b:
type: package
machine: m
provider: apt
packages: [b]
depends_on: [a]
"#;
let f = write_temp_config(yaml);
let result = cmd_validate_check_circular_deps(f.path(), true);
let _ = result;
}
#[test]
fn test_machine_refs_valid() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_machine_refs(f.path(), false);
assert!(result.is_ok());
}
#[test]
fn test_machine_refs_valid_json() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_machine_refs(f.path(), true);
assert!(result.is_ok());
}
#[test]
fn test_machine_refs_invalid() {
let yaml = r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
pkg:
type: package
machine: nonexistent
provider: apt
packages: [curl]
"#;
let f = write_temp_config(yaml);
let result = cmd_validate_check_machine_refs(f.path(), false);
let _ = result; }
#[test]
fn test_machine_refs_invalid_json() {
let yaml = r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
pkg:
type: package
machine: nonexistent
provider: apt
packages: [curl]
"#;
let f = write_temp_config(yaml);
let result = cmd_validate_check_machine_refs(f.path(), true);
let _ = result;
}
#[test]
fn test_circular_deps_missing_file() {
let result =
cmd_validate_check_circular_deps(std::path::Path::new("/nonexistent.yaml"), false);
assert!(result.is_err());
}
#[test]
fn test_naming_pattern_valid() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_naming_pattern(f.path(), false, "^[a-z_]+$");
assert!(result.is_ok());
}
#[test]
fn test_naming_pattern_valid_json() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_naming_pattern(f.path(), true, "^[a-z_]+$");
assert!(result.is_ok());
}
#[test]
fn test_naming_pattern_violation() {
let yaml = r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
MyBadName:
type: package
machine: m
provider: apt
packages: [curl]
"#;
let f = write_temp_config(yaml);
let result = cmd_validate_check_resource_naming_pattern(f.path(), false, "^[a-z_]+$");
let _ = result;
}
#[test]
fn test_naming_pattern_violation_json() {
let yaml = r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
MyBadName:
type: package
machine: m
provider: apt
packages: [curl]
"#;
let f = write_temp_config(yaml);
let result = cmd_validate_check_resource_naming_pattern(f.path(), true, "^[a-z_]+$");
let _ = result;
}
#[test]
fn test_provider_support_valid() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_provider_support(f.path(), false);
assert!(result.is_ok());
}
#[test]
fn test_provider_support_valid_json() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_provider_support(f.path(), true);
assert!(result.is_ok());
}
#[test]
fn test_dep_refs_valid() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_dependency_refs(f.path(), false);
assert!(result.is_ok());
}
#[test]
fn test_dep_refs_valid_json() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_dependency_refs(f.path(), true);
assert!(result.is_ok());
}
#[test]
fn test_dep_refs_broken() {
let yaml = r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
svc:
type: service
machine: m
name: nginx
depends_on: [nonexistent_resource]
"#;
let f = write_temp_config(yaml);
let result = cmd_validate_check_resource_dependency_refs(f.path(), false);
let _ = result;
}
#[test]
fn test_dep_refs_broken_json() {
let yaml = r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
svc:
type: service
machine: m
name: nginx
depends_on: [nonexistent_resource]
"#;
let f = write_temp_config(yaml);
let result = cmd_validate_check_resource_dependency_refs(f.path(), true);
let _ = result;
}
#[test]
fn test_trigger_refs_valid() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_trigger_refs(f.path(), false);
assert!(result.is_ok());
}
#[test]
fn test_trigger_refs_valid_json() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_trigger_refs(f.path(), true);
assert!(result.is_ok());
}
#[test]
fn test_naming_convention_valid() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_naming_convention(f.path(), false);
assert!(result.is_ok());
}
#[test]
fn test_naming_convention_valid_json() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_naming_convention(f.path(), true);
assert!(result.is_ok());
}
#[test]
fn test_naming_convention_violations() {
let yaml = r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
"My Bad Resource":
type: package
machine: m
provider: apt
packages: [curl]
"#;
let f = write_temp_config(yaml);
let result = cmd_validate_check_resource_naming_convention(f.path(), false);
let _ = result;
}
#[test]
fn test_naming_convention_violations_json() {
let yaml = r#"
version: "1.0"
name: t
machines:
m:
hostname: m
addr: 127.0.0.1
resources:
"My Bad Resource":
type: package
machine: m
provider: apt
packages: [curl]
"#;
let f = write_temp_config(yaml);
let result = cmd_validate_check_resource_naming_convention(f.path(), true);
let _ = result;
}
#[test]
fn test_idempotency_check() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_idempotency(f.path(), false);
assert!(result.is_ok());
}
#[test]
fn test_idempotency_check_json() {
let f = write_temp_config(basic_config());
let result = cmd_validate_check_resource_idempotency(f.path(), true);
assert!(result.is_ok());
}