v0.3.7-pre.004
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
// file: crates/ksp-app-backfill-desk/tests/config_composition.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
//! Config composite contracts for Backfill Desk pre.003.
|
||||
//! Config composite and Transport-readiness contracts for Backfill Desk through pre.004.
|
||||
|
||||
#![forbid(unsafe_code)]
|
||||
#![deny(unreachable_pub)]
|
||||
@@ -86,3 +86,73 @@ fn pre_003_named_profiles_keep_transport_and_store_network_selection_paired() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_004_default_composite_builds_http_pool_for_both_backfill_rpc_methods() {
|
||||
let engine = workspace_engine();
|
||||
assert!(engine.is_ok(), "workspace Config engine should be constructible: {engine:?}");
|
||||
let engine = match engine {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let file_id = ksp_config_lib::ConfigFileId::new(ksp_config_lib::FILE_ID_COMPOSITE_KSP_APP_BACKFILL_DESK);
|
||||
let file_id = match file_id {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let composite = engine.load_resolved_composite(&file_id, std::option::Option::None);
|
||||
assert!(composite.is_ok(), "committed Backfill Desk composite should resolve: {composite:?}");
|
||||
let composite = match composite {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let transport = composite.component("transport");
|
||||
assert!(transport.is_some(), "Backfill Desk composite should expose Transport");
|
||||
let transport = match transport {
|
||||
std::option::Option::Some(value) => value,
|
||||
std::option::Option::None => return,
|
||||
};
|
||||
let environment = ksp_config_lib::ConfigEnvironment::load();
|
||||
assert!(environment.is_ok(), "Config environment should load for committed public devnet profile");
|
||||
let environment = match environment {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let resolved = engine.resolve_transport_config_profile(transport.resolved(), &environment);
|
||||
assert!(resolved.is_ok(), "composite-selected Transport should map: {resolved:?}");
|
||||
let resolved = match resolved {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
assert_eq!(resolved.profile_id(), "devnet_public");
|
||||
assert_eq!(resolved.selection_source(), ksp_config_lib::ConfigProfileSelectionSource::Composite);
|
||||
let pool = ksp_onchain_transport_lib::HttpTransportPool::new(resolved.into_settings());
|
||||
assert!(pool.is_ok(), "composite-selected Transport settings should construct an HTTP pool");
|
||||
let pool = match pool {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let snapshot = pool.snapshot();
|
||||
let mut clusters = snapshot
|
||||
.endpoints()
|
||||
.iter()
|
||||
.filter_map(|endpoint| {
|
||||
if endpoint.enabled() {
|
||||
return std::option::Option::Some(endpoint.cluster().to_owned());
|
||||
}
|
||||
return std::option::Option::None;
|
||||
})
|
||||
.collect::<std::vec::Vec<_>>();
|
||||
clusters.sort();
|
||||
clusters.dedup();
|
||||
assert_eq!(clusters, vec!["devnet".to_owned()]);
|
||||
let role = ksp_onchain_transport_lib::HttpRoleName::new("default");
|
||||
for method in ["getSignaturesForAddress", "getTransaction"] {
|
||||
let descriptor = ksp_onchain_transport_lib::find_http_rpc_method(method);
|
||||
assert!(descriptor.is_some(), "required Transport method {method} should exist");
|
||||
if let std::option::Option::Some(descriptor) = descriptor {
|
||||
let selection = pool.select_for_method(&role, descriptor);
|
||||
assert!(selection.is_ok(), "role default should route {method}: {selection:?}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-backfill-desk/tests/desktop_contract.rs
|
||||
// version: 3
|
||||
// version: 4
|
||||
|
||||
//! Structural desktop contract checks for the Backfill Desk scaffold.
|
||||
|
||||
@@ -99,13 +99,7 @@ fn pre_002_package_dependencies_match_desk_baseline() {
|
||||
fn pre_002_splash_assets_and_styles_match_existing_desk_template() {
|
||||
let root = app_root();
|
||||
let reference = workspace_root().join("crates/ksp-app-solprices-desk");
|
||||
for relative in [
|
||||
"frontend/fonts/DOS_Amazigh.ttf",
|
||||
"frontend/imgs/logo.png",
|
||||
"frontend/imgs/splash.png",
|
||||
"icons/favicon.png",
|
||||
"icons/favicon.ico",
|
||||
] {
|
||||
for relative in ["frontend/fonts/DOS_Amazigh.ttf", "frontend/imgs/logo.png", "frontend/imgs/splash.png", "icons/favicon.png", "icons/favicon.ico"] {
|
||||
assert_eq!(read_bytes(root.join(relative).as_path()), read_bytes(reference.join(relative).as_path()), "Desk asset differs: {relative}");
|
||||
}
|
||||
let splash = read_text(root.join("frontend/splash.html").as_path());
|
||||
@@ -113,9 +107,7 @@ fn pre_002_splash_assets_and_styles_match_existing_desk_template() {
|
||||
assert!(splash.contains("Backfill Desk"));
|
||||
let splash_style = read_text(root.join("frontend/sass/splash.scss").as_path());
|
||||
let reference_style = read_text(reference.join("frontend/sass/splash.scss").as_path());
|
||||
let normalized = splash_style
|
||||
.replace("crates/ksp-app-backfill-desk", "crates/ksp-app-solprices-desk")
|
||||
.replace("// version: 1", "// version: 2");
|
||||
let normalized = splash_style.replace("crates/ksp-app-backfill-desk", "crates/ksp-app-solprices-desk").replace("// version: 1", "// version: 2");
|
||||
assert_eq!(normalized, reference_style);
|
||||
}
|
||||
|
||||
@@ -179,7 +171,7 @@ fn pre_003_composite_packaging_follows_atomic_config_registry_contract() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_003_bootstrap_uses_composite_logging_without_opening_transport_or_store() {
|
||||
fn pre_003_bootstrap_keeps_logging_composition_separate_from_transport_runtime() {
|
||||
let root = app_root();
|
||||
let bootstrap = read_text(root.join("src/bootstrap.rs").as_path());
|
||||
assert!(bootstrap.contains("FILE_ID_COMPOSITE_KSP_APP_BACKFILL_DESK"));
|
||||
@@ -188,6 +180,23 @@ fn pre_003_bootstrap_uses_composite_logging_without_opening_transport_or_store()
|
||||
assert!(bootstrap.contains("COMPOSITE_COMPONENT_ID_STORE"));
|
||||
assert!(bootstrap.contains("LogFilterLevel::Trace"));
|
||||
for forbidden in ["HttpTransportPool", "Store::open", "BackfillJobRuntime", "BackfillRequest"] {
|
||||
assert!(!bootstrap.contains(forbidden), "pre.003 opens later runtime surface {forbidden}");
|
||||
assert!(!bootstrap.contains(forbidden), "bootstrap.rs absorbs another runtime responsibility: {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_004_transport_runtime_builds_pool_and_validates_both_required_rpc_methods() {
|
||||
let root = app_root();
|
||||
let transport = read_text(root.join("src/transport_runtime.rs").as_path());
|
||||
assert!(transport.contains("HttpTransportPool::new"));
|
||||
assert!(transport.contains("getSignaturesForAddress"));
|
||||
assert!(transport.contains("getTransaction"));
|
||||
assert!(transport.contains("select_for_method"));
|
||||
assert!(transport.contains("configured_networks"));
|
||||
assert!(transport.contains("compatible_backfill_roles"));
|
||||
for forbidden in ["provider()", "url()", "Store::open", "BackfillJobRuntime", "BackfillRequest"] {
|
||||
assert!(!transport.contains(forbidden), "pre.004 opens or projects forbidden surface {forbidden}");
|
||||
}
|
||||
let tauri = read_text(root.join("src/tauri.rs").as_path());
|
||||
assert!(tauri.contains("backfill_options"));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-backfill-desk/tests/desktop_security.rs
|
||||
// version: 3
|
||||
// version: 4
|
||||
|
||||
//! Security and dependency-boundary checks for the Backfill Desk scaffold.
|
||||
|
||||
@@ -43,7 +43,7 @@ fn read_text(path: &std::path::Path) -> String {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_002_capability_surface_is_core_plus_tracing_only() {
|
||||
fn capability_surface_remains_core_plus_tracing_while_transport_is_backend_only() {
|
||||
let root = app_root();
|
||||
let capability = read_text(root.join("capabilities/default.json").as_path());
|
||||
assert!(capability.contains("\"core:default\""));
|
||||
@@ -53,16 +53,9 @@ fn pre_002_capability_surface_is_core_plus_tracing_only() {
|
||||
}
|
||||
let manifest = read_text(root.join("Cargo.toml").as_path());
|
||||
assert!(manifest.contains("tauri-plugin-tracing.workspace = true"));
|
||||
for forbidden in [
|
||||
"ksp-job-backfill-lib",
|
||||
"ksp-onchain-transport-lib",
|
||||
"ksp-store-lib",
|
||||
"ksp-store-api",
|
||||
"ksp-store-postgres-lib",
|
||||
"reqwest",
|
||||
"tokio-postgres",
|
||||
] {
|
||||
assert!(!manifest.contains(forbidden), "pre.002 opens a later-layer dependency: {forbidden}");
|
||||
assert!(manifest.contains("ksp-onchain-transport-lib = { path = \"../ksp-onchain-transport-lib\" }"));
|
||||
for forbidden in ["ksp-job-backfill-lib", "ksp-store-lib", "ksp-store-api", "ksp-store-postgres-lib", "reqwest", "tokio-postgres"] {
|
||||
assert!(!manifest.contains(forbidden), "current Backfill Desk opens a forbidden dependency: {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,7 +88,7 @@ fn pre_002_tauri_commands_remain_centralized() {
|
||||
assert_eq!(count, 0, "{} declares a Tauri command outside tauri.rs", path.display());
|
||||
}
|
||||
}
|
||||
assert_eq!(command_count, 3);
|
||||
assert_eq!(command_count, 4);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -121,15 +114,21 @@ fn pre_002_frontend_instrumentation_avoids_business_or_secret_payloads() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_003_keeps_config_only_composition_boundary() {
|
||||
fn pre_004_opens_only_config_logging_and_onchain_transport_dependencies() {
|
||||
let root = app_root();
|
||||
let manifest = read_text(root.join("Cargo.toml").as_path());
|
||||
assert!(manifest.contains("ksp-config-lib = { path = \"../ksp-config-lib\" }"));
|
||||
for forbidden in ["ksp-job-backfill-lib", "ksp-onchain-transport-lib", "ksp-store-lib", "ksp-store-api", "ksp-store-postgres-lib"] {
|
||||
assert!(!manifest.contains(forbidden), "pre.003 opens a later-layer dependency: {forbidden}");
|
||||
assert!(manifest.contains("ksp-onchain-transport-lib = { path = \"../ksp-onchain-transport-lib\" }"));
|
||||
for forbidden in ["ksp-job-backfill-lib", "ksp-store-lib", "ksp-store-api", "ksp-store-postgres-lib"] {
|
||||
assert!(!manifest.contains(forbidden), "pre.004 opens a later-layer dependency: {forbidden}");
|
||||
}
|
||||
let bootstrap = read_text(root.join("src/bootstrap.rs").as_path());
|
||||
assert!(bootstrap.contains("LogFilterLevel::Trace"));
|
||||
assert!(!bootstrap.contains("HttpTransportPool"));
|
||||
assert!(!bootstrap.contains("Store::open"));
|
||||
let dto = read_text(root.join("src/dto_common.rs").as_path());
|
||||
assert!(dto.contains("BackfillDeskOptionsDto"));
|
||||
for forbidden in ["pub(crate) provider", "endpoint_url", "pub(crate) url", "pub(crate) credential", "pub(crate) token"] {
|
||||
assert!(!dto.contains(forbidden), "Transport options DTO source contains forbidden field marker {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user