v0.2.11-pre.010
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-config-lib/unit_tests/offchain_transport.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
const TEST_PAIR: &str = "Czfq3xZZDmsdGdUyrNLtRhGc47cXcZtLG4crryfu44zE";
|
||||
|
||||
@@ -155,6 +155,51 @@ fn dexscreener_pair_environment_must_use_public_namespace_and_disabled_pair_may_
|
||||
assert!(disabled.is_ok(), "disabled DexScreener runtime settings should accept an absent pair after pre.009 capability reconciliation: {disabled:?}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn provider_url_and_rate_limit_overrides_are_rejected_by_schema_before_runtime_mapping() {
|
||||
for (provider, field, value) in [
|
||||
("coingecko", "base_url", serde_json::Value::String("https://example.invalid".to_owned())),
|
||||
("coinmarketcap", "rate_limit", serde_json::json!({"requests": 999999, "window_seconds": 1})),
|
||||
] {
|
||||
let fixture = tempfile::tempdir();
|
||||
assert!(fixture.is_ok(), "temporary Config root should be creatable: {fixture:?}");
|
||||
let fixture = match fixture {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let source = committed_document_value();
|
||||
let mut source = match source {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let profiles = source.get_mut("profiles").and_then(serde_json::Value::as_array_mut);
|
||||
assert!(profiles.is_some(), "fixture should expose profiles");
|
||||
if let std::option::Option::Some(profiles) = profiles {
|
||||
let public_keyless = profiles
|
||||
.iter_mut()
|
||||
.find(|profile| return profile.get("profile_id").and_then(serde_json::Value::as_str) == std::option::Option::Some("public_keyless"));
|
||||
assert!(public_keyless.is_some(), "fixture should contain public_keyless profile");
|
||||
if let std::option::Option::Some(public_keyless) = public_keyless {
|
||||
public_keyless["market_price"][provider][field] = value;
|
||||
}
|
||||
}
|
||||
let engine = fixture_engine_with_document(fixture.path(), &source);
|
||||
assert!(engine.is_ok(), "override fixture engine should be constructible: {engine:?}");
|
||||
let engine = match engine {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let environment = crate::ConfigEnvironment::from_maps(std::collections::BTreeMap::new(), std::collections::BTreeMap::new());
|
||||
let resolved = engine.load_resolved_offchain_transport_config(std::option::Option::Some("public_keyless"), &environment);
|
||||
assert!(resolved.is_err(), "provider URL/rate-limit override must be rejected before runtime mapping: provider={provider} field={field}");
|
||||
if let std::result::Result::Err(error) = resolved {
|
||||
assert_eq!(error.code(), crate::ERROR_CODE_SCHEMA_VALIDATION_FAILED);
|
||||
let debug = format!("{error:?}");
|
||||
assert!(!debug.contains("https://example.invalid"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn assert_provider_availability(
|
||||
registry: &ksp_offchain_transport_lib::MarketPriceProviderRegistry,
|
||||
provider_id: &str,
|
||||
|
||||
Reference in New Issue
Block a user