56 lines
2.0 KiB
Rust
56 lines
2.0 KiB
Rust
//! Runs the shared `Store` conformance suite against a live Postgres.
|
|
//!
|
|
//! Gated behind the TRUSTY_PG_URL env var. Set it to a libpq connection
|
|
//! string that points at a disposable test DB, e.g.:
|
|
//!
|
|
//! TRUSTY_PG_URL="host=localhost user=postgres password=postgres dbname=trusty_test"
|
|
//! cargo test -p trusty-postgres --test conformance -- --nocapture
|
|
//!
|
|
//! If TRUSTY_PG_URL is not set, the test prints a skip notice and exits
|
|
//! clean. This keeps the default `cargo test --workspace` hermetic.
|
|
|
|
use trusty_postgres::TrustyPostgres;
|
|
use trusty_store::testing::run_conformance;
|
|
|
|
const ENV_URL: &str = "TRUSTY_PG_URL";
|
|
|
|
fn reset_schema(store: &mut TrustyPostgres) {
|
|
// Drop-and-recreate so the suite starts from a known-empty state.
|
|
// Done by connecting to the same DB and issuing the drops directly.
|
|
let url = std::env::var(ENV_URL).expect("TRUSTY_PG_URL must be set");
|
|
let mut client = postgres::Client::connect(&url, postgres::NoTls).expect("connect");
|
|
client
|
|
.batch_execute(
|
|
"DROP TABLE IF EXISTS chain_checkpoint CASCADE;
|
|
DROP TABLE IF EXISTS producer_identity CASCADE;
|
|
DROP TABLE IF EXISTS chain_tips CASCADE;
|
|
DROP TABLE IF EXISTS hash_index CASCADE;
|
|
DROP TABLE IF EXISTS provenance_envelope CASCADE;
|
|
DROP TABLE IF EXISTS schema_meta CASCADE;",
|
|
)
|
|
.expect("drop tables");
|
|
let _ = store; // store gets recreated below
|
|
}
|
|
|
|
#[test]
|
|
fn postgres_passes_store_conformance() {
|
|
let url = match std::env::var(ENV_URL) {
|
|
Ok(v) => v,
|
|
Err(_) => {
|
|
eprintln!(
|
|
"SKIP: set {} to run the conformance suite against a live Postgres",
|
|
ENV_URL
|
|
);
|
|
return;
|
|
}
|
|
};
|
|
|
|
// Initial open to ensure the tables exist.
|
|
let mut store = TrustyPostgres::open(&url).expect("open");
|
|
reset_schema(&mut store);
|
|
// Re-open so apply_schema runs against a clean DB.
|
|
let mut store = TrustyPostgres::open(&url).expect("re-open");
|
|
|
|
run_conformance(&mut store);
|
|
}
|