@@ -560,8 +560,8 @@ impl BufferedWriteLayer {
560560#[ cfg( test) ]
561561mod tests {
562562 use super :: * ;
563- use arrow :: array :: { Int64Array , StringViewArray } ;
564- use arrow :: datatypes :: { DataType , Field , Schema } ;
563+ use crate :: test_utils :: test_helpers :: { json_to_batch , test_span } ;
564+ use serial_test :: serial ;
565565 use std:: path:: PathBuf ;
566566 use tempfile:: tempdir;
567567
@@ -571,14 +571,14 @@ mod tests {
571571 Arc :: new ( cfg)
572572 }
573573
574- fn create_test_batch ( ) -> RecordBatch {
575- let schema = Arc :: new ( Schema :: new ( vec ! [
576- Field :: new ( "id" , DataType :: Int64 , false ) ,
577- Field :: new ( "name ", DataType :: Utf8View , false ) ,
578- ] ) ) ;
579- let id_array = Int64Array :: from ( vec ! [ 1 , 2 , 3 ] ) ;
580- let name_array = StringViewArray :: from ( vec ! [ "a" , "b" , "c" ] ) ;
581- RecordBatch :: try_new ( schema , vec ! [ Arc :: new ( id_array ) , Arc :: new ( name_array ) ] ) . unwrap ( )
574+ fn create_test_batch ( project_id : & str ) -> RecordBatch {
575+ // Use test_span helper which creates data matching the default schema
576+ json_to_batch ( vec ! [
577+ test_span ( "test1 ", "span1" , project_id ) ,
578+ test_span ( "test2" , "span2" , project_id ) ,
579+ test_span ( "test3" , "span3" , project_id ) ,
580+ ] )
581+ . unwrap ( )
582582 }
583583
584584 #[ tokio:: test]
@@ -592,7 +592,7 @@ mod tests {
592592 let table = format ! ( "t{}" , test_id) ;
593593
594594 let layer = BufferedWriteLayer :: with_config ( cfg) . unwrap ( ) ;
595- let batch = create_test_batch ( ) ;
595+ let batch = create_test_batch ( & project ) ;
596596
597597 layer. insert ( & project, & table, vec ! [ batch. clone( ) ] ) . await . unwrap ( ) ;
598598
@@ -601,15 +601,16 @@ mod tests {
601601 assert_eq ! ( results[ 0 ] . num_rows( ) , 3 ) ;
602602 }
603603
604- // NOTE: This test is ignored because walrus-rust creates new files for each instance
605- // rather than discovering existing files from previous instances in the same directory.
606- // This is a limitation of the walrus library, not our code.
607- #[ ignore]
604+ #[ serial]
608605 #[ tokio:: test]
609606 async fn test_recovery ( ) {
610607 let dir = tempdir ( ) . unwrap ( ) ;
611608 let cfg = create_test_config ( dir. path ( ) . to_path_buf ( ) ) ;
612609
610+ // SAFETY: walrus-rust reads WALRUS_DATA_DIR from environment. We use #[serial]
611+ // to prevent concurrent access to this process-global state.
612+ unsafe { std:: env:: set_var ( "WALRUS_DATA_DIR" , & cfg. core . walrus_data_dir ) } ;
613+
613614 // Use unique but short project/table names (walrus has metadata size limit)
614615 let test_id = & uuid:: Uuid :: new_v4 ( ) . to_string ( ) [ ..4 ] ;
615616 let project = format ! ( "r{}" , test_id) ;
@@ -618,10 +619,9 @@ mod tests {
618619 // First instance - write data
619620 {
620621 let layer = BufferedWriteLayer :: with_config ( Arc :: clone ( & cfg) ) . unwrap ( ) ;
621- let batch = create_test_batch ( ) ;
622+ let batch = create_test_batch ( & project ) ;
622623 layer. insert ( & project, & table, vec ! [ batch] ) . await . unwrap ( ) ;
623- // Shutdown to ensure WAL is synced
624- layer. shutdown ( ) . await . unwrap ( ) ;
624+ // Layer drops here - WAL data should be persisted
625625 }
626626
627627 // Second instance - recover from WAL
@@ -648,7 +648,7 @@ mod tests {
648648 let layer = BufferedWriteLayer :: with_config ( cfg) . unwrap ( ) ;
649649
650650 // First insert should succeed
651- let batch = create_test_batch ( ) ;
651+ let batch = create_test_batch ( & project ) ;
652652 layer. insert ( & project, & table, vec ! [ batch] ) . await . unwrap ( ) ;
653653
654654 // Verify reservation is released (should be 0 after successful insert)
0 commit comments