48 lines
2.3 KiB
Rust
48 lines
2.3 KiB
Rust
// file: crates/ksp-app-store-desk/unit_tests/dto_observation.rs
|
|
// version: 1
|
|
|
|
//! Unit tests for Store Desk observation DTO safety and request boundaries.
|
|
|
|
#[test]
|
|
fn pre_010_observation_requests_expose_only_random_access_and_exact_entity_identity() {
|
|
let source = include_str!("../src/dto_observation.rs");
|
|
for forbidden in ["draw:", "search:", "order:", "columns:", "cursor:", "network:", "payload_preview", "data_preview"] {
|
|
assert!(!source.contains(forbidden), "observation request/row contract leaked forbidden field: {forbidden}");
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn pre_010_observation_rows_keep_source_bytes_out_and_preserve_safe_provenance_metadata() {
|
|
let provenance = crate::StoreObservationProvenanceDto {
|
|
acquisition_method: "subscribe".to_owned(),
|
|
capture_session_id: std::option::Option::Some("session-1".to_owned()),
|
|
commitment: std::option::Option::Some("confirmed".to_owned()),
|
|
endpoint_id: std::option::Option::Some("mainnet-primary".to_owned()),
|
|
filter_id: std::option::Option::Some("wallet-filter".to_owned()),
|
|
observed_at_unix_millis_decimal: std::option::Option::Some("10".to_owned()),
|
|
origin: "live".to_owned(),
|
|
protocol: "yellowstone-grpc".to_owned(),
|
|
provider: "publicnode".to_owned(),
|
|
received_at_unix_millis_decimal: "11".to_owned(),
|
|
source_payload_hash: std::option::Option::Some("12".repeat(32)),
|
|
source_payload_size_decimal: std::option::Option::Some("2048".to_owned()),
|
|
};
|
|
let row = crate::StoreAccountObservationRowDto {
|
|
is_startup: std::option::Option::Some(false),
|
|
observation_key: "34".repeat(32),
|
|
provenance,
|
|
transaction_signature: std::option::Option::Some("56".repeat(64)),
|
|
write_version_decimal: std::option::Option::Some("9".to_owned()),
|
|
};
|
|
let json = serde_json::to_string(&row);
|
|
let json = match json {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(error) => panic!("observation DTO serialization failed: {error}"),
|
|
};
|
|
assert!(json.contains("sourcePayloadHash"));
|
|
assert!(json.contains("sourcePayloadSizeDecimal"));
|
|
for forbidden in ["payloadPreview", "dataPreview", "rawBytes", "sourcePayloadBytes"] {
|
|
assert!(!json.contains(forbidden), "observation DTO serialized forbidden source material: {forbidden}");
|
|
}
|
|
}
|