106 lines
4.6 KiB
Rust
106 lines
4.6 KiB
Rust
// file: crates/ksp-worker-raw-transaction-ingest-lib/unit_tests/settings.rs
|
|
// version: 2
|
|
|
|
fn identities() -> std::option::Option<(ksp_store_lib::RawNetworkId, ksp_worker_api::WorkerId)> {
|
|
let network_result = ksp_store_lib::RawNetworkId::new("mainnet");
|
|
assert!(network_result.is_ok());
|
|
let network = match network_result {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return std::option::Option::None,
|
|
};
|
|
let worker_id_result = ksp_worker_api::WorkerId::new("raw-ingest-mainnet-001");
|
|
assert!(worker_id_result.is_ok());
|
|
let worker_id = match worker_id_result {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(_) => return std::option::Option::None,
|
|
};
|
|
return std::option::Option::Some((network, worker_id));
|
|
}
|
|
|
|
#[test]
|
|
fn pre_003_defaults_are_exact_and_preserve_typed_identity() {
|
|
let (network, worker_id) = match identities() {
|
|
std::option::Option::Some(value) => value,
|
|
std::option::Option::None => return,
|
|
};
|
|
let settings = crate::RawTransactionIngestSettings::with_defaults(network.clone(), worker_id.clone());
|
|
assert_eq!(settings.network(), &network);
|
|
assert_eq!(settings.worker_id(), &worker_id);
|
|
assert_eq!(settings.admission_queue_capacity(), 256);
|
|
assert_eq!(settings.persistence_concurrency(), 8);
|
|
assert_eq!(settings.shutdown_drain_timeout(), std::time::Duration::from_secs(5));
|
|
assert_eq!(crate::DEFAULT_RAW_TRANSACTION_INGEST_ADMISSION_QUEUE_CAPACITY, 256);
|
|
assert_eq!(crate::DEFAULT_RAW_TRANSACTION_INGEST_PERSISTENCE_CONCURRENCY, 8);
|
|
assert_eq!(crate::DEFAULT_RAW_TRANSACTION_INGEST_SHUTDOWN_DRAIN_TIMEOUT, std::time::Duration::from_secs(5));
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_003_inclusive_bounds_accept_exact_minimum_and_maximum() {
|
|
for (queue, concurrency, drain) in [
|
|
(
|
|
crate::MIN_RAW_TRANSACTION_INGEST_ADMISSION_QUEUE_CAPACITY,
|
|
crate::MIN_RAW_TRANSACTION_INGEST_PERSISTENCE_CONCURRENCY,
|
|
crate::MIN_RAW_TRANSACTION_INGEST_SHUTDOWN_DRAIN_TIMEOUT,
|
|
),
|
|
(
|
|
crate::MAX_RAW_TRANSACTION_INGEST_ADMISSION_QUEUE_CAPACITY,
|
|
crate::MAX_RAW_TRANSACTION_INGEST_PERSISTENCE_CONCURRENCY,
|
|
crate::MAX_RAW_TRANSACTION_INGEST_SHUTDOWN_DRAIN_TIMEOUT,
|
|
),
|
|
] {
|
|
let (network, worker_id) = match identities() {
|
|
std::option::Option::Some(value) => value,
|
|
std::option::Option::None => return,
|
|
};
|
|
let settings = crate::RawTransactionIngestSettings::new(network, worker_id, queue, concurrency, drain);
|
|
assert!(settings.is_ok());
|
|
}
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_003_invalid_runtime_bounds_return_stable_field_scoped_error() {
|
|
let invalid = [
|
|
(0, 8, std::time::Duration::from_secs(5), "admission_queue_capacity"),
|
|
(65_537, 8, std::time::Duration::from_secs(5), "admission_queue_capacity"),
|
|
(256, 0, std::time::Duration::from_secs(5), "persistence_concurrency"),
|
|
(256, 65, std::time::Duration::from_secs(5), "persistence_concurrency"),
|
|
(256, 8, std::time::Duration::from_millis(99), "shutdown_drain_timeout"),
|
|
(256, 8, std::time::Duration::from_millis(30_001), "shutdown_drain_timeout"),
|
|
];
|
|
for (queue, concurrency, drain, field) in invalid {
|
|
let (network, worker_id) = match identities() {
|
|
std::option::Option::Some(value) => value,
|
|
std::option::Option::None => return,
|
|
};
|
|
let result = crate::RawTransactionIngestSettings::new(network, worker_id, queue, concurrency, drain);
|
|
assert!(result.is_err());
|
|
let error = match result {
|
|
std::result::Result::Ok(_) => continue,
|
|
std::result::Result::Err(value) => value,
|
|
};
|
|
assert_eq!(error.code(), crate::ERROR_CODE_RAW_TRANSACTION_INGEST_SETTINGS_INVALID);
|
|
assert_eq!(error.code().domain(), "worker_raw_transaction_ingest");
|
|
assert_eq!(error.code().code(), "settings_invalid");
|
|
assert_eq!(error.context().len(), 1);
|
|
assert_eq!(error.context()[0].key(), "field");
|
|
assert_eq!(error.context()[0].value(), field);
|
|
}
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_003_debug_keeps_worker_identity_redacted() {
|
|
let (network, worker_id) = match identities() {
|
|
std::option::Option::Some(value) => value,
|
|
std::option::Option::None => return,
|
|
};
|
|
let settings = crate::RawTransactionIngestSettings::with_defaults(network, worker_id);
|
|
let rendered = std::format!("{settings:?}");
|
|
assert!(rendered.contains("mainnet"));
|
|
assert!(rendered.contains("WorkerId(..)"));
|
|
assert!(!rendered.contains("raw-ingest-mainnet-001"));
|
|
return;
|
|
}
|