v0.3.10-pre.002
This commit is contained in:
52
crates/ksp-raw-transaction-lib/tests/dependency_boundary.rs
Normal file
52
crates/ksp-raw-transaction-lib/tests/dependency_boundary.rs
Normal file
@@ -0,0 +1,52 @@
|
||||
// file: crates/ksp-raw-transaction-lib/tests/dependency_boundary.rs
|
||||
// version: 1
|
||||
|
||||
fn manifest() -> std::string::String {
|
||||
return std::fs::read_to_string(std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("Cargo.toml")).unwrap_or_default();
|
||||
}
|
||||
|
||||
fn production_sources() -> std::string::String {
|
||||
let root = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src");
|
||||
let mut combined = std::string::String::new();
|
||||
for name in ["acquisition.rs", "canonical.rs", "error.rs", "lib.rs", "signature.rs"] {
|
||||
let source = std::fs::read_to_string(root.join(name)).unwrap_or_default();
|
||||
combined.push_str(source.as_str());
|
||||
}
|
||||
return combined;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_002_manifest_uses_api_models_and_exact_common_dependencies() {
|
||||
let manifest = manifest();
|
||||
assert!(manifest.contains("ksp-core-lib = { path = \"../ksp-core-lib\" }"));
|
||||
assert!(manifest.contains("ksp-store-api = { path = \"../ksp-store-api\" }"));
|
||||
assert!(manifest.contains("serde_json = { workspace = true }"));
|
||||
assert!(manifest.contains("sha2 = { workspace = true }"));
|
||||
for forbidden in
|
||||
["ksp-store-lib", "ksp-onchain-transport-lib", "ksp-config-lib", "ksp-job-api", "ksp-job-backfill-lib", "ksp-worker-api", "tokio", "futures"]
|
||||
{
|
||||
assert!(!manifest.contains(forbidden));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_002_production_sources_keep_transport_runtime_job_worker_and_backend_out() {
|
||||
let sources = production_sources();
|
||||
for forbidden in [
|
||||
"ksp_store_lib",
|
||||
"ksp_onchain_transport_lib",
|
||||
"ksp_config_lib",
|
||||
"ksp_job_api",
|
||||
"ksp_job_backfill_lib",
|
||||
"ksp_worker_api",
|
||||
"ksp_store_postgres_lib",
|
||||
"tokio::",
|
||||
"futures::",
|
||||
"reqwest::",
|
||||
"tonic::",
|
||||
] {
|
||||
assert!(!sources.contains(forbidden));
|
||||
}
|
||||
return;
|
||||
}
|
||||
77
crates/ksp-raw-transaction-lib/tests/public_api.rs
Normal file
77
crates/ksp-raw-transaction-lib/tests/public_api.rs
Normal file
@@ -0,0 +1,77 @@
|
||||
// file: crates/ksp-raw-transaction-lib/tests/public_api.rs
|
||||
// version: 1
|
||||
|
||||
#[test]
|
||||
fn pre_002_common_raw_contract_is_consumable_from_crate_root() {
|
||||
assert_eq!(ksp_raw_transaction_lib::RAW_TRANSACTION_FORMAT_ID, "ksp.solana.raw_transaction");
|
||||
assert_eq!(ksp_raw_transaction_lib::RAW_TRANSACTION_FORMAT_VERSION, 1);
|
||||
assert_eq!(ksp_raw_transaction_lib::MIN_RAW_TRANSACTION_SIGNATURE_TEXT_BYTES, 64);
|
||||
assert_eq!(ksp_raw_transaction_lib::MAX_RAW_TRANSACTION_SIGNATURE_TEXT_BYTES, 88);
|
||||
let network = match ksp_store_api::RawNetworkId::new("devnet") {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let signature = match ksp_raw_transaction_lib::parse_raw_transaction_signature("1".repeat(64).as_str()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let material = ksp_raw_transaction_lib::RawTransactionMaterial::binary_base64(
|
||||
network,
|
||||
signature,
|
||||
5,
|
||||
std::option::Option::None,
|
||||
"AQID",
|
||||
ksp_raw_transaction_lib::RawTransactionWireField::Null,
|
||||
ksp_raw_transaction_lib::RawTransactionWireField::Value(ksp_raw_transaction_lib::RawTransactionVersion::Legacy),
|
||||
ksp_raw_transaction_lib::RawTransactionWireField::Omitted,
|
||||
);
|
||||
let transaction = ksp_raw_transaction_lib::canonicalize_raw_transaction(material);
|
||||
assert!(transaction.is_ok());
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_002_acquisition_assembly_accepts_store_api_producer_owned_metadata() {
|
||||
let network = match ksp_store_api::RawNetworkId::new("devnet") {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let signature = match ksp_raw_transaction_lib::parse_raw_transaction_signature("1".repeat(64).as_str()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let material = ksp_raw_transaction_lib::RawTransactionMaterial::binary_base64(
|
||||
network,
|
||||
signature,
|
||||
5,
|
||||
std::option::Option::None,
|
||||
"AQID",
|
||||
ksp_raw_transaction_lib::RawTransactionWireField::Omitted,
|
||||
ksp_raw_transaction_lib::RawTransactionWireField::Omitted,
|
||||
ksp_raw_transaction_lib::RawTransactionWireField::Omitted,
|
||||
);
|
||||
let transaction = match ksp_raw_transaction_lib::canonicalize_raw_transaction(material) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let provider = match ksp_store_api::RawProvenanceCode::new("fixture") {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let protocol = match ksp_store_api::RawProvenanceCode::new("fixture.protocol") {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let method = match ksp_store_api::RawProvenanceCode::new("fixture.method") {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let received_at = match ksp_store_api::RawTimestamp::from_unix_millis(1) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let provenance = ksp_store_api::RawAcquisitionProvenance::new(provider, protocol, method, ksp_store_api::RawAcquisitionOrigin::Import, received_at);
|
||||
let acquisition = ksp_raw_transaction_lib::assemble_raw_transaction_acquisition(transaction, ksp_store_api::RawObservationKey::new([9_u8; 32]), provenance);
|
||||
assert_eq!(acquisition.transaction().reference(), acquisition.observation().transaction());
|
||||
return;
|
||||
}
|
||||
37
crates/ksp-raw-transaction-lib/tests/release_completeness.rs
Normal file
37
crates/ksp-raw-transaction-lib/tests/release_completeness.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
// file: crates/ksp-raw-transaction-lib/tests/release_completeness.rs
|
||||
// version: 1
|
||||
|
||||
#[test]
|
||||
fn pre_002_production_module_inventory_is_exact() {
|
||||
let source_root = std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src");
|
||||
let entries = match std::fs::read_dir(source_root) {
|
||||
std::result::Result::Ok(entries) => entries,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let mut names = std::vec::Vec::new();
|
||||
for entry in entries.flatten() {
|
||||
let path = entry.path();
|
||||
if path.extension().and_then(std::ffi::OsStr::to_str) == std::option::Option::Some("rs") {
|
||||
if let std::option::Option::Some(name) = path.file_name().and_then(std::ffi::OsStr::to_str) {
|
||||
names.push(name.to_owned());
|
||||
}
|
||||
}
|
||||
}
|
||||
names.sort();
|
||||
let expected = ["acquisition.rs", "canonical.rs", "error.rs", "lib.rs", "signature.rs"];
|
||||
assert_eq!(names.len(), expected.len());
|
||||
for (actual, expected_name) in names.iter().zip(expected.iter()) {
|
||||
assert_eq!(actual.as_str(), *expected_name);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_002_common_surface_contains_no_worker_job_or_transport_dependency_or_public_module() {
|
||||
let lib = std::fs::read_to_string(std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("src/lib.rs")).unwrap_or_default();
|
||||
assert!(!lib.contains("pub mod "));
|
||||
for forbidden in ["ksp_worker", "ksp_job", "ksp_onchain_transport", "ksp_config", "ksp_store_lib", "ksp_store_postgres"] {
|
||||
assert!(!lib.contains(forbidden));
|
||||
}
|
||||
return;
|
||||
}
|
||||
26
crates/ksp-raw-transaction-lib/tests/security_hardening.rs
Normal file
26
crates/ksp-raw-transaction-lib/tests/security_hardening.rs
Normal file
@@ -0,0 +1,26 @@
|
||||
// file: crates/ksp-raw-transaction-lib/tests/security_hardening.rs
|
||||
// version: 1
|
||||
|
||||
#[test]
|
||||
fn pre_002_signature_errors_never_echo_hostile_input() {
|
||||
let hostile = format!("{}0", "A".repeat(63));
|
||||
let result = ksp_raw_transaction_lib::parse_raw_transaction_signature(hostile.as_str());
|
||||
assert!(result.is_err());
|
||||
if let std::result::Result::Err(error) = result {
|
||||
assert_eq!(error.code(), ksp_raw_transaction_lib::ERROR_CODE_RAW_TRANSACTION_SIGNATURE_INVALID);
|
||||
assert!(!std::format!("{error:?}").contains(hostile.as_str()));
|
||||
assert!(!error.to_string().contains(hostile.as_str()));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_002_public_error_codes_are_stable_and_domain_scoped() {
|
||||
assert_eq!(ksp_raw_transaction_lib::ERROR_CODE_RAW_TRANSACTION_CANONICALIZATION_INVALID.domain(), "raw_transaction");
|
||||
assert_eq!(ksp_raw_transaction_lib::ERROR_CODE_RAW_TRANSACTION_CANONICALIZATION_INVALID.code(), "canonicalization_invalid");
|
||||
assert_eq!(ksp_raw_transaction_lib::ERROR_CODE_RAW_TRANSACTION_MATERIAL_INVALID.domain(), "raw_transaction");
|
||||
assert_eq!(ksp_raw_transaction_lib::ERROR_CODE_RAW_TRANSACTION_MATERIAL_INVALID.code(), "material_invalid");
|
||||
assert_eq!(ksp_raw_transaction_lib::ERROR_CODE_RAW_TRANSACTION_SIGNATURE_INVALID.domain(), "raw_transaction");
|
||||
assert_eq!(ksp_raw_transaction_lib::ERROR_CODE_RAW_TRANSACTION_SIGNATURE_INVALID.code(), "signature_invalid");
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user