106 lines
5.8 KiB
Rust
106 lines
5.8 KiB
Rust
// file: crates/ksp-store-lib/tests/public_api.rs
|
|
// version: 12
|
|
|
|
#![warn(missing_docs)]
|
|
#![deny(unreachable_pub)]
|
|
#![forbid(unsafe_code)]
|
|
|
|
//! Public API canaries for Store settings, lifecycle and Store API reexports.
|
|
|
|
#[test]
|
|
fn pre_003_settings_and_lifecycle_contract_are_available_from_crate_root() {
|
|
let postgres = ksp_store_lib::PostgresStoreSettings::new(
|
|
"postgresql://operator-supplied-sensitive-value",
|
|
ksp_store_lib::PostgresPoolSettings::default(),
|
|
ksp_store_lib::PostgresTlsMode::VerifyFull,
|
|
ksp_store_lib::PostgresBootstrapSettings::default(),
|
|
);
|
|
let network = match ksp_store_lib::RawNetworkId::new("devnet") {
|
|
std::result::Result::Ok(value) => value,
|
|
std::result::Result::Err(error) => panic!("valid public API network rejected: {error:?}"),
|
|
};
|
|
let settings = ksp_store_lib::StoreSettings::with_default_shutdown(network, ksp_store_lib::StoreBackendSettings::Postgres(postgres));
|
|
assert_eq!(settings.backend_kind(), ksp_store_lib::StoreBackendKind::Postgres);
|
|
assert_eq!(settings.network().as_str(), "devnet");
|
|
assert!(settings.validate().is_ok());
|
|
let _open = ksp_store_lib::Store::open;
|
|
let _close = ksp_store_lib::Store::close;
|
|
let _runtime_snapshot = ksp_store_lib::Store::runtime_snapshot;
|
|
let _health = ksp_store_lib::Store::health;
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_005_common_and_postgres_error_codes_are_stable_and_store_owned() {
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_SETTINGS_INVALID.domain(), "store");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_SETTINGS_INVALID.code(), "settings_invalid");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_BACKEND_NOT_COMPILED.code(), "backend_not_compiled");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_BACKEND_OPEN_FAILED.code(), "backend_open_failed");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_CONFIG_INVALID.code(), "postgres_config_invalid");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_CONNECT_FAILED.code(), "postgres_connect_failed");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_DATA_INVALID.code(), "postgres_data_invalid");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_HEALTH_FAILED.code(), "postgres_health_failed");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_POOL_TIMEOUT.code(), "postgres_pool_timeout");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_READ_FAILED.code(), "postgres_read_failed");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_RETENTION_COMPACTION_UNSUPPORTED.code(), "postgres_retention_compaction_unsupported");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_MIGRATION_FAILED.code(), "postgres_migration_failed");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_MIGRATION_MISMATCH.code(), "postgres_migration_mismatch");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_PAGE_LIMIT_UNSUPPORTED.code(), "postgres_page_limit_unsupported");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_SCHEMA_NEWER.code(), "postgres_schema_newer");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_TLS_FAILED.code(), "postgres_tls_failed");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_POSTGRES_WRITE_FAILED.code(), "postgres_write_failed");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_RAW_REFERENCE_NOT_FOUND.code(), "raw_reference_not_found");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_BACKEND_CLOSED.code(), "backend_closed");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_SHUTDOWN_TIMEOUT.code(), "shutdown_timeout");
|
|
assert_eq!(ksp_store_lib::ERROR_CODE_WRONG_NETWORK.code(), "wrong_network");
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn v0_3_8_pre_003_facade_reexports_backend_agnostic_inspection_types_without_dispatch() {
|
|
let _raw_transaction = std::mem::size_of::<std::option::Option<ksp_store_lib::RawTransaction>>();
|
|
let _raw_account_state = std::mem::size_of::<std::option::Option<ksp_store_lib::RawAccountState>>();
|
|
let _query = std::mem::size_of::<std::option::Option<ksp_store_lib::RawTransactionQuery>>();
|
|
let _inspection_query = std::mem::size_of::<std::option::Option<ksp_store_lib::RawTransactionInspectionQuery>>();
|
|
let _inspection_page = std::mem::size_of::<std::option::Option<ksp_store_lib::RawInspectionPage<ksp_store_lib::RawTransactionSummary>>>();
|
|
let _capability = std::mem::size_of::<std::option::Option<&dyn ksp_store_lib::RawTransactionRead>>();
|
|
let _inspection_capability = std::mem::size_of::<std::option::Option<&dyn ksp_store_lib::RawTransactionInspectionRead>>();
|
|
let _result: ksp_store_lib::Result<()> = std::result::Result::Ok(());
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn pre_007_health_and_runtime_snapshot_types_are_portable_crate_root_contracts() {
|
|
let _state = std::mem::size_of::<std::option::Option<ksp_store_lib::StoreHealthState>>();
|
|
let _health = std::mem::size_of::<std::option::Option<ksp_store_lib::StoreHealthSnapshot>>();
|
|
let _runtime = std::mem::size_of::<std::option::Option<ksp_store_lib::StoreRuntimeSnapshot>>();
|
|
return;
|
|
}
|
|
|
|
fn assert_raw_capabilities<T>()
|
|
where
|
|
T: ksp_store_lib::RawAccountObservationInspectionRead
|
|
+ ksp_store_lib::RawAccountObservationRead
|
|
+ ksp_store_lib::RawAccountObservationWrite
|
|
+ ksp_store_lib::RawAccountStateInspectionRead
|
|
+ ksp_store_lib::RawAccountStateRead
|
|
+ ksp_store_lib::RawAccountStateWrite
|
|
+ ksp_store_lib::RawTransactionInspectionRead
|
|
+ ksp_store_lib::RawTransactionObservationInspectionRead
|
|
+ ksp_store_lib::RawTransactionObservationRead
|
|
+ ksp_store_lib::RawTransactionObservationWrite
|
|
+ ksp_store_lib::RawTransactionRead
|
|
+ ksp_store_lib::RawTransactionRetentionRead
|
|
+ ksp_store_lib::RawTransactionRetentionWrite
|
|
+ ksp_store_lib::RawTransactionWrite,
|
|
{
|
|
let _marker = std::marker::PhantomData::<T>;
|
|
return;
|
|
}
|
|
|
|
#[test]
|
|
fn v0_3_8_pre_009_store_facade_implements_entity_and_observation_inspection_capabilities_as_14_of_14() {
|
|
assert_raw_capabilities::<ksp_store_lib::Store>();
|
|
return;
|
|
}
|