Files

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);
}