@@ -23,11 +23,17 @@ impl RedbMessageStore {
2323
2424 {
2525 let read_txn = db. begin_read ( ) ?;
26- {
27- let table = read_txn. open_table ( SEQ_NUMBER_TABLE ) ?;
28- sender_seq_number = table. get ( SENDER_KEY ) ?. map_or ( 0 , |g| g. value ( ) ) ;
29- target_seq_number = table. get ( TARGET_KEY ) ?. map_or ( 0 , |g| g. value ( ) ) ;
30- }
26+ match read_txn. open_table ( SEQ_NUMBER_TABLE ) {
27+ Ok ( table) => {
28+ sender_seq_number = table. get ( SENDER_KEY ) ?. map_or ( 0 , |g| g. value ( ) ) ;
29+ target_seq_number = table. get ( TARGET_KEY ) ?. map_or ( 0 , |g| g. value ( ) ) ;
30+ }
31+ Err ( _) => {
32+ // Tables don't exist yet, initialise to 0
33+ sender_seq_number = 0 ;
34+ target_seq_number = 0 ;
35+ }
36+ } ;
3137 }
3238
3339 Ok ( Self {
@@ -128,7 +134,6 @@ mod tests {
128134 use tokio;
129135
130136 struct TestStore {
131- store : RedbMessageStore ,
132137 db_path : PathBuf ,
133138 }
134139
@@ -138,24 +143,11 @@ mod tests {
138143 temp_path. push ( format ! ( "redb_test_{}" , uuid:: Uuid :: new_v4( ) ) ) ;
139144 temp_path. set_extension ( "db" ) ;
140145
141- let store = RedbMessageStore :: new ( & temp_path) . expect ( "Failed to create store" ) ;
142-
143- Self {
144- store,
145- db_path : temp_path,
146- }
147- }
148-
149- fn store ( & self ) -> & RedbMessageStore {
150- & self . store
151- }
152-
153- fn store_mut ( & mut self ) -> & mut RedbMessageStore {
154- & mut self . store
146+ Self { db_path : temp_path }
155147 }
156148
157- fn db_path ( & self ) -> & PathBuf {
158- & self . db_path
149+ fn create_store ( & self ) -> RedbMessageStore {
150+ RedbMessageStore :: new ( & self . db_path ) . expect ( "Failed to create store" )
159151 }
160152 }
161153
@@ -169,16 +161,16 @@ mod tests {
169161 #[ tokio:: test]
170162 async fn test_new_store_initialization ( ) {
171163 let test_store = TestStore :: new ( ) ;
172- let store = test_store. store ( ) ;
164+ let store = test_store. create_store ( ) ;
173165
174166 assert_eq ! ( store. next_sender_seq_number( ) , 1 ) ;
175167 assert_eq ! ( store. next_target_seq_number( ) , 1 ) ;
176168 }
177169
178170 #[ tokio:: test]
179171 async fn test_add_and_get_messages ( ) {
180- let mut test_store = TestStore :: new ( ) ;
181- let store = test_store. store_mut ( ) ;
172+ let test_store = TestStore :: new ( ) ;
173+ let mut store = test_store. create_store ( ) ;
182174
183175 let message1 = b"test message 1" ;
184176 let message2 = b"test message 2" ;
@@ -206,8 +198,8 @@ mod tests {
206198
207199 #[ tokio:: test]
208200 async fn test_get_slice_partial_range ( ) {
209- let mut test_store = TestStore :: new ( ) ;
210- let store = test_store. store_mut ( ) ;
201+ let test_store = TestStore :: new ( ) ;
202+ let mut store = test_store. create_store ( ) ;
211203
212204 let message1 = b"message 1" ;
213205 let message2 = b"message 2" ;
@@ -240,16 +232,16 @@ mod tests {
240232 #[ tokio:: test]
241233 async fn test_get_slice_empty_range ( ) {
242234 let test_store = TestStore :: new ( ) ;
243- let store = test_store. store ( ) ;
235+ let store = test_store. create_store ( ) ;
244236
245237 let messages = store. get_slice ( 1 , 3 ) . await . expect ( "Failed to get messages" ) ;
246238 assert_eq ! ( messages. len( ) , 0 ) ;
247239 }
248240
249241 #[ tokio:: test]
250242 async fn test_increment_sender_seq_number ( ) {
251- let mut test_store = TestStore :: new ( ) ;
252- let store = test_store. store_mut ( ) ;
243+ let test_store = TestStore :: new ( ) ;
244+ let mut store = test_store. create_store ( ) ;
253245
254246 assert_eq ! ( store. next_sender_seq_number( ) , 1 ) ;
255247
@@ -268,8 +260,8 @@ mod tests {
268260
269261 #[ tokio:: test]
270262 async fn test_increment_target_seq_number ( ) {
271- let mut test_store = TestStore :: new ( ) ;
272- let store = test_store. store_mut ( ) ;
263+ let test_store = TestStore :: new ( ) ;
264+ let mut store = test_store. create_store ( ) ;
273265
274266 assert_eq ! ( store. next_target_seq_number( ) , 1 ) ;
275267
@@ -288,8 +280,8 @@ mod tests {
288280
289281 #[ tokio:: test]
290282 async fn test_set_target_seq_number ( ) {
291- let mut test_store = TestStore :: new ( ) ;
292- let store = test_store. store_mut ( ) ;
283+ let test_store = TestStore :: new ( ) ;
284+ let mut store = test_store. create_store ( ) ;
293285
294286 assert_eq ! ( store. next_target_seq_number( ) , 1 ) ;
295287
@@ -308,8 +300,8 @@ mod tests {
308300
309301 #[ tokio:: test]
310302 async fn test_reset_store ( ) {
311- let mut test_store = TestStore :: new ( ) ;
312- let store = test_store. store_mut ( ) ;
303+ let test_store = TestStore :: new ( ) ;
304+ let mut store = test_store. create_store ( ) ;
313305
314306 // Add some messages and increment sequence numbers
315307 store
@@ -350,11 +342,10 @@ mod tests {
350342 #[ tokio:: test]
351343 async fn test_persistence_across_store_instances ( ) {
352344 let test_store = TestStore :: new ( ) ;
353- let db_path = test_store. db_path ( ) . clone ( ) ;
354345
355346 // Create first store instance and add data
356347 {
357- let mut store1 = RedbMessageStore :: new ( & db_path ) . expect ( "Failed to create store1" ) ;
348+ let mut store1 = test_store . create_store ( ) ;
358349 store1
359350 . add ( 1 , b"persistent message" )
360351 . await
@@ -371,7 +362,7 @@ mod tests {
371362
372363 // Create second store instance and verify data persists
373364 {
374- let store2 = RedbMessageStore :: new ( & db_path ) . expect ( "Failed to create store2" ) ;
365+ let store2 = test_store . create_store ( ) ;
375366
376367 assert_eq ! ( store2. next_sender_seq_number( ) , 2 ) ;
377368 assert_eq ! ( store2. next_target_seq_number( ) , 6 ) ;
@@ -383,40 +374,12 @@ mod tests {
383374 assert_eq ! ( messages. len( ) , 1 ) ;
384375 assert_eq ! ( messages[ 0 ] , b"persistent message" ) ;
385376 }
386-
387- // TestStore will clean up the file when it goes out of scope
388- }
389-
390- #[ tokio:: test]
391- async fn test_add_messages_non_sequential ( ) {
392- let mut test_store = TestStore :: new ( ) ;
393- let store = test_store. store_mut ( ) ;
394-
395- // Add messages in non-sequential order
396- store
397- . add ( 5 , b"message 5" )
398- . await
399- . expect ( "Failed to add message 5" ) ;
400- store
401- . add ( 1 , b"message 1" )
402- . await
403- . expect ( "Failed to add message 1" ) ;
404- store
405- . add ( 3 , b"message 3" )
406- . await
407- . expect ( "Failed to add message 3" ) ;
408-
409- let messages = store. get_slice ( 1 , 5 ) . await . expect ( "Failed to get messages" ) ;
410- assert_eq ! ( messages. len( ) , 3 ) ;
411- assert_eq ! ( messages[ 0 ] , b"message 1" ) ;
412- assert_eq ! ( messages[ 1 ] , b"message 3" ) ;
413- assert_eq ! ( messages[ 2 ] , b"message 5" ) ;
414377 }
415378
416379 #[ tokio:: test]
417380 async fn test_get_slice_beyond_available_messages ( ) {
418- let mut test_store = TestStore :: new ( ) ;
419- let store = test_store. store_mut ( ) ;
381+ let test_store = TestStore :: new ( ) ;
382+ let mut store = test_store. create_store ( ) ;
420383
421384 store
422385 . add ( 1 , b"only message" )
@@ -433,8 +396,8 @@ mod tests {
433396
434397 #[ tokio:: test]
435398 async fn test_overwrite_existing_message ( ) {
436- let mut test_store = TestStore :: new ( ) ;
437- let store = test_store. store_mut ( ) ;
399+ let test_store = TestStore :: new ( ) ;
400+ let mut store = test_store. create_store ( ) ;
438401
439402 store
440403 . add ( 1 , b"original message" )
0 commit comments