@@ -891,7 +891,7 @@ mod test {
891891 } ;
892892
893893 use bdk_testenv:: persist_test_utils:: {
894- persist_indexer_changeset, persist_local_chain_changeset, persist_txgraph_changeset,
894+ persist_indexer_changeset, persist_local_chain_changeset, persist_txgraph_changeset, persist_last_seen
895895 } ;
896896 use std:: sync:: Arc ;
897897 use std:: { collections:: BTreeMap , path:: Path } ;
@@ -1098,74 +1098,7 @@ mod test {
10981098 } ] ,
10991099 }
11001100 }
1101-
1102- #[ test]
1103- fn test_persist_last_seen ( ) {
1104- let tmpfile = NamedTempFile :: new ( ) . unwrap ( ) ;
1105- let db = create_db ( tmpfile. path ( ) ) ;
1106- let store = create_test_store ( Arc :: new ( db) , "wallet1" ) ;
1107-
1108- let tx1 = Arc :: new ( create_one_inp_one_out_tx (
1109- Txid :: from_byte_array ( [ 0 ; 32 ] ) ,
1110- 30_000 ,
1111- ) ) ;
1112- let tx2 = Arc :: new ( create_one_inp_one_out_tx ( tx1. compute_txid ( ) , 20_000 ) ) ;
1113- let tx3 = Arc :: new ( create_one_inp_one_out_tx ( tx2. compute_txid ( ) , 19_000 ) ) ;
1114-
1115- // try persisting and reading last_seen
1116- let txs: BTreeSet < Arc < Transaction > > = [ tx1. clone ( ) , tx2. clone ( ) ] . into ( ) ;
1117- let mut last_seen: BTreeMap < Txid , u64 > =
1118- [ ( tx1. compute_txid ( ) , 100 ) , ( tx2. compute_txid ( ) , 120 ) ] . into ( ) ;
1119-
1120- let write_tx = store. db . begin_write ( ) . unwrap ( ) ;
1121- let _ = write_tx. open_table ( store. txs_table_defn ( ) ) . unwrap ( ) ;
1122- let _ = write_tx. open_table ( store. last_seen_defn ( ) ) . unwrap ( ) ;
1123- write_tx. commit ( ) . unwrap ( ) ;
1124-
1125- let write_tx = store. db . begin_write ( ) . unwrap ( ) ;
1126- store. persist_txs ( & write_tx, & txs) . unwrap ( ) ;
1127- write_tx. commit ( ) . unwrap ( ) ;
1128-
1129- // to hit the branch for the case when tx is persisted but not in changeset
1130- let txs: BTreeSet < Arc < Transaction > > = BTreeSet :: new ( ) ;
1131-
1132- let write_tx = store. db . begin_write ( ) . unwrap ( ) ;
1133- let read_tx = store. db . begin_read ( ) . unwrap ( ) ;
1134- store
1135- . persist_last_seen ( & write_tx, & read_tx, & last_seen, & txs)
1136- . unwrap ( ) ;
1137- write_tx. commit ( ) . unwrap ( ) ;
1138-
1139- let read_tx = store. db . begin_read ( ) . unwrap ( ) ;
1140- let mut last_seen_read: BTreeMap < Txid , u64 > = BTreeMap :: new ( ) ;
1141- store. read_last_seen ( & read_tx, & mut last_seen_read) . unwrap ( ) ;
1142- assert_eq ! ( last_seen_read, last_seen) ;
1143-
1144- // persist another last_seen and see if what is read is same as merged one
1145- let txs_new: BTreeSet < Arc < Transaction > > = [ tx3. clone ( ) ] . into ( ) ;
1146- let last_seen_new: BTreeMap < Txid , u64 > = [ ( tx3. compute_txid ( ) , 200 ) ] . into ( ) ;
1147-
1148- let write_tx = store. db . begin_write ( ) . unwrap ( ) ;
1149- let _ = write_tx. open_table ( store. txs_table_defn ( ) ) . unwrap ( ) ;
1150- let _ = write_tx. open_table ( store. last_seen_defn ( ) ) . unwrap ( ) ;
1151- write_tx. commit ( ) . unwrap ( ) ;
1152-
1153- let write_tx = store. db . begin_write ( ) . unwrap ( ) ;
1154- let read_tx = store. db . begin_read ( ) . unwrap ( ) ;
1155- store
1156- . persist_last_seen ( & write_tx, & read_tx, & last_seen_new, & txs_new)
1157- . unwrap ( ) ;
1158- write_tx. commit ( ) . unwrap ( ) ;
1159-
1160- let read_tx = store. db . begin_read ( ) . unwrap ( ) ;
1161- let mut last_seen_read_new: BTreeMap < Txid , u64 > = BTreeMap :: new ( ) ;
1162- store
1163- . read_last_seen ( & read_tx, & mut last_seen_read_new)
1164- . unwrap ( ) ;
1165- last_seen. merge ( last_seen_new) ;
1166- assert_eq ! ( last_seen_read_new, last_seen) ;
1167- }
1168-
1101+
11691102 #[ test]
11701103 fn test_last_seen_missing_txn ( ) {
11711104 // to hit the branch for the panic case in persist_last_seen
@@ -2095,4 +2028,25 @@ mod test {
20952028 Ok ( Store :: new ( Arc :: new ( db) , "wallet" . to_string ( ) ) ?)
20962029 } ) ;
20972030 }
2031+
2032+ #[ test]
2033+ fn last_seen_is_persisted ( ) {
2034+ persist_last_seen (
2035+ "wallet.redb" ,
2036+ |path| {
2037+ let db = redb:: Database :: create ( path) ?;
2038+ Ok ( Store :: new ( Arc :: new ( db) , "wallet" . to_string ( ) ) ?)
2039+ } ,
2040+ |db| {
2041+ db. create_tables :: < ConfirmationBlockTime > ( ) ?;
2042+ let mut changeset = tx_graph:: ChangeSet :: < ConfirmationBlockTime > :: default ( ) ;
2043+ db. read_tx_graph ( & mut changeset) ?;
2044+ Ok ( changeset)
2045+ } ,
2046+ |db, changeset| {
2047+ db. persist_tx_graph ( changeset) ?;
2048+ Ok ( ( ) )
2049+ } ,
2050+ ) ;
2051+ }
20982052}
0 commit comments