From: codingp110 Date: Sun, 18 Oct 2026 14:21:23 +0000 (+1100) Subject: test(file_store): test `Store` persistence with `assert_persist_changesets` X-Git-Url: http://internal-gitweb-vhost/-script/src/example_cli/scripts/encode/FromScriptException.UnrecognizedScript.html?a=commitdiff_plain;h=c537631be11b731f6833c0523bd2c81699edd908;p=bdk test(file_store): test `Store` persistence with `assert_persist_changesets` Co-Authored-By: 志宇 Co-Authored-By: Claude Opus 5.5 --- diff --git a/crates/file_store/Cargo.toml b/crates/file_store/Cargo.toml index 8fbdc358..d4f568df 100644 --- a/crates/file_store/Cargo.toml +++ b/crates/file_store/Cargo.toml @@ -21,3 +21,4 @@ serde = { version = "1", features = ["derive"] } [dev-dependencies] tempfile = "3" +bdk_testenv = { path = "../testenv", features = ["serde"] } # `miniscript` is active by default. diff --git a/crates/file_store/src/store.rs b/crates/file_store/src/store.rs index 858b9d2c..31fb6066 100644 --- a/crates/file_store/src/store.rs +++ b/crates/file_store/src/store.rs @@ -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; /// 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(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()); + } }