#![allow(
clippy::unwrap_used,
clippy::expect_used,
clippy::panic,
clippy::cast_possible_truncation
)]
mod common;
mod harness_smoke;
mod inbox_claim;
mod inbox_concurrency;
mod inbox_dead;
mod inbox_dead_letters;
mod inbox_fail;
mod inbox_migration;
mod inbox_not_migrated;
mod inbox_pgdog;
mod inbox_plans;
mod inbox_process;
mod inbox_purge;
mod inbox_send_bounds;
mod inbox_spans;
mod inbox_statement_timeout;
mod migrate;
mod outbox_acquire_skip_locked;
mod outbox_acquire_skip_locked_held_lock;
mod outbox_claim_index_scale;
mod outbox_claim_no_lock_during_publish;
mod outbox_claim_token_fencing;
mod outbox_complete;
mod outbox_dead_letters;
mod outbox_dispatcher_concurrency;
mod outbox_dispatcher_leases;
mod outbox_dispatcher_lifecycle;
mod outbox_dispatcher_observability;
mod outbox_dispatcher_store_faults;
mod outbox_enqueue;
mod outbox_enqueue_bare_and_envelope_agree;
mod outbox_enqueue_serialize_error;
mod outbox_enqueue_spans;
mod outbox_epoch_millis_codec;
mod outbox_error_classification;
mod outbox_fail_retry_dead;
mod outbox_lease_management;
mod outbox_lease_recovery;
mod outbox_non_default_schema;
mod outbox_not_migrated;
mod outbox_pgdog;
mod outbox_plans;
mod outbox_poison_sweep_failure;
mod outbox_poisoned_row;
mod outbox_purge;
mod outbox_purge_concurrent_resurrection;
mod outbox_roundtrip;
mod outbox_statement_timeout;
mod outbox_stats;
mod recorder_spawn_capture;
use std::process::ExitCode;
use libtest_mimic::Arguments;
fn main() -> ExitCode {
let args = Arguments::from_args();
let rt: &'static tokio::runtime::Runtime = Box::leak(Box::new(
tokio::runtime::Runtime::new().expect("build the shared Tokio runtime"),
));
let mut container = None;
let mut conclusions = None;
let panic = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| {
container = Some(rt.block_on(common::start_shared_container()));
let mut trials = Vec::new();
trials.extend(harness_smoke::trials(rt));
trials.extend(inbox_claim::trials(rt));
trials.extend(inbox_concurrency::trials(rt));
trials.extend(inbox_dead::trials(rt));
trials.extend(inbox_dead_letters::trials(rt));
trials.extend(inbox_fail::trials(rt));
trials.extend(inbox_migration::trials(rt));
trials.extend(inbox_not_migrated::trials(rt));
trials.extend(inbox_pgdog::trials(rt));
trials.extend(inbox_plans::trials(rt));
trials.extend(inbox_process::trials(rt));
trials.extend(inbox_purge::trials(rt));
trials.extend(inbox_send_bounds::trials(rt));
trials.extend(inbox_statement_timeout::trials(rt));
trials.extend(migrate::trials(rt));
trials.extend(outbox_acquire_skip_locked::trials(rt));
trials.extend(outbox_acquire_skip_locked_held_lock::trials(rt));
trials.extend(outbox_claim_index_scale::trials(rt));
trials.extend(outbox_claim_no_lock_during_publish::trials(rt));
trials.extend(outbox_claim_token_fencing::trials(rt));
trials.extend(outbox_complete::trials(rt));
trials.extend(outbox_dead_letters::trials(rt));
trials.extend(outbox_dispatcher_concurrency::trials(rt));
trials.extend(outbox_dispatcher_leases::trials(rt));
trials.extend(outbox_dispatcher_lifecycle::trials(rt));
trials.extend(outbox_dispatcher_observability::trials(rt));
trials.extend(outbox_dispatcher_store_faults::trials(rt));
trials.extend(outbox_enqueue::trials(rt));
trials.extend(outbox_enqueue_bare_and_envelope_agree::trials(rt));
trials.extend(outbox_enqueue_serialize_error::trials(rt));
trials.extend(outbox_epoch_millis_codec::trials(rt));
trials.extend(outbox_error_classification::trials(rt));
trials.extend(outbox_fail_retry_dead::trials(rt));
trials.extend(outbox_lease_management::trials(rt));
trials.extend(outbox_lease_recovery::trials(rt));
trials.extend(outbox_non_default_schema::trials(rt));
trials.extend(outbox_not_migrated::trials(rt));
trials.extend(outbox_pgdog::trials(rt));
trials.extend(outbox_plans::trials(rt));
trials.extend(outbox_poisoned_row::trials(rt));
trials.extend(outbox_purge::trials(rt));
trials.extend(outbox_purge_concurrent_resurrection::trials(rt));
trials.extend(outbox_roundtrip::trials(rt));
trials.extend(outbox_statement_timeout::trials(rt));
trials.extend(outbox_stats::trials(rt));
let mut recorder_trials = Vec::new();
recorder_trials.extend(inbox_spans::recorder_trials(rt));
recorder_trials.extend(outbox_claim_token_fencing::recorder_trials(rt));
recorder_trials.extend(outbox_dispatcher_observability::recorder_trials(rt));
recorder_trials.extend(outbox_enqueue_spans::recorder_trials(rt));
recorder_trials.extend(outbox_poison_sweep_failure::recorder_trials(rt));
recorder_trials.extend(recorder_spawn_capture::recorder_trials(rt));
let conclusion = libtest_mimic::run(&args, trials);
let mut recorder_args = args.clone();
recorder_args.test_threads = Some(1);
let recorder_conclusion = libtest_mimic::run(&recorder_args, recorder_trials);
conclusions = Some((conclusion, recorder_conclusion));
}));
rt.block_on(async move { drop(container) });
match panic {
Ok(()) => {
let (conclusion, recorder_conclusion) =
conclusions.expect("set on every non-panicking path above");
if conclusion.has_failed() || recorder_conclusion.has_failed() {
ExitCode::FAILURE
} else {
ExitCode::SUCCESS
}
}
Err(payload) => std::panic::resume_unwind(payload),
}
}