From ddbfada8bdaa4323b493a555d29bab2ee995e459 Mon Sep 17 00:00:00 2001 From: Pere Diaz Bou Date: Mon, 17 Feb 2025 08:47:55 +0100 Subject: [PATCH] fix wrong usage of insert in fuzz tests --- core/storage/btree.rs | 59 +++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/core/storage/btree.rs b/core/storage/btree.rs index f2db4784b..b33109f5b 100644 --- a/core/storage/btree.rs +++ b/core/storage/btree.rs @@ -2775,6 +2775,7 @@ mod tests { use crate::types::Text; use crate::{BufferPool, DatabaseStorage, WalFile, WalFileShared, WriteCompletion}; use std::cell::RefCell; + use std::ops::Deref; use std::panic; use std::rc::Rc; use std::sync::Arc; @@ -3170,9 +3171,18 @@ mod tests { size, insert_id ); + run_until_done( + || { + let key = SeekKey::TableRowId(key as u64); + cursor.move_to(key, SeekOp::EQ) + }, + pager.deref(), + ) + .unwrap(); + let key = OwnedValue::Integer(key); let value = Record::new(vec![OwnedValue::Blob(Rc::new(vec![0; size]))]); - cursor.insert(&key, &value, false).unwrap(); + run_until_done(|| cursor.insert(&key, &value, true), pager.deref()).unwrap(); } tracing::info!( "=========== btree ===========\n{}\n\n", @@ -3751,23 +3761,15 @@ mod tests { let key = OwnedValue::Integer(i); let value = Record::new(vec![OwnedValue::Integer(i)]); tracing::trace!("before insert {}", i); - loop { - let key = SeekKey::TableRowId(i as u64); - match cursor.move_to(key, SeekOp::EQ).unwrap() { - CursorResult::Ok(_) => break, - CursorResult::IO => { - pager.io.run_once().unwrap(); - } - } - } - loop { - match cursor.insert(&key, &value, true).unwrap() { - CursorResult::Ok(_) => break, - CursorResult::IO => { - pager.io.run_once().unwrap(); - } - } - } + run_until_done( + || { + let key = SeekKey::TableRowId(i as u64); + cursor.move_to(key, SeekOp::EQ) + }, + pager.deref(), + ) + .unwrap(); + run_until_done(|| cursor.insert(&key, &value, true), pager.deref()).unwrap(); keys.push(i); } if matches!(validate_btree(pager.clone(), root_page), (_, false)) { @@ -3780,14 +3782,21 @@ mod tests { for key in keys.iter() { let mut cursor = BTreeCursor::new(pager.clone(), root_page); let key = OwnedValue::Integer(*key); - loop { - match cursor.exists(&key).unwrap() { - CursorResult::Ok(exists) => { - assert!(exists, "key {} is not found", key); - break; - } - CursorResult::IO => pager.io.run_once().unwrap(), + let exists = run_until_done(|| cursor.exists(&key), pager.deref()).unwrap(); + assert!(exists, "key not found {}", key); + } + } + + fn run_until_done( + mut action: impl FnMut() -> Result>, + pager: &Pager, + ) -> Result { + loop { + match action()? { + CursorResult::Ok(res) => { + return Ok(res); } + CursorResult::IO => pager.io.run_once().unwrap(), } } }