0e8f1ca03a
Добавить структурированные журналы, метрики, трассировку и безопасный канал критических ошибок. Усилить границы рантайма, тесты, проверку зависимостей и сценарии развёртывания.
45 lines
1.5 KiB
Rust
45 lines
1.5 KiB
Rust
use crank_registry::PostgresRegistry;
|
|
use sqlx::Row;
|
|
|
|
#[tokio::test]
|
|
async fn core_migration_is_versioned_and_safe_under_concurrent_startup() {
|
|
let database_url = crank_test_support::postgres_schema_url("test_core_migration").await;
|
|
|
|
let (first, second) = tokio::join!(
|
|
PostgresRegistry::connect(&database_url),
|
|
PostgresRegistry::connect(&database_url),
|
|
);
|
|
let first = first.expect("first service startup must apply the migration");
|
|
second.expect("second service startup must observe the applied migration");
|
|
|
|
let rows = sqlx::query(
|
|
"select version, description, checksum from __crank_core_migrations order by version",
|
|
)
|
|
.fetch_all(first.pool())
|
|
.await
|
|
.expect("migration ledger must be readable");
|
|
|
|
assert_eq!(rows.len(), 1);
|
|
assert_eq!(rows[0].get::<i32, _>("version"), 1);
|
|
assert_eq!(
|
|
rows[0].get::<String, _>("description"),
|
|
"community baseline"
|
|
);
|
|
assert_eq!(
|
|
rows[0].get::<String, _>("checksum"),
|
|
"crank-community-baseline-v1"
|
|
);
|
|
|
|
let approval_columns = sqlx::query(
|
|
"select column_name
|
|
from information_schema.columns
|
|
where table_schema = current_schema()
|
|
and table_name = 'approval_requests'
|
|
and column_name in ('execution_started_at', 'execution_attempts', 'request_fingerprint')",
|
|
)
|
|
.fetch_all(first.pool())
|
|
.await
|
|
.expect("approval schema must be readable");
|
|
assert_eq!(approval_columns.len(), 3);
|
|
}
|