0.3.17-pre.002
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-store-api/tests/dependency_boundary.rs
|
||||
// version: 8
|
||||
// version: 9
|
||||
|
||||
//! Dependency canaries for the Store API RAW foundation.
|
||||
|
||||
@@ -53,6 +53,7 @@ fn pre_006_source_boundary_keeps_models_and_capabilities_backend_free() {
|
||||
let crate_root = include_str!("../src/lib.rs");
|
||||
let model_home = include_str!("../src/model.rs");
|
||||
let raw_account = include_str!("../src/model/raw_account.rs");
|
||||
let raw_conflict = include_str!("../src/model/raw_conflict.rs");
|
||||
let raw_inspection = include_str!("../src/model/raw_inspection.rs");
|
||||
let raw_outcome = include_str!("../src/model/raw_outcome.rs");
|
||||
let raw_pagination = include_str!("../src/model/raw_pagination.rs");
|
||||
@@ -61,12 +62,14 @@ fn pre_006_source_boundary_keeps_models_and_capabilities_backend_free() {
|
||||
let raw_transaction = include_str!("../src/model/raw_transaction.rs");
|
||||
let capability_home = include_str!("../src/capability.rs");
|
||||
let raw_account_capability = include_str!("../src/capability/raw_account.rs");
|
||||
let raw_conflict_capability = include_str!("../src/capability/raw_conflict.rs");
|
||||
let raw_retention_capability = include_str!("../src/capability/raw_retention.rs");
|
||||
let raw_transaction_capability = include_str!("../src/capability/raw_transaction.rs");
|
||||
assert!(crate_root.contains("mod capability;"));
|
||||
assert!(crate_root.contains("mod error;"));
|
||||
assert!(crate_root.contains("mod model;"));
|
||||
assert!(model_home.contains("raw_account"));
|
||||
assert!(model_home.contains("raw_conflict"));
|
||||
assert!(model_home.contains("raw_inspection"));
|
||||
assert!(model_home.contains("raw_outcome"));
|
||||
assert!(model_home.contains("raw_pagination"));
|
||||
@@ -74,12 +77,14 @@ fn pre_006_source_boundary_keeps_models_and_capabilities_backend_free() {
|
||||
assert!(model_home.contains("raw_retention"));
|
||||
assert!(model_home.contains("raw_transaction"));
|
||||
assert!(capability_home.contains("raw_account"));
|
||||
assert!(capability_home.contains("raw_conflict"));
|
||||
assert!(capability_home.contains("raw_retention"));
|
||||
assert!(capability_home.contains("raw_transaction"));
|
||||
for source in [
|
||||
crate_root,
|
||||
model_home,
|
||||
raw_account,
|
||||
raw_conflict,
|
||||
raw_inspection,
|
||||
raw_outcome,
|
||||
raw_pagination,
|
||||
@@ -88,6 +93,7 @@ fn pre_006_source_boundary_keeps_models_and_capabilities_backend_free() {
|
||||
raw_transaction,
|
||||
capability_home,
|
||||
raw_account_capability,
|
||||
raw_conflict_capability,
|
||||
raw_retention_capability,
|
||||
raw_transaction_capability,
|
||||
] {
|
||||
@@ -112,6 +118,11 @@ fn pre_006_source_boundary_keeps_models_and_capabilities_backend_free() {
|
||||
for forbidden in ["TransactionStatusObservation", "RawLogNotification", "RawSlotEvent", "RawVoteEvent", "RawBlock", "YellowstoneEntry"] {
|
||||
assert!(!crate_root.contains(forbidden), "deferred pre.006 model leaked into Store API surface: {forbidden}");
|
||||
}
|
||||
assert!(raw_conflict_capability.contains("trait RawTransactionVariantInspectionRead"));
|
||||
assert!(raw_conflict_capability.contains("trait RawTransactionConflictInspectionRead"));
|
||||
assert!(raw_conflict_capability.contains("trait RawTransactionConflictHistoryRead"));
|
||||
assert!(raw_conflict_capability.contains("trait RawTransactionConflictActionWrite"));
|
||||
assert!(capability_home.contains("trait StoreErrorClassifier"));
|
||||
assert!(raw_transaction_capability.contains("trait RawTransactionRead"));
|
||||
assert!(raw_transaction_capability.contains("trait RawTransactionInspectionRead"));
|
||||
assert!(raw_transaction_capability.contains("trait RawTransactionObservationInspectionRead"));
|
||||
@@ -129,6 +140,7 @@ fn pre_006_source_boundary_keeps_models_and_capabilities_backend_free() {
|
||||
for forbidden in ["trait StoreBackend", "trait Store", "PostgresStore", "MySqlStore", "Arc<dyn"] {
|
||||
assert!(!capability_home.contains(forbidden));
|
||||
assert!(!raw_account_capability.contains(forbidden));
|
||||
assert!(!raw_conflict_capability.contains(forbidden));
|
||||
assert!(!raw_retention_capability.contains(forbidden));
|
||||
assert!(!raw_transaction_capability.contains(forbidden));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-store-api/tests/external_backend.rs
|
||||
// version: 4
|
||||
// version: 5
|
||||
|
||||
//! External-implementation canary for object-safe Store API capabilities.
|
||||
|
||||
@@ -215,6 +215,81 @@ impl ksp_store_api::RawTransactionRetentionWrite for ExternalMemoryBackend {
|
||||
}
|
||||
}
|
||||
|
||||
impl ksp_store_api::RawTransactionVariantInspectionRead for ExternalMemoryBackend {
|
||||
fn inspect_raw_transaction_variants<'a>(
|
||||
&'a self,
|
||||
query: &'a ksp_store_api::RawTransactionVariantInspectionQuery,
|
||||
) -> ksp_store_api::StoreApiFuture<'a, ksp_store_api::Result<ksp_store_api::RawInspectionPage<ksp_store_api::RawTransactionVariantSummary>>> {
|
||||
let _ = query;
|
||||
return std::boxed::Box::pin(async {
|
||||
return ksp_store_api::RawInspectionPage::try_new(std::vec::Vec::new(), 0, 0);
|
||||
});
|
||||
}
|
||||
|
||||
fn get_raw_transaction_variant<'a>(
|
||||
&'a self,
|
||||
reference: &'a ksp_store_api::RawTransactionVariantReference,
|
||||
) -> ksp_store_api::StoreApiFuture<'a, ksp_store_api::Result<std::option::Option<ksp_store_api::RawTransactionVariantDetail>>> {
|
||||
let _ = reference;
|
||||
return std::boxed::Box::pin(async {
|
||||
return std::result::Result::Ok(std::option::Option::None);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
impl ksp_store_api::RawTransactionConflictInspectionRead for ExternalMemoryBackend {
|
||||
fn inspect_raw_transaction_conflicts<'a>(
|
||||
&'a self,
|
||||
query: &'a ksp_store_api::RawTransactionConflictInspectionQuery,
|
||||
) -> ksp_store_api::StoreApiFuture<'a, ksp_store_api::Result<ksp_store_api::RawInspectionPage<ksp_store_api::RawTransactionConflictSummary>>> {
|
||||
let _ = query;
|
||||
return std::boxed::Box::pin(async {
|
||||
return ksp_store_api::RawInspectionPage::try_new(std::vec::Vec::new(), 0, 0);
|
||||
});
|
||||
}
|
||||
|
||||
fn get_raw_transaction_conflict<'a>(
|
||||
&'a self,
|
||||
reference: &'a ksp_store_api::RawTransactionConflictReference,
|
||||
) -> ksp_store_api::StoreApiFuture<'a, ksp_store_api::Result<std::option::Option<ksp_store_api::RawTransactionConflictDetail>>> {
|
||||
let _ = reference;
|
||||
return std::boxed::Box::pin(async {
|
||||
return std::result::Result::Ok(std::option::Option::None);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
impl ksp_store_api::RawTransactionConflictHistoryRead for ExternalMemoryBackend {
|
||||
fn inspect_raw_transaction_conflict_history<'a>(
|
||||
&'a self,
|
||||
query: &'a ksp_store_api::RawTransactionConflictHistoryQuery,
|
||||
) -> ksp_store_api::StoreApiFuture<'a, ksp_store_api::Result<ksp_store_api::RawInspectionPage<ksp_store_api::RawTransactionConflictEventSummary>>> {
|
||||
let _ = query;
|
||||
return std::boxed::Box::pin(async {
|
||||
return ksp_store_api::RawInspectionPage::try_new(std::vec::Vec::new(), 0, 0);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
impl ksp_store_api::RawTransactionConflictActionWrite for ExternalMemoryBackend {
|
||||
fn apply_raw_transaction_conflict_action<'a>(
|
||||
&'a self,
|
||||
request: ksp_store_api::RawTransactionConflictActionRequest,
|
||||
) -> ksp_store_api::StoreApiFuture<'a, ksp_store_api::Result<ksp_store_api::RawTransactionConflictActionOutcome>> {
|
||||
let _ = request;
|
||||
return std::boxed::Box::pin(async {
|
||||
return std::result::Result::Ok(ksp_store_api::RawTransactionConflictActionOutcome::Applied);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
impl ksp_store_api::StoreErrorClassifier for ExternalMemoryBackend {
|
||||
fn classify_store_error(&self, error: &ksp_store_api::Error) -> ksp_store_api::StoreErrorClass {
|
||||
let _ = error;
|
||||
return ksp_store_api::StoreErrorClass::Terminal;
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_8_pre_003_external_backend_implements_canonical_and_inspection_capabilities_without_runtime_crate() {
|
||||
let backend = ExternalMemoryBackend;
|
||||
@@ -232,6 +307,11 @@ fn v0_3_8_pre_003_external_backend_implements_canonical_and_inspection_capabilit
|
||||
let account_observation_write: &dyn ksp_store_api::RawAccountObservationWrite = &backend;
|
||||
let retention_read: &dyn ksp_store_api::RawTransactionRetentionRead = &backend;
|
||||
let retention_write: &dyn ksp_store_api::RawTransactionRetentionWrite = &backend;
|
||||
let variant_inspection: &dyn ksp_store_api::RawTransactionVariantInspectionRead = &backend;
|
||||
let conflict_inspection: &dyn ksp_store_api::RawTransactionConflictInspectionRead = &backend;
|
||||
let conflict_history: &dyn ksp_store_api::RawTransactionConflictHistoryRead = &backend;
|
||||
let conflict_action: &dyn ksp_store_api::RawTransactionConflictActionWrite = &backend;
|
||||
let error_classifier: &dyn ksp_store_api::StoreErrorClassifier = &backend;
|
||||
let _ = transaction_read;
|
||||
let _ = transaction_write;
|
||||
let _ = transaction_inspection;
|
||||
@@ -246,5 +326,10 @@ fn v0_3_8_pre_003_external_backend_implements_canonical_and_inspection_capabilit
|
||||
let _ = account_observation_write;
|
||||
let _ = retention_read;
|
||||
let _ = retention_write;
|
||||
let _ = variant_inspection;
|
||||
let _ = conflict_inspection;
|
||||
let _ = conflict_history;
|
||||
let _ = conflict_action;
|
||||
let _ = error_classifier;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-store-api/tests/public_api.rs
|
||||
// version: 11
|
||||
// version: 12
|
||||
|
||||
//! Integration canaries for the public `ksp-store-api` surface.
|
||||
|
||||
@@ -222,3 +222,20 @@ fn public_v0_3_16_pre_005_variant_comparator_is_available_from_crate_root() {
|
||||
let _ = comparator;
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn public_v0_3_17_pre_002_conflict_lifecycle_contracts_are_root_exported_and_dyn_compatible() {
|
||||
let variant_inspection: std::option::Option<&dyn ksp_store_api::RawTransactionVariantInspectionRead> = std::option::Option::None;
|
||||
let conflict_inspection: std::option::Option<&dyn ksp_store_api::RawTransactionConflictInspectionRead> = std::option::Option::None;
|
||||
let conflict_history: std::option::Option<&dyn ksp_store_api::RawTransactionConflictHistoryRead> = std::option::Option::None;
|
||||
let conflict_action: std::option::Option<&dyn ksp_store_api::RawTransactionConflictActionWrite> = std::option::Option::None;
|
||||
let error_classifier: std::option::Option<&dyn ksp_store_api::StoreErrorClassifier> = std::option::Option::None;
|
||||
assert!(variant_inspection.is_none());
|
||||
assert!(conflict_inspection.is_none());
|
||||
assert!(conflict_history.is_none());
|
||||
assert!(conflict_action.is_none());
|
||||
assert!(error_classifier.is_none());
|
||||
assert_ne!(ksp_store_api::StoreErrorClass::Transient, ksp_store_api::StoreErrorClass::Terminal);
|
||||
assert_ne!(ksp_store_api::RawTransactionConflictActionOutcome::AlreadyAtTarget, ksp_store_api::RawTransactionConflictActionOutcome::StaleRevision);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-store-api/tests/release_completeness.rs
|
||||
// version: 6
|
||||
// version: 7
|
||||
|
||||
//! Release-level boundary and completeness canaries for the backend-neutral Store API RAW surface.
|
||||
#[test]
|
||||
@@ -20,19 +20,24 @@ fn v0_3_8_pre_003_exact_crate_root_export_inventory_is_stable() {
|
||||
"pub use ksp_core_lib::Pubkey;",
|
||||
"pub use ksp_core_lib::Result;",
|
||||
"pub use self::capability::StoreApiFuture;",
|
||||
"pub use self::capability::StoreErrorClassifier;",
|
||||
"pub use self::capability::raw_account::RawAccountObservationInspectionRead;",
|
||||
"pub use self::capability::raw_account::RawAccountObservationRead;",
|
||||
"pub use self::capability::raw_account::RawAccountObservationWrite;",
|
||||
"pub use self::capability::raw_account::RawAccountStateRead;",
|
||||
"pub use self::capability::raw_account::RawAccountStateInspectionRead;",
|
||||
"pub use self::capability::raw_account::RawAccountStateRead;",
|
||||
"pub use self::capability::raw_account::RawAccountStateWrite;",
|
||||
"pub use self::capability::raw_conflict::RawTransactionConflictActionWrite;",
|
||||
"pub use self::capability::raw_conflict::RawTransactionConflictHistoryRead;",
|
||||
"pub use self::capability::raw_conflict::RawTransactionConflictInspectionRead;",
|
||||
"pub use self::capability::raw_conflict::RawTransactionVariantInspectionRead;",
|
||||
"pub use self::capability::raw_retention::RawTransactionRetentionRead;",
|
||||
"pub use self::capability::raw_retention::RawTransactionRetentionWrite;",
|
||||
"pub use self::capability::raw_transaction::RawTransactionInspectionRead;",
|
||||
"pub use self::capability::raw_transaction::RawTransactionObservationInspectionRead;",
|
||||
"pub use self::capability::raw_transaction::RawTransactionObservationRead;",
|
||||
"pub use self::capability::raw_transaction::RawTransactionObservationWrite;",
|
||||
"pub use self::capability::raw_transaction::RawTransactionRead;",
|
||||
"pub use self::capability::raw_transaction::RawTransactionInspectionRead;",
|
||||
"pub use self::capability::raw_transaction::RawTransactionWrite;",
|
||||
"pub use self::error::ERROR_CODE_RAW_CONFLICT;",
|
||||
"pub use self::error::ERROR_CODE_RAW_MODEL_INVALID;",
|
||||
@@ -40,9 +45,27 @@ fn v0_3_8_pre_003_exact_crate_root_export_inventory_is_stable() {
|
||||
"pub use self::error::ERROR_CODE_RAW_PROVENANCE_INVALID;",
|
||||
"pub use self::error::ERROR_CODE_RAW_QUERY_INVALID;",
|
||||
"pub use self::error::ERROR_CODE_RAW_RETENTION_INVALID;",
|
||||
"pub use self::error::StoreErrorClass;",
|
||||
"pub use self::model::raw_account::RawAccountObservation;",
|
||||
"pub use self::model::raw_account::RawAccountState;",
|
||||
"pub use self::model::raw_account::RawAccountStateReference;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictAction;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictActionOutcome;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictActionRequest;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictDetail;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictEventKind;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictEventOrigin;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictEventSummary;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictHistoryQuery;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictInspectionQuery;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictParticipantSummary;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictReference;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictResolution;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictResolutionAction;",
|
||||
"pub use self::model::raw_conflict::RawTransactionConflictSummary;",
|
||||
"pub use self::model::raw_conflict::RawTransactionVariantDetail;",
|
||||
"pub use self::model::raw_conflict::RawTransactionVariantInspectionQuery;",
|
||||
"pub use self::model::raw_conflict::RawTransactionVariantSummary;",
|
||||
"pub use self::model::raw_inspection::RawAccountObservationInspectionQuery;",
|
||||
"pub use self::model::raw_inspection::RawAccountObservationSummary;",
|
||||
"pub use self::model::raw_inspection::RawAccountStateInspectionQuery;",
|
||||
@@ -87,7 +110,6 @@ fn v0_3_8_pre_003_exact_crate_root_export_inventory_is_stable() {
|
||||
"pub use self::model::raw_retention::RawTransactionRetentionTransition;",
|
||||
"pub use self::model::raw_retention::RawTransactionTombstone;",
|
||||
"pub use self::model::raw_transaction::RawTransaction;",
|
||||
"pub use self::model::raw_transaction::compare_raw_transaction_variants;",
|
||||
"pub use self::model::raw_transaction::RawTransactionConflictStatus;",
|
||||
"pub use self::model::raw_transaction::RawTransactionObservation;",
|
||||
"pub use self::model::raw_transaction::RawTransactionReference;",
|
||||
@@ -97,6 +119,7 @@ fn v0_3_8_pre_003_exact_crate_root_export_inventory_is_stable() {
|
||||
"pub use self::model::raw_transaction::RawTransactionVariantReference;",
|
||||
"pub use self::model::raw_transaction::RawTransactionVariantRelation;",
|
||||
"pub use self::model::raw_transaction::RawTransactionVariantRelationReason;",
|
||||
"pub use self::model::raw_transaction::compare_raw_transaction_variants;",
|
||||
];
|
||||
expected.sort_unstable();
|
||||
assert_eq!(actual, expected);
|
||||
@@ -122,7 +145,16 @@ fn v0_3_8_pre_003_exact_production_module_inventory_is_raw_only() {
|
||||
};
|
||||
assert_eq!(
|
||||
model_names,
|
||||
std::vec!["raw_account.rs", "raw_inspection.rs", "raw_outcome.rs", "raw_pagination.rs", "raw_primitives.rs", "raw_retention.rs", "raw_transaction.rs"]
|
||||
std::vec![
|
||||
"raw_account.rs",
|
||||
"raw_conflict.rs",
|
||||
"raw_inspection.rs",
|
||||
"raw_outcome.rs",
|
||||
"raw_pagination.rs",
|
||||
"raw_primitives.rs",
|
||||
"raw_retention.rs",
|
||||
"raw_transaction.rs"
|
||||
]
|
||||
);
|
||||
let capability_names = rust_file_names(root.join("capability").as_path());
|
||||
assert!(capability_names.is_ok());
|
||||
@@ -130,13 +162,15 @@ fn v0_3_8_pre_003_exact_production_module_inventory_is_raw_only() {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
assert_eq!(capability_names, std::vec!["raw_account.rs", "raw_retention.rs", "raw_transaction.rs"]);
|
||||
assert_eq!(capability_names, std::vec!["raw_account.rs", "raw_conflict.rs", "raw_retention.rs", "raw_transaction.rs"]);
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_007_public_evolutive_enums_remain_non_exhaustive() {
|
||||
let sources = [
|
||||
include_str!("../src/error.rs"),
|
||||
include_str!("../src/model/raw_conflict.rs"),
|
||||
include_str!("../src/model/raw_outcome.rs"),
|
||||
include_str!("../src/model/raw_pagination.rs"),
|
||||
include_str!("../src/model/raw_primitives.rs"),
|
||||
@@ -145,6 +179,12 @@ fn pre_007_public_evolutive_enums_remain_non_exhaustive() {
|
||||
];
|
||||
for enum_name in [
|
||||
"RawAcquisitionOrigin",
|
||||
"RawTransactionConflictAction",
|
||||
"RawTransactionConflictActionOutcome",
|
||||
"RawTransactionConflictEventKind",
|
||||
"RawTransactionConflictEventOrigin",
|
||||
"RawTransactionConflictResolution",
|
||||
"RawTransactionConflictResolutionAction",
|
||||
"RawEntityWriteOutcome",
|
||||
"RawObservationWriteOutcome",
|
||||
"RawRetentionState",
|
||||
@@ -156,6 +196,7 @@ fn pre_007_public_evolutive_enums_remain_non_exhaustive() {
|
||||
"RawTransactionVariantRelation",
|
||||
"RawTransactionVariantRelationReason",
|
||||
"RawTransactionVariantWriteOutcome",
|
||||
"StoreErrorClass",
|
||||
] {
|
||||
assert_non_exhaustive(&sources, enum_name);
|
||||
}
|
||||
@@ -169,6 +210,7 @@ fn pre_007_interface_store_ownership_and_negative_scope_remain_explicit() {
|
||||
include_str!("../src/lib.rs"),
|
||||
include_str!("../src/model.rs"),
|
||||
include_str!("../src/model/raw_account.rs"),
|
||||
include_str!("../src/model/raw_conflict.rs"),
|
||||
include_str!("../src/model/raw_inspection.rs"),
|
||||
include_str!("../src/model/raw_outcome.rs"),
|
||||
include_str!("../src/model/raw_pagination.rs"),
|
||||
@@ -177,6 +219,7 @@ fn pre_007_interface_store_ownership_and_negative_scope_remain_explicit() {
|
||||
include_str!("../src/model/raw_transaction.rs"),
|
||||
include_str!("../src/capability.rs"),
|
||||
include_str!("../src/capability/raw_account.rs"),
|
||||
include_str!("../src/capability/raw_conflict.rs"),
|
||||
include_str!("../src/capability/raw_retention.rs"),
|
||||
include_str!("../src/capability/raw_transaction.rs"),
|
||||
];
|
||||
@@ -207,7 +250,9 @@ fn pre_007_interface_store_ownership_and_negative_scope_remain_explicit() {
|
||||
#[test]
|
||||
fn v0_3_8_pre_003_capability_inventory_stays_fine_grained_without_runtime_facade() {
|
||||
let sources = [
|
||||
include_str!("../src/capability.rs"),
|
||||
include_str!("../src/capability/raw_account.rs"),
|
||||
include_str!("../src/capability/raw_conflict.rs"),
|
||||
include_str!("../src/capability/raw_retention.rs"),
|
||||
include_str!("../src/capability/raw_transaction.rs"),
|
||||
];
|
||||
@@ -228,6 +273,11 @@ fn v0_3_8_pre_003_capability_inventory_stays_fine_grained_without_runtime_facade
|
||||
"pub trait RawAccountStateRead: std::marker::Send + std::marker::Sync {",
|
||||
"pub trait RawAccountStateInspectionRead: std::marker::Send + std::marker::Sync {",
|
||||
"pub trait RawAccountStateWrite: std::marker::Send + std::marker::Sync {",
|
||||
"pub trait RawTransactionConflictActionWrite: std::marker::Send + std::marker::Sync {",
|
||||
"pub trait RawTransactionConflictHistoryRead: std::marker::Send + std::marker::Sync {",
|
||||
"pub trait RawTransactionConflictInspectionRead: std::marker::Send + std::marker::Sync {",
|
||||
"pub trait RawTransactionVariantInspectionRead: std::marker::Send + std::marker::Sync {",
|
||||
"pub trait StoreErrorClassifier: std::marker::Send + std::marker::Sync {",
|
||||
"pub trait RawTransactionObservationInspectionRead: std::marker::Send + std::marker::Sync {",
|
||||
"pub trait RawTransactionObservationRead: std::marker::Send + std::marker::Sync {",
|
||||
"pub trait RawTransactionObservationWrite: std::marker::Send + std::marker::Sync {",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-store-api/tests/security_hardening.rs
|
||||
// version: 3
|
||||
// version: 4
|
||||
|
||||
//! Adversarial and retention-race canaries for the Store API RAW foundation.
|
||||
|
||||
@@ -166,3 +166,62 @@ fn v0_3_8_pre_003_inspection_summaries_and_counts_reject_payload_shaped_or_incon
|
||||
assert!(ksp_store_api::RawInspectionPage::<u64>::try_new(std::vec::Vec::new(), 1, 2).is_err());
|
||||
return;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn v0_3_17_pre_002_variant_detail_debug_keeps_complete_payload_material_redacted() {
|
||||
let network = match ksp_store_api::RawNetworkId::new("mainnet".to_owned()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let transaction_reference = ksp_store_api::RawTransactionReference::new(network, ksp_store_api::RawTransactionSignature::new([0x71_u8; 64]));
|
||||
let variant_id = match ksp_store_api::RawTransactionVariantId::try_new(1) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let variant_reference = ksp_store_api::RawTransactionVariantReference::new(transaction_reference.clone(), variant_id);
|
||||
let format = match ksp_store_api::RawFormatId::new("ksp.solana.raw_transaction".to_owned()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let created_at = match ksp_store_api::RawTimestamp::from_unix_millis(1_000) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let payload_bytes = HOSTILE_MARKER.as_bytes().to_vec().into_boxed_slice();
|
||||
let payload_size = match u64::try_from(payload_bytes.len()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let summary = ksp_store_api::RawTransactionVariantSummary::try_new(
|
||||
variant_reference,
|
||||
ksp_store_api::RawTransactionVariantOrigin::Native,
|
||||
77,
|
||||
std::option::Option::None,
|
||||
format.clone(),
|
||||
1,
|
||||
ksp_store_api::RawRetentionState::Full,
|
||||
std::option::Option::Some(payload_size),
|
||||
true,
|
||||
1,
|
||||
created_at,
|
||||
);
|
||||
let summary = match summary {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let payload = ksp_store_api::RawPayload::try_new(format, 1, payload_bytes, ksp_store_api::RawContentHash::new([0x72_u8; 32]));
|
||||
let payload = match payload {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let transaction = ksp_store_api::RawTransaction::new(transaction_reference, 77, std::option::Option::None, payload);
|
||||
let detail = ksp_store_api::RawTransactionVariantDetail::try_new(summary, std::option::Option::Some(transaction));
|
||||
let detail = match detail {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return,
|
||||
};
|
||||
let debug = std::format!("{detail:?}");
|
||||
assert!(!debug.contains(HOSTILE_MARKER));
|
||||
assert!(!debug.contains("payload: ["));
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user