#![forbid(unsafe_code)]
#[cfg(feature = "buggify")]
use std::sync::Arc;
#[cfg(feature = "buggify")]
use magnetar_proto::Buggify;
use magnetar_proto::ConnectionConfig;
#[cfg(feature = "buggify")]
use magnetar_proto::backoff::Backoff;
use magnetar_proto::buggify::labels;
use magnetar_runtime_moonpool::ConnectionShared;
#[cfg(feature = "buggify")]
use parking_lot::Mutex;
#[cfg(feature = "buggify")]
fn splitmix_rng(seed: u64) -> Arc<dyn Fn() -> u64 + Send + Sync> {
let state = Arc::new(Mutex::new(seed));
Arc::new(move || {
let mut g = state.lock();
*g = g.wrapping_add(0x9E37_79B9_7F4A_7C15);
let mut z = *g;
z = (z ^ (z >> 30)).wrapping_mul(0xBF58_476D_1CE4_E5B9);
z = (z ^ (z >> 27)).wrapping_mul(0x94D0_49BB_1331_11EB);
z ^= z >> 31;
z
})
}
#[cfg(feature = "buggify")]
#[test]
fn buggify_labels_all_fire_under_armed_helper_across_seed_sweep() {
use magnetar_proto::buggify::labels;
let seeds: [u64; 16] = [
0xAAAA_BBBB_CCCC_DDDD,
1,
2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
];
for seed in seeds {
let buggify = Buggify::with_rng(splitmix_rng(seed));
for label in [
labels::CONNECTION_RESET_DELAY,
labels::BATCH_CONTAINER_FLUSH_SPLIT,
labels::HANDLE_BYTES_SHORT_READ,
labels::RETRY_CLOCK_SKEW,
] {
assert!(
buggify.should_fire(label, 1.0),
"seed={seed:#x} label={label} did not fire at p=1.0"
);
}
for label in [
labels::CONNECTION_RESET_DELAY,
labels::BATCH_CONTAINER_FLUSH_SPLIT,
labels::HANDLE_BYTES_SHORT_READ,
labels::RETRY_CLOCK_SKEW,
] {
assert_eq!(
buggify.fire_count(label),
1,
"seed={seed:#x} label={label} fire_count off"
);
}
}
}
#[cfg(feature = "buggify")]
#[test]
fn buggify_connection_and_backoff_share_fire_counter() {
let shared = ConnectionShared::new(ConnectionConfig::default());
let buggify = Buggify::with_rng(splitmix_rng(0xDEAD_BEEF));
let installed = shared.inner.lock().set_buggify(buggify.clone());
assert!(installed.is_armed());
let mut backoff = Backoff::default();
backoff.install_buggify(installed.clone());
shared.inner.lock().reset();
for _ in 0..32 {
let _ = backoff.next();
}
let total = installed.fire_count(labels::CONNECTION_RESET_DELAY)
+ installed.fire_count(labels::RETRY_CLOCK_SKEW);
assert!(
total > 0,
"shared helper recorded zero fires across reset + 32 redials"
);
}
#[test]
fn moonpool_buggify_default_disabled() {
let shared = ConnectionShared::new(ConnectionConfig::default());
let conn = shared.inner.lock();
assert!(
!conn.buggify().is_armed(),
"moonpool engine must not auto-arm buggify; tests opt in"
);
for label in [
labels::CONNECTION_RESET_DELAY,
labels::BATCH_CONTAINER_FLUSH_SPLIT,
labels::HANDLE_BYTES_SHORT_READ,
labels::RETRY_CLOCK_SKEW,
] {
assert!(
!conn.buggify().should_fire(label, 1.0),
"label {label} fired on default moonpool connection"
);
}
}