// file: crates/ksp-offchain-transport-lib/tests/dependency_boundary.rs // version: 5 #![warn(missing_docs)] #![deny(unreachable_pub)] #![forbid(unsafe_code)] //! Dependency, observability, hardened HTTP and module-taxonomy canaries for Off-chain Transport. #[test] fn pre_004_manifest_uses_only_generic_runtime_crates_and_no_provider_sdk() { let manifest = include_str!("../Cargo.toml"); assert!(manifest.contains("chrono = { workspace = true, features = [\"std\"] }")); assert!(manifest.contains("ksp-core-lib")); assert!(manifest.contains("ksp-logging-lib")); assert!(manifest.contains("reqwest = { workspace = true, features = [\"rustls\"] }")); assert!(manifest.contains("serde")); assert!(manifest.contains("serde_json = { workspace = true, features = [\"raw_value\"] }")); assert!(!manifest.contains("ksp-config-lib")); assert!(!manifest.contains("coingecko")); assert!(!manifest.contains("coinmarketcap")); assert!(!manifest.contains("coinpaprika")); assert!(!manifest.contains("jupiter")); assert!(!manifest.contains("birdeye")); assert!(!manifest.contains("dexscreener")); assert!(!manifest.lines().any(|line| return line.trim_start().starts_with("tracing ="))); } #[test] fn pre_004_http_runtime_is_production_active_but_not_a_public_generic_client() { let crate_root = include_str!("../src/lib.rs"); assert!(crate_root.contains("mod http_admission;")); assert!(crate_root.contains("mod http_client;")); assert!(crate_root.contains("mod http_settings;")); assert!(!crate_root.contains("#[cfg(test)] // RUST-API-008: staged")); assert!(!crate_root.contains("pub use self::http_client::HttpRestClient")); let client = include_str!("../src/http_client.rs"); assert!(client.contains(".redirect(reqwest::redirect::Policy::none())")); assert!(client.contains(".referer(false)")); assert!(client.contains(".retry(reqwest::retry::never())")); assert!(client.contains(".no_proxy()")); assert!(client.contains("error.without_url()")); } #[test] fn pre_004_provider_modules_are_market_price_scoped_and_fixed_origin() { let crate_root = include_str!("../src/lib.rs"); assert!(crate_root.contains("mod market_price_coingecko;")); assert!(crate_root.contains("mod market_price_coinmarketcap;")); assert!(crate_root.contains("mod market_price_coinpaprika;")); let coingecko = include_str!("../src/market_price_coingecko.rs"); let coinmarketcap = include_str!("../src/market_price_coinmarketcap.rs"); let coinpaprika = include_str!("../src/market_price_coinpaprika.rs"); assert!(coingecko.contains("https://api.coingecko.com/api/v3/simple/price")); assert!(coinmarketcap.contains("https://pro-api.coinmarketcap.com/public-api/v2/simple/price")); assert!(coinmarketcap.contains("https://pro-api.coinmarketcap.com/v2/simple/price")); assert!(coinpaprika.contains("https://api.coinpaprika.com/v1/tickers/sol-solana")); assert!(!coingecko.contains("std::env")); assert!(!coinmarketcap.contains("std::env")); assert!(!coinpaprika.contains("std::env")); }