]> Untitled Git - bdk/commitdiff
test(file_store): test `Store` persistence with `assert_persist_changesets`
authorcodingp110 <codingp110@gmail.com>
Sun, 18 Oct 2026 14:21:23 +0000 (01:21 +1100)
committer志宇 <hello@evanlinjin.me>
Sun, 18 Oct 2026 14:21:23 +0000 (01:21 +1100)
Co-Authored-By: 志宇 <hello@evanlinjin.me>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
crates/file_store/Cargo.toml
crates/file_store/src/store.rs

index 8fbdc358dee41a8c730b590731ce06e8aa865e0c..d4f568df8558c496059157ac7aa084ba3008f929 100644 (file)
@@ -21,3 +21,4 @@ serde = { version = "1", features = ["derive"] }
 
 [dev-dependencies]
 tempfile = "3"
+bdk_testenv = { path = "../testenv", features = ["serde"] } # `miniscript` is active by default.
index 858b9d2cdfd82e032a2d2892f72f22e7d82cb43e..31fb6066a5388b250325106b7d81174cc9ed4aa7 100644 (file)
@@ -295,6 +295,8 @@ mod test {
     const TEST_MAGIC_BYTES: [u8; TEST_MAGIC_BYTES_LEN] =
         [98, 100, 107, 102, 115, 49, 49, 49, 49, 49, 49, 49];
 
+    use bdk_testenv::persist_test_utils::*;
+
     type TestChangeSet = BTreeSet<String>;
 
     /// Check behavior of [`Store::create`] and [`Store::load`].
@@ -599,4 +601,33 @@ mod test {
         // current position matches EOF
         assert_eq!(current_pointer, expected_pointer);
     }
+
+    #[test]
+    fn changesets_are_persisted() {
+        #[track_caller]
+        fn assert_store_persists<C>(changesets: &[C])
+        where
+            C: Merge
+                + serde::Serialize
+                + serde::de::DeserializeOwned
+                + Debug
+                + PartialEq
+                + Default
+                + Clone
+                + 'static,
+        {
+            let temp_dir = tempfile::tempdir().unwrap();
+            let path = temp_dir.path().join("store.db");
+            assert_persist_changesets(
+                || Ok(Store::load_or_create(&TEST_MAGIC_BYTES, &path)?.0),
+                |db| Ok(db.dump().map(Option::unwrap_or_default)?),
+                |db, changeset| Ok(db.append(changeset)?),
+                changesets,
+            );
+        }
+
+        assert_store_persists(&tx_graph_changesets());
+        assert_store_persists(&keychain_txout_changesets());
+        assert_store_persists(&local_chain_changesets());
+    }
 }