Merge 'chore: move tx isolation fuzz test to 'tests'' from Jussi Saurio

Closes #2383
This commit is contained in:
Pekka Enberg
2025-08-01 13:50:04 +03:00
committed by GitHub
4 changed files with 32 additions and 17 deletions

22
Cargo.lock generated
View File

@@ -682,8 +682,10 @@ dependencies = [
"rusqlite",
"tempfile",
"test-log",
"tokio",
"tracing",
"tracing-subscriber",
"turso",
"turso_core",
"zerocopy 0.8.26",
]
@@ -1614,7 +1616,7 @@ dependencies = [
"hyper",
"libc",
"pin-project-lite",
"socket2",
"socket2 0.5.10",
"tokio",
"tower-service",
"tracing",
@@ -3642,6 +3644,16 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "socket2"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
dependencies = [
"libc",
"windows-sys 0.59.0",
]
[[package]]
name = "sorted-vec"
version = "0.8.6"
@@ -3989,9 +4001,9 @@ dependencies = [
[[package]]
name = "tokio"
version = "1.46.1"
version = "1.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17"
checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35"
dependencies = [
"backtrace",
"bytes",
@@ -4002,9 +4014,9 @@ dependencies = [
"pin-project-lite",
"signal-hook-registry",
"slab",
"socket2",
"socket2 0.6.0",
"tokio-macros",
"windows-sys 0.52.0",
"windows-sys 0.59.0",
]
[[package]]

View File

@@ -18,6 +18,8 @@ path = "integration/mod.rs"
anyhow.workspace = true
env_logger = "0.10.1"
turso_core = { path = "../core" }
turso = { path = "../bindings/rust" }
tokio = { version = "1.47", features = ["full"] }
rusqlite = { version = "0.34", features = ["bundled"] }
tempfile = "3.0.7"
log = "0.4.22"

View File

@@ -1,4 +1,4 @@
use rand::seq::SliceRandom;
use rand::seq::IndexedRandom;
use rand::Rng;
use rand_chacha::{rand_core::SeedableRng, ChaCha8Rng};
use std::collections::HashMap;
@@ -550,7 +550,7 @@ fn generate_operation(
shadow_db.get_visible_rows(None) // No transaction
}
};
match rng.gen_range(0..100) {
match rng.random_range(0..100) {
0..=9 => {
if !in_transaction {
(Operation::Begin, get_visible_rows(false))
@@ -576,7 +576,7 @@ fn generate_operation(
}
}
20..=22 => {
let mode = match rng.gen_range(0..3) {
let mode = match rng.random_range(0..3) {
0 => CheckpointMode::Passive,
1 => CheckpointMode::Restart,
2 => CheckpointMode::Truncate,
@@ -593,28 +593,28 @@ fn generate_operation(
}
fn generate_data_operation(rng: &mut ChaCha8Rng, visible_rows: &[DbRow]) -> Operation {
match rng.gen_range(0..4) {
match rng.random_range(0..4) {
0 => {
// Insert - generate a new ID that doesn't exist
let id = if visible_rows.is_empty() {
rng.gen_range(1..1000)
rng.random_range(1..1000)
} else {
let max_id = visible_rows.iter().map(|r| r.id).max().unwrap();
rng.gen_range(max_id + 1..max_id + 100)
rng.random_range(max_id + 1..max_id + 100)
};
let text = format!("text_{}", rng.gen_range(1..1000));
let text = format!("text_{}", rng.random_range(1..1000));
Operation::Insert { id, text }
}
1 => {
// Update - only if there are visible rows
if visible_rows.is_empty() {
// No rows to update, try insert instead
let id = rng.gen_range(1..1000);
let text = format!("text_{}", rng.gen_range(1..1000));
let id = rng.random_range(1..1000);
let text = format!("text_{}", rng.random_range(1..1000));
Operation::Insert { id, text }
} else {
let id = visible_rows.choose(rng).unwrap().id;
let text = format!("updated_{}", rng.gen_range(1..1000));
let text = format!("updated_{}", rng.random_range(1..1000));
Operation::Update { id, text }
}
}
@@ -622,8 +622,8 @@ fn generate_data_operation(rng: &mut ChaCha8Rng, visible_rows: &[DbRow]) -> Oper
// Delete - only if there are visible rows
if visible_rows.is_empty() {
// No rows to delete, try insert instead
let id = rng.gen_range(1..1000);
let text = format!("text_{}", rng.gen_range(1..1000));
let id = rng.random_range(1..1000);
let text = format!("text_{}", rng.random_range(1..1000));
Operation::Insert { id, text }
} else {
let id = visible_rows.choose(rng).unwrap().id;

View File

@@ -1,5 +1,6 @@
mod common;
mod functions;
mod fuzz;
mod fuzz_transaction;
mod query_processing;
mod wal;