// file: crates/ksp-store-api/unit_tests/model/raw_primitives.rs // version: 2 fn code(value: &str) -> std::option::Option { return match crate::RawProvenanceCode::new(value.to_owned()) { std::result::Result::Ok(value) => std::option::Option::Some(value), std::result::Result::Err(_) => std::option::Option::None, }; } fn timestamp(unix_millis: u64) -> std::option::Option { return match crate::RawTimestamp::from_unix_millis(unix_millis) { std::result::Result::Ok(value) => std::option::Option::Some(value), std::result::Result::Err(_) => std::option::Option::None, }; } #[test] fn raw_codes_are_bounded_nonempty_and_reject_url_like_or_control_values() { let network = crate::RawNetworkId::new("mainnet".to_owned()); assert!(network.is_ok()); let format = crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned()); assert!(format.is_ok()); let maximum = "a".repeat(crate::MAX_RAW_CODE_BYTES); assert!(crate::RawProvenanceCode::new(maximum).is_ok()); assert!(crate::RawProvenanceCode::new(std::string::String::new()).is_err()); assert!(crate::RawProvenanceCode::new("bad value".to_owned()).is_err()); assert!(crate::RawProvenanceCode::new("https://secret.example".to_owned()).is_err()); assert!(crate::RawProvenanceCode::new("bad\nvalue".to_owned()).is_err()); assert!(crate::RawProvenanceCode::new("a".repeat(crate::MAX_RAW_CODE_BYTES + 1)).is_err()); return; } #[test] fn raw_timestamp_accepts_documented_maximum_and_rejects_larger_values() { let maximum = crate::RawTimestamp::from_unix_millis(crate::MAX_RAW_UNIX_MILLIS); assert!(maximum.is_ok()); let too_large = crate::RawTimestamp::from_unix_millis(crate::MAX_RAW_UNIX_MILLIS + 1); assert!(too_large.is_err()); return; } #[test] fn raw_payload_is_nonempty_versioned_bounded_and_debug_omits_bytes() { let format_result = crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned()); assert!(format_result.is_ok()); let format = match format_result { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let sentinel = b"RAW_PAYLOAD_SENTINEL_NEVER_RENDER".to_vec().into_boxed_slice(); let payload_result = crate::RawPayload::try_new(format, 1, sentinel, crate::RawContentHash::new([7_u8; 32])); assert!(payload_result.is_ok()); let payload = match payload_result { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; assert_eq!(payload.bytes(), b"RAW_PAYLOAD_SENTINEL_NEVER_RENDER"); assert_eq!(payload.byte_len(), b"RAW_PAYLOAD_SENTINEL_NEVER_RENDER".len()); assert_eq!(payload.format_version(), 1); let debug = format!("{payload:?}"); assert!(!debug.contains("RAW_PAYLOAD_SENTINEL_NEVER_RENDER")); assert!(debug.contains("len")); let empty_format = match crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned()) { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; assert!(crate::RawPayload::try_new(empty_format, 1, std::vec::Vec::new().into_boxed_slice(), crate::RawContentHash::new([0_u8; 32])).is_err()); let zero_version_format = match crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned()) { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; assert!(crate::RawPayload::try_new(zero_version_format, 0, vec![1_u8].into_boxed_slice(), crate::RawContentHash::new([0_u8; 32])).is_err()); let oversized_format = match crate::RawFormatId::new("ksp.solana.raw_transaction".to_owned()) { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let oversized = vec![0_u8; crate::MAX_RAW_PAYLOAD_BYTES + 1].into_boxed_slice(); let error = crate::RawPayload::try_new(oversized_format, 1, oversized, crate::RawContentHash::new([0_u8; 32])); assert!(error.is_err()); return; } #[test] fn acquisition_provenance_preserves_safe_metadata_and_validates_time_and_size() { let received_at = match timestamp(2_000) { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let observed_at = match timestamp(1_000) { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let provider = match code("publicnode") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let protocol = match code("yellowstone_grpc") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let method = match code("transactions") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let endpoint = match code("main") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let commitment = match code("confirmed") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let session = match code("session_1") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let filter = match code("all_transactions") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let provenance = crate::RawAcquisitionProvenance::new(provider, protocol, method, crate::RawAcquisitionOrigin::Live, received_at) .with_endpoint_id(endpoint) .with_commitment(commitment) .with_capture_session_id(session) .with_filter_id(filter) .with_source_payload_hash(crate::RawContentHash::new([3_u8; 32])); let provenance_result = provenance.try_with_observed_at(observed_at); assert!(provenance_result.is_ok()); let provenance = match provenance_result { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; let provenance_result = provenance.try_with_source_payload_size_bytes(4_096); assert!(provenance_result.is_ok()); let provenance = match provenance_result { std::result::Result::Ok(value) => value, std::result::Result::Err(_) => return, }; assert_eq!(provenance.provider().as_str(), "publicnode"); assert_eq!(provenance.protocol().as_str(), "yellowstone_grpc"); assert_eq!(provenance.acquisition_method().as_str(), "transactions"); assert_eq!(provenance.origin(), crate::RawAcquisitionOrigin::Live); assert_eq!(provenance.observed_at(), std::option::Option::Some(observed_at)); assert_eq!(provenance.received_at(), received_at); assert_eq!(provenance.source_payload_size_bytes(), std::option::Option::Some(4_096)); let reversed_provider = match code("provider") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let reversed_protocol = match code("solana_websocket") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let reversed_method = match code("transactionSubscribe") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let reversed_received = match timestamp(1_000) { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let reversed_observed = match timestamp(2_000) { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let reversed = crate::RawAcquisitionProvenance::new(reversed_provider, reversed_protocol, reversed_method, crate::RawAcquisitionOrigin::Live, reversed_received) .try_with_observed_at(reversed_observed); assert!(reversed.is_err()); let oversized_provider = match code("provider") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let oversized_protocol = match code("solana_http") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let oversized_method = match code("getTransaction") { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let oversized_received = match timestamp(2_000) { std::option::Option::Some(value) => value, std::option::Option::None => return, }; let oversized_source = crate::RawAcquisitionProvenance::new( oversized_provider, oversized_protocol, oversized_method, crate::RawAcquisitionOrigin::Backfill, oversized_received, ) .try_with_source_payload_size_bytes(crate::MAX_RAW_SOURCE_PAYLOAD_BYTES + 1); assert!(oversized_source.is_err()); return; }