diff --git a/Cargo.lock b/Cargo.lock index ab34ffa24..9ce4e9170 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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]] diff --git a/tests/Cargo.toml b/tests/Cargo.toml index c50c69e40..445e1e335 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -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" diff --git a/bindings/rust/tests/transaction_isolation_fuzz.rs b/tests/integration/fuzz_transaction/mod.rs similarity index 97% rename from bindings/rust/tests/transaction_isolation_fuzz.rs rename to tests/integration/fuzz_transaction/mod.rs index af6b38c1a..c8f507c0d 100644 --- a/bindings/rust/tests/transaction_isolation_fuzz.rs +++ b/tests/integration/fuzz_transaction/mod.rs @@ -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; diff --git a/tests/integration/mod.rs b/tests/integration/mod.rs index 5e99524ab..9d68aff5d 100644 --- a/tests/integration/mod.rs +++ b/tests/integration/mod.rs @@ -1,5 +1,6 @@ mod common; mod functions; mod fuzz; +mod fuzz_transaction; mod query_processing; mod wal;