use std::{str::FromStr, time::Duration};
use uhlc::HLC;
use super::*;
#[test]
fn test_lower_bounds() {
let configuration = Configuration::new(
OwnedKeyExpr::from_str("replication/test/*").unwrap(),
None,
ReplicaConfig {
interval: Duration::from_secs(10),
sub_intervals: 5,
hot: 1,
warm: 5,
propagation_delay: Duration::from_millis(250),
},
);
assert_eq!(
IntervalIdx(10),
configuration.hot_era_lower_bound(IntervalIdx(10))
);
assert_eq!(
IntervalIdx(5),
configuration.warm_era_lower_bound(IntervalIdx(10))
);
}
#[test]
fn test_difference() {
let identical_replica_config = ReplicaConfig {
interval: Duration::from_secs(10),
sub_intervals: 5,
hot: 1,
warm: 5,
propagation_delay: Duration::from_millis(250),
};
let configuration_a = Configuration::new(
OwnedKeyExpr::from_str("replication/test/**").unwrap(),
None,
identical_replica_config.clone(),
);
let configuration_b = Configuration::new(
OwnedKeyExpr::from_str("replication/test/a/*").unwrap(),
None,
identical_replica_config.clone(),
);
assert_ne!(configuration_a.fingerprint, configuration_b.fingerprint);
let configuration_c = Configuration::new(
configuration_a.storage_key_expr,
Some(OwnedKeyExpr::from_str("replication/test").unwrap()),
identical_replica_config,
);
assert_ne!(configuration_a.fingerprint, configuration_c.fingerprint);
}
#[test]
fn test_get_classification() {
let configuration = Configuration::new(
OwnedKeyExpr::from_str("replication/test/*").unwrap(),
None,
ReplicaConfig {
interval: Duration::from_secs(10),
sub_intervals: 5,
hot: 1,
warm: 5,
propagation_delay: Duration::from_millis(250),
},
);
let hlc = HLC::default();
let new_timestamp = |duration: Duration| Timestamp::new(duration.into(), *hlc.get_id());
let timestamp_0_0_lower = new_timestamp(Duration::from_millis(0));
assert_eq!(
(IntervalIdx(0), SubIntervalIdx(0)),
configuration
.get_time_classification(×tamp_0_0_lower)
.unwrap()
);
let timestamp_0_0_upper = new_timestamp(Duration::from_millis(1999));
assert_eq!(
(IntervalIdx(0), SubIntervalIdx(0)),
configuration
.get_time_classification(×tamp_0_0_upper)
.unwrap()
);
let timestamp_0_1_lower = new_timestamp(Duration::from_millis(2_000));
assert_eq!(
(IntervalIdx(0), SubIntervalIdx(1)),
configuration
.get_time_classification(×tamp_0_1_lower)
.unwrap()
);
let timestamp_1_4_upper = new_timestamp(Duration::from_millis(19_999));
assert_eq!(
(IntervalIdx(1), SubIntervalIdx(4)),
configuration
.get_time_classification(×tamp_1_4_upper)
.unwrap()
);
let timestamp_10_3 = new_timestamp(Duration::from_millis(106_042));
assert_eq!(
(IntervalIdx(10), SubIntervalIdx(3)),
configuration
.get_time_classification(×tamp_10_3)
.unwrap()
);
}