// file: crates/ksp-app-raw-transaction-ingest-desk/unit_tests/route_start.rs // version: 2 #[test] fn pre_007_stale_generation_is_rejected_before_config_or_transport_reconstruction() { let management = committed_management(); assert!(management.is_ok()); let management = match management { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let request = crate::RawIngestRouteStartRequestDto { commitment: crate::RawIngestCommitment::Confirmed, inventory_generation: 3, profile_id: "devnet".to_owned(), route_id: crate::RawIngestRouteId::StandardBlockDirect, }; let result = crate::validate_route_start(&management, 2, &request); assert!(result.is_err()); if let std::result::Result::Err(error) = result { assert_eq!(error.code(), crate::ERROR_CODE_ROUTE_START_STALE_INVENTORY); } } #[test] fn pre_007_commitments_are_bounded_to_confirmed_and_finalized() { assert_eq!(crate::RawIngestCommitment::Confirmed.into_transport(), ksp_onchain_transport_lib::SolanaCommitment::Confirmed); assert_eq!(crate::RawIngestCommitment::Finalized.into_transport(), ksp_onchain_transport_lib::SolanaCommitment::Finalized); assert_eq!(crate::RawIngestCommitment::Confirmed.as_str(), "confirmed"); assert_eq!(crate::RawIngestCommitment::Finalized.as_str(), "finalized"); } #[test] fn pre_007_public_standard_profiles_reconstruct_block_and_http_sources_without_network_io() { let management = committed_management(); assert!(management.is_ok()); let management = match management { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let inventory = crate::build_route_inventory(&management, 1); assert!(inventory.is_ok()); let inventory = match inventory { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; for profile in inventory.profiles { for route_id in [crate::RawIngestRouteId::StandardLogsHydrated, crate::RawIngestRouteId::StandardBlockDirect, crate::RawIngestRouteId::HttpBlockPolling] { let route = profile.routes.iter().find(|route| return route.route_id == route_id); assert!(route.is_some(), "missing base route for {}", profile.profile_id); if let std::option::Option::Some(route) = route { assert_eq!(route.state, crate::RawIngestRouteState::Configured); let request = crate::RawIngestRouteStartRequestDto { commitment: crate::RawIngestCommitment::Confirmed, inventory_generation: 1, profile_id: profile.profile_id.clone(), route_id, }; let prepared = crate::validate_route_start(&management, 1, &request); assert!(prepared.is_ok(), "failed Start-time reconstruction for {} / {}", profile.profile_id, route_id.as_str()); } } } } fn committed_management() -> ksp_core_lib::Result { let manifest = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")); let crates_root = manifest.parent(); let crates_root = match crates_root { std::option::Option::Some(value) => value, std::option::Option::None => { return std::result::Result::Err(ksp_core_lib::Error::new(crate::ERROR_CODE_ROUTE_START_PREPARATION_FAILED, "test manifest has no crates parent")); }, }; let workspace = crates_root.parent(); let workspace = match workspace { std::option::Option::Some(value) => value, std::option::Option::None => { return std::result::Result::Err(ksp_core_lib::Error::new( crate::ERROR_CODE_ROUTE_START_PREPARATION_FAILED, "test crates root has no workspace parent", )); }, }; let bootstrap = ksp_config_lib::ConfigBootstrapOptions::from_paths(workspace.join("config"), workspace.join("config/schemas")); let bootstrap = match bootstrap { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; let registry = ksp_config_lib::ConfigFileRegistry::defaults(); let registry = match registry { std::result::Result::Ok(value) => value, std::result::Result::Err(error) => return std::result::Result::Err(error), }; return std::result::Result::Ok(ksp_config_lib::ConfigManagement::new(ksp_config_lib::ConfigDocumentEngine::new(bootstrap, registry))); }