use slokit::generate::generate_rules;
use slokit::spec::Spec;
const SAMPLE: &str = include_str!("fixtures/sample.yaml");
fn sample_spec() -> Spec {
Spec::from_yaml(SAMPLE).expect("fixture parses")
}
fn redact_version(yaml: String) -> String {
yaml.replace(env!("CARGO_PKG_VERSION"), "[VERSION]")
}
#[test]
fn prometheus_rules_snapshot() {
let rules = generate_rules(&sample_spec()).unwrap();
let yaml = redact_version(rules.to_prometheus_yaml().unwrap());
insta::assert_snapshot!("prometheus_rules", yaml);
}
#[test]
fn operator_rules_snapshot() {
let spec = sample_spec();
let rules = generate_rules(&spec).unwrap();
let yaml = redact_version(rules.to_operator_yaml(&spec.service, &spec.labels).unwrap());
insta::assert_snapshot!("operator_rules", yaml);
}
#[test]
fn page_thresholds_are_factor_times_budget() {
let yaml = generate_rules(&sample_spec())
.unwrap()
.to_prometheus_yaml()
.unwrap();
assert!(yaml.contains("(14.4 * 0.001)"));
assert!(yaml.contains("(6 * 0.001)"));
assert!(yaml.contains("(3 * 0.001)"));
assert!(yaml.contains("(1 * 0.001)"));
}
#[test]
fn emits_expected_group_count() {
let rules = generate_rules(&sample_spec()).unwrap();
assert_eq!(rules.groups.len(), 6);
}
#[test]
fn raw_sli_period_rule_is_present() {
let yaml = generate_rules(&sample_spec())
.unwrap()
.to_prometheus_yaml()
.unwrap();
assert!(yaml.contains("slo:sli_error:ratio_rate30d"));
assert!(yaml.contains("sloth_slo: requests-latency"));
}