workspace_consumers.rs (1571B)
1 use std::{fs, path::PathBuf}; 2 3 #[test] 4 fn ready_workspace_consumers_use_only_the_final_storage_boundary() { 5 let storage_root = PathBuf::from(env!("CARGO_MANIFEST_DIR")); 6 let workspace = storage_root.parent().expect("crates directory"); 7 for (consumer, required) in [ 8 ( 9 "storage_sqlite", 10 [ 11 "radroots_storage", 12 "radroots_event_codec", 13 "radroots_secrets", 14 ] 15 .as_slice(), 16 ), 17 ( 18 "sync", 19 [ 20 "radroots_storage", 21 "radroots_event", 22 "radroots_event_codec", 23 "radroots_protocol", 24 "radroots_signing", 25 "radroots_trade", 26 "radroots_transport", 27 ] 28 .as_slice(), 29 ), 30 ] { 31 let manifest = fs::read_to_string(workspace.join(consumer).join("Cargo.toml")) 32 .expect("consumer manifest"); 33 for dependency in required { 34 assert!( 35 manifest.contains(&format!("{dependency} = {{ workspace = true")), 36 "{consumer} does not use final dependency {dependency}" 37 ); 38 } 39 for legacy in [ 40 "radroots_event_store", 41 "radroots_event_index", 42 "radroots_outbox", 43 "radroots_runtime_store", 44 ] { 45 assert!( 46 !manifest.contains(legacy), 47 "{consumer} still depends on legacy storage surface {legacy}" 48 ); 49 } 50 } 51 }