udb 0.4.22

Universal Data Broker — a Rust gRPC broker over multiple databases (Postgres, MySQL, SQLite, MongoDB, ClickHouse, Cassandra, MSSQL, Redis, Qdrant, S3, Neo4j, …) with per-tenant RLS, 2PC, sagas, and CDC.
Documentation
use crate::backend::BackendKind;
use crate::runtime::executors::ResourceAdminExecutor;
use crate::runtime::executors::gcs::{GcsClient, GcsExecutor};

use super::object_live_support::assert_compiled_object_tenant_isolation;
use super::support::live_ir_enabled;

const PROJECT: &str = "gcs-live";

#[tokio::test]
#[ignore = "requires UDB_IR_LIVE_GOLDEN_TESTS=1, UDB_GCS_DSN/ADC, and feature=gcs"]
async fn gcs_compiled_object_read_write_delete_match_live_objects() {
    if !live_ir_enabled() {
        eprintln!("skipping: set UDB_IR_LIVE_GOLDEN_TESTS=1 to run live IR golden tests");
        return;
    }
    let Ok(project_id) = std::env::var("UDB_GCS_DSN") else {
        eprintln!("UDB_GCS_DSN unset - skipping live GCS IR golden");
        return;
    };

    let executor = GcsExecutor::new(
        GcsClient::new(project_id)
            .await
            .expect("create GCS client from ADC"),
    );
    let bucket = format!("udb-ir-live-{}", uuid::Uuid::new_v4().simple());
    ResourceAdminExecutor::ensure_resource(&executor, &bucket, "{}")
        .await
        .expect("create live GCS bucket");
    assert_compiled_object_tenant_isolation(BackendKind::Gcs, "GCS", PROJECT, &executor, &bucket)
        .await;
    let _ = ResourceAdminExecutor::drop_resource(&executor, &bucket).await;
}