v0.3.7-pre.006
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
// file: crates/ksp-app-backfill-desk/tests/config_composition.rs
|
||||
// version: 4
|
||||
// version: 5
|
||||
|
||||
//! Config composite, Transport readiness and Store-network composition contracts for Backfill Desk through pre.005.
|
||||
//! Config composite, Transport readiness and Store-network composition contracts for Backfill Desk through pre.006.
|
||||
|
||||
#![forbid(unsafe_code)]
|
||||
#![deny(unreachable_pub)]
|
||||
@@ -32,7 +32,7 @@ fn assert_component(composite: &ksp_config_lib::ResolvedConfigComposite, compone
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_003_default_composite_selects_trace_devnet_logging_transport_and_store() {
|
||||
fn pre_003_devnet_profile_selects_trace_logging_transport_and_store() {
|
||||
let engine = workspace_engine();
|
||||
assert!(engine.is_ok(), "workspace Config engine should be constructible: {engine:?}");
|
||||
let engine = match engine {
|
||||
@@ -45,8 +45,8 @@ fn pre_003_default_composite_selects_trace_devnet_logging_transport_and_store()
|
||||
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 = engine.load_resolved_composite(&file_id, std::option::Option::Some("devnet"));
|
||||
assert!(composite.is_ok(), "committed Backfill Desk devnet profile should resolve: {composite:?}");
|
||||
if let std::result::Result::Ok(composite) = composite {
|
||||
assert_eq!(composite.profile_id(), "devnet");
|
||||
assert_component(&composite, "logging", ksp_config_lib::FILE_ID_STD_LOGGING, "supertrace");
|
||||
@@ -74,7 +74,7 @@ fn pre_003_named_profiles_keep_transport_and_store_network_selection_paired() {
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
for (profile_id, logging_profile, transport_profile, store_profile) in
|
||||
[("mainnet", "console_info", "mainnet_public", "mainnet"), ("testnet", "console_info", "publicnode_testnet", "testnet")]
|
||||
[("mainnet", "supertrace", "mainnet_backfill_pool", "mainnet"), ("testnet", "console_info", "publicnode_testnet", "testnet")]
|
||||
{
|
||||
let composite = engine.load_resolved_composite(&file_id, std::option::Option::Some(profile_id));
|
||||
assert!(composite.is_ok(), "Backfill Desk composite profile {profile_id} should resolve: {composite:?}");
|
||||
@@ -100,8 +100,8 @@ fn pre_004_default_composite_builds_http_pool_for_both_backfill_rpc_methods() {
|
||||
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 = engine.load_resolved_composite(&file_id, std::option::Option::Some("devnet"));
|
||||
assert!(composite.is_ok(), "committed Backfill Desk devnet profile should resolve: {composite:?}");
|
||||
let composite = match composite {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
@@ -215,3 +215,52 @@ fn pre_005_all_composite_profiles_keep_declared_http_and_store_networks_identica
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_006_default_mainnet_profile_exposes_pool_and_targeted_http_routes_without_secret_provider_data() {
|
||||
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(), "default Backfill Desk composite should resolve: {composite:?}");
|
||||
let composite = match composite {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
assert_eq!(composite.profile_id(), "mainnet");
|
||||
assert_component(&composite, "logging", ksp_config_lib::FILE_ID_STD_LOGGING, "supertrace");
|
||||
assert_component(&composite, "transport", ksp_config_lib::FILE_ID_STD_TRANSPORT, "mainnet_backfill_pool");
|
||||
assert_component(&composite, "store", ksp_config_lib::FILE_ID_STD_STORE, "mainnet");
|
||||
let transport = match composite.component("transport") {
|
||||
std::option::Option::Some(value) => value,
|
||||
std::option::Option::None => return,
|
||||
};
|
||||
let profile = transport.resolved().profile();
|
||||
let endpoints = profile.get("endpoints").and_then(serde_json::Value::as_array);
|
||||
assert!(endpoints.is_some(), "mainnet Backfill Transport profile should expose HTTP endpoints");
|
||||
let endpoints = match endpoints {
|
||||
std::option::Option::Some(value) => value,
|
||||
std::option::Option::None => return,
|
||||
};
|
||||
let providers = endpoints
|
||||
.iter()
|
||||
.filter_map(|endpoint| endpoint.get("provider").and_then(serde_json::Value::as_str))
|
||||
.collect::<std::collections::BTreeSet<_>>();
|
||||
assert_eq!(providers, std::collections::BTreeSet::from(["publicnode", "solana-public"]));
|
||||
let roles = endpoints
|
||||
.iter()
|
||||
.flat_map(|endpoint| endpoint.get("roles").and_then(serde_json::Value::as_array).into_iter().flatten())
|
||||
.filter_map(|role| role.get("role").and_then(serde_json::Value::as_str))
|
||||
.collect::<std::collections::BTreeSet<_>>();
|
||||
assert!(roles.contains("backfill_pool"));
|
||||
assert!(roles.contains("backfill_publicnode"));
|
||||
assert!(roles.contains("backfill_solana_public"));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-backfill-desk/tests/desktop_contract.rs
|
||||
// version: 5
|
||||
// version: 6
|
||||
|
||||
//! Structural desktop contract checks for the Backfill Desk scaffold.
|
||||
|
||||
@@ -193,8 +193,9 @@ fn pre_004_transport_runtime_builds_pool_and_validates_both_required_rpc_methods
|
||||
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("compatible_backfill_http_routes"));
|
||||
assert!(transport.contains("endpoint.provider()"));
|
||||
for forbidden in ["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());
|
||||
@@ -220,7 +221,6 @@ fn pre_005_store_readiness_proves_network_before_open_and_closes_on_main_window_
|
||||
assert!(!store.contains("BackfillRequest"));
|
||||
let app_state = read_text(root.join("src/app_state.rs").as_path());
|
||||
assert!(app_state.contains("initialize_store"));
|
||||
assert!(app_state.contains("pre.005-store-readiness"));
|
||||
assert!(app_state.contains("composition_ready"));
|
||||
assert!(app_state.contains("close_store"));
|
||||
let tauri = read_text(root.join("src/tauri.rs").as_path());
|
||||
@@ -228,3 +228,26 @@ fn pre_005_store_readiness_proves_network_before_open_and_closes_on_main_window_
|
||||
assert!(tauri.contains(required), "missing bounded Store shutdown lifecycle marker {required}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_006_mainnet_default_and_http_route_selector_are_explicit_without_start_runtime() {
|
||||
let root = app_root();
|
||||
let workspace = root.join("../..");
|
||||
let composite = read_text(workspace.join("config/composite.ksp-app-backfill-desk.json").as_path());
|
||||
assert!(composite.contains("\"default_profile\": \"mainnet\""));
|
||||
assert!(composite.contains("\"profile_id\": \"mainnet_backfill_pool\""));
|
||||
let transport = read_text(workspace.join("config/std.transport.json").as_path());
|
||||
for required in ["mainnet_backfill_pool", "backfill_pool", "backfill_publicnode", "backfill_solana_public", "solana-rpc.publicnode.com"] {
|
||||
assert!(transport.contains(required), "missing Backfill HTTP route marker {required}");
|
||||
}
|
||||
let app_state = read_text(root.join("src/app_state.rs").as_path());
|
||||
assert!(app_state.contains("pre.006-mainnet-http-routing"));
|
||||
let frontend = read_text(root.join("frontend/ts/main.ts").as_path());
|
||||
assert!(frontend.contains("Backfill Desk HTTP route selection changed"));
|
||||
assert!(frontend.contains("backfill_options"));
|
||||
let html = read_text(root.join("frontend/main.html").as_path());
|
||||
assert!(html.contains("backfillHttpRoute"));
|
||||
for forbidden in ["backfill_start", "BackfillJobRuntime", "grpc", "websocket"] {
|
||||
assert!(!frontend.contains(forbidden), "pre.006 frontend opens deferred runtime marker {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-app-backfill-desk/tests/desktop_security.rs
|
||||
// version: 5
|
||||
// version: 6
|
||||
|
||||
//! Security and dependency-boundary checks for the Backfill Desk scaffold.
|
||||
|
||||
@@ -137,7 +137,23 @@ fn pre_005_opens_store_facade_without_backend_or_job_dependencies() {
|
||||
}
|
||||
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", "connection_uri"] {
|
||||
for forbidden in ["endpoint_url", "pub(crate) url", "pub(crate) credential", "pub(crate) token", "connection_uri"] {
|
||||
assert!(!dto.contains(forbidden), "readiness options DTO source contains forbidden field marker {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_006_frontend_receives_only_safe_http_route_metadata_and_no_endpoint_material() {
|
||||
let root = app_root();
|
||||
let dto = read_text(root.join("src/dto_common.rs").as_path());
|
||||
assert!(dto.contains("BackfillHttpRouteOptionDto"));
|
||||
assert!(dto.contains("pub(crate) providers"));
|
||||
assert!(dto.contains("pub(crate) role"));
|
||||
for forbidden in ["endpoint_url", "pub(crate) url", "pub(crate) credential", "pub(crate) api_key", "pub(crate) authorization"] {
|
||||
assert!(!dto.contains(forbidden), "route DTO leaks forbidden endpoint material marker {forbidden}");
|
||||
}
|
||||
let frontend = read_text(root.join("frontend/ts/main.ts").as_path());
|
||||
for forbidden in ["http://", "https://", "apiKey", "authorization", "token"] {
|
||||
assert!(!frontend.contains(forbidden), "frontend embeds forbidden provider material marker {forbidden}");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user