use super::*;
use osproxy_core::ManualClock;
const GOOD: &[u8] = br#"{"directives":[{"id":"a","level":"Shape","ttl_secs":600}]}"#;
#[test]
fn a_valid_value_is_applied_and_load_reflects_it() {
let clock = ManualClock::new();
let current = Arc::new(ArcSwap::from_pointee(DirectiveSet::new()));
let store = EtcdDirectiveStore {
current: Arc::clone(¤t),
};
assert_eq!(store.load().len(), 0, "starts empty");
apply_value(¤t, GOOD, &clock);
assert_eq!(store.load().len(), 1, "the published set is now live");
}
#[test]
fn a_malformed_value_keeps_the_last_good_snapshot() {
let clock = ManualClock::new();
let current = Arc::new(ArcSwap::from_pointee(DirectiveSet::new()));
apply_value(¤t, GOOD, &clock);
apply_value(¤t, b"not json", &clock);
let store = EtcdDirectiveStore {
current: Arc::clone(¤t),
};
assert_eq!(
store.load().len(),
1,
"the malformed update was rejected, last-good kept"
);
apply_value(
¤t,
br#"{"directives":[{"id":"b","level":"Shape","ttl_secs":60,"tennant":"acme"}]}"#,
&clock,
);
assert_eq!(
store.load().len(),
1,
"an unknown-key publish is rejected too"
);
}