Files
endorphin-aster-vm/crates/storage/tests/postgres.rs
T
codex-bot e52d2e1e4b
Verify databases and deploy Aster VM / verify-and-deploy (push) Successful in 7m25s
Separate database connections from file-backed host information and document handoff
2026-10-19 02:07:36 +08:00

54 lines
2.1 KiB
Rust

use storage::{DatabaseConfig, DatabaseConnection};
/// Run against a fresh disposable database, never a production or shared schema.
#[tokio::test]
#[ignore = "requires ASTER_TEST_POSTGRES_URL pointing to a fresh disposable PostgreSQL database"]
async fn postgres_connects_without_schema_and_executes_caller_owned_sql() {
let url = std::env::var("ASTER_TEST_POSTGRES_URL")
.expect("set ASTER_TEST_POSTGRES_URL to a fresh disposable PostgreSQL database");
let config = DatabaseConfig::Postgres(url);
let database = DatabaseConnection::connect(&config).await.unwrap();
assert_eq!(database.backend_name(), "postgresql");
assert!(database.sqlite_pool().is_none());
database.ping().await.unwrap();
let pool = database.postgres_pool().unwrap();
let tables: i64 = sqlx::query_scalar(
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public'",
)
.fetch_one(pool)
.await
.unwrap();
assert_eq!(tables, 0, "connecting must not create application tables");
let mut transaction = pool.begin().await.unwrap();
sqlx::query(
"CREATE TEMP TABLE class_rows (id INTEGER PRIMARY KEY, value TEXT NOT NULL) ON COMMIT DROP",
)
.execute(&mut *transaction)
.await
.unwrap();
sqlx::query("INSERT INTO class_rows (id, value) VALUES ($1, $2)")
.bind(1_i64)
.bind("你好 ' ; $1")
.execute(&mut *transaction)
.await
.unwrap();
let value: String = sqlx::query_scalar("SELECT value FROM class_rows WHERE id = $1")
.bind(1_i64)
.fetch_one(&mut *transaction)
.await
.unwrap();
assert_eq!(value, "你好 ' ; $1");
transaction.commit().await.unwrap();
database.close().await;
let reopened = DatabaseConnection::connect(&config).await.unwrap();
reopened.ping().await.unwrap();
let tables: i64 = sqlx::query_scalar(
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public'",
)
.fetch_one(reopened.postgres_pool().unwrap())
.await
.unwrap();
assert_eq!(tables, 0);
reopened.close().await;
}