Merge 'Fix sqlite3 test cases' from Pekka Enberg

The CI is sometimes failing with the following error:
```thread '<unnamed>' panicked at sqlite3/src/lib.rs:156:37:
  called `Result::unwrap()` on an `Err` value: InternalError("WAL already enabled")
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

  thread '<unnamed>' panicked at library/core/src/panicking.rs:226:5:
  panic in a function that cannot unwind
  stack backtrace:
     0:     0x7ff612e11502 - std::backtrace_rs::backtrace::libunwind::trace::h74680e970b6e0712
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
     1:     0x7ff612e11502 - std::backtrace_rs::backtrace::trace_unsynchronized::ha3bf590e3565a312
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
     2:     0x7ff612e11502 - std::sys::backtrace::_print_fmt::hcf16024cbdd6c458
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/sys/backtrace.rs:66:9
     3:     0x7ff612e11502 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h46a716bba2450163
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/sys/backtrace.rs:39:26
     4:     0x7ff612e338a3 - core::fmt::rt::Argument::fmt::ha695e732309707b7
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/fmt/rt.rs:181:76
     5:     0x7ff612e338a3 - core::fmt::write::h275e5980d7008551
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/fmt/mod.rs:1446:25
     6:     0x7ff612e0f003 - std::io::default_write_fmt::hdc4119be3eb77042
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/io/mod.rs:639:11
     7:     0x7ff612e0f003 - std::io::Write::write_fmt::h561a66a0340b6995
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/io/mod.rs:1914:13
     8:     0x7ff612e11352 - std::sys::backtrace::BacktraceLock::print::hafb9d5969adc39a0
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/sys/backtrace.rs:42:9
     9:     0x7ff612e12842 - std::panicking::default_hook::{{closure}}::hae2e97a5c4b2b777
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/panicking.rs:300:22
    10:     0x7ff612e12645 - std::panicking::default_hook::h3db1b505cfc4eb79
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/panicking.rs:327:9
    11:     0x7ff612e131e2 - std::panicking::rust_panic_with_hook::h409da73ddef13937
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/panicking.rs:833:13
    12:     0x7ff612e12f56 - std::panicking::begin_panic_handler::{{closure}}::h159b61b27f96a9c2
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/panicking.rs:699:13
    13:     0x7ff612e119f9 - std::sys::backtrace::__rust_end_short_backtrace::h5b56844d75e766fc
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/sys/backtrace.rs:168:18
    14:     0x7ff612e12c1d - __rustc[4794b31dd7191200]::rust_begin_unwind
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/std/src/panicking.rs:697:5
    15:     0x7ff611f56f9d - core::panicking::panic_nounwind_fmt::runtime::h4c94eb695becba00
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/panicking.rs:117:22
    16:     0x7ff611f56f9d - core::panicking::panic_nounwind_fmt::hc3cf3432011a3c3f
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/intrinsics/mod.rs:3196:9
    17:     0x7ff611f57032 - core::panicking::panic_nounwind::h0c59dc9f7f043ead
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/panicking.rs:226:5
    18:     0x7ff611f57191 - core::panicking::panic_cannot_unwind::hb8732afd89555502
                                 at /rustc/6b00bc3880198600130e1cf62b8f8a93494488cc/library/core/src/panicking.rs:331:5
    19:     0x7ff611f585ee - sqlite3_open
                                 at /home/runner/_work/turso/turso/sqlite3/src/lib.rs:127:1
    20:     0x55f88e591f2c - compat::tests::test_wal_checkpoint_v2::hc70b8ddc1bc8d78d
                                 at /home/runner/_work/turso/turso/sqlite3/tests/compat/mod.rs:188:17
```
As Rust integration tests run in parallel, they cannot use the same
tests files. However, as it turns out, one test does not even need a
file, and the other two are redundant so we can remote them.

Reviewed-by: Nikita Sivukhin (@sivukhin)

Closes #2936
This commit is contained in:
Pekka Enberg
2025-09-05 10:57:23 +03:00
committed by GitHub

View File

@@ -149,10 +149,7 @@ mod tests {
fn test_prepare_misuse() {
unsafe {
let mut db = ptr::null_mut();
assert_eq!(
sqlite3_open(c"../testing/testing_clone.db".as_ptr(), &mut db),
SQLITE_OK
);
assert_eq!(sqlite3_open(c":memory:".as_ptr(), &mut db), SQLITE_OK);
let mut stmt = ptr::null_mut();
assert_eq!(
@@ -165,82 +162,6 @@ mod tests {
}
}
#[test]
fn test_wal_checkpoint() {
unsafe {
// Test with valid db
let mut db = ptr::null_mut();
assert_eq!(
sqlite3_open(c"../testing/testing_clone.db".as_ptr(), &mut db),
SQLITE_OK
);
assert_eq!(sqlite3_wal_checkpoint(db, ptr::null()), SQLITE_OK);
assert_eq!(sqlite3_close(db), SQLITE_OK);
}
}
#[test]
fn test_wal_checkpoint_v2() {
unsafe {
// Test with valid db
let mut db = ptr::null_mut();
assert_eq!(
sqlite3_open(c"../testing/testing_clone.db".as_ptr(), &mut db),
SQLITE_OK
);
let mut log_size = 0;
let mut checkpoint_count = 0;
// Test different checkpoint modes
assert_eq!(
sqlite3_wal_checkpoint_v2(
db,
ptr::null(),
SQLITE_CHECKPOINT_PASSIVE,
&mut log_size,
&mut checkpoint_count
),
SQLITE_OK
);
// TODO: uncomment when SQLITE_CHECKPOINT_FULL is supported
// assert_eq!(
// sqlite3_wal_checkpoint_v2(
// db,
// ptr::null(),
// SQLITE_CHECKPOINT_FULL,
// &mut log_size,
// &mut checkpoint_count
// ),
// SQLITE_OK
// );
assert_eq!(
sqlite3_wal_checkpoint_v2(
db,
ptr::null(),
SQLITE_CHECKPOINT_RESTART,
&mut log_size,
&mut checkpoint_count
),
SQLITE_OK
);
assert_eq!(
sqlite3_wal_checkpoint_v2(
db,
ptr::null(),
SQLITE_CHECKPOINT_TRUNCATE,
&mut log_size,
&mut checkpoint_count
),
SQLITE_OK
);
assert_eq!(sqlite3_close(db), SQLITE_OK);
}
}
#[test]
fn test_sqlite3_bind_int() {
unsafe {