]> Untitled Git - bdk/commitdiff
Add test for issue #801
authorAlekos Filini <alekos.filini@gmail.com>
Sat, 26 Nov 2022 14:11:09 +0000 (15:11 +0100)
committerAlekos Filini <alekos.filini@gmail.com>
Sat, 26 Nov 2022 14:11:09 +0000 (15:11 +0100)
src/database/sqlite.rs

index 68285605f477e9722ab8bb247b5b8c728722d81c..e837b6c4c2b052152da0511714b2884db740e035 100644 (file)
@@ -1099,4 +1099,44 @@ pub mod test {
     fn test_check_descriptor_checksum() {
         crate::database::test::test_check_descriptor_checksum(get_database());
     }
+
+    // Issue 801: https://github.com/bitcoindevkit/bdk/issues/801
+    #[test]
+    fn test_unique_spks() {
+        use crate::bitcoin::hashes::hex::FromHex;
+        use crate::database::*;
+
+        let mut db = get_database();
+
+        let script = Script::from(
+            Vec::<u8>::from_hex("76a91402306a7c23f3e8010de41e9e591348bb83f11daa88ac").unwrap(),
+        );
+        let path = 42;
+        let keychain = KeychainKind::External;
+
+        for _ in 0..100 {
+            db.set_script_pubkey(&script, keychain, path).unwrap();
+        }
+
+        let mut statement = db
+            .connection
+            .prepare_cached(
+                "select keychain,child,count(child) from script_pubkeys group by keychain,child;",
+            )
+            .unwrap();
+        let mut rows = statement.query([]).unwrap();
+        while let Some(row) = rows.next().unwrap() {
+            let keychain: String = row.get(0).unwrap();
+            let child: u32 = row.get(1).unwrap();
+            let count: usize = row.get(2).unwrap();
+
+            assert!(
+                count == 1,
+                "keychain={}, child={}, count={}",
+                keychain,
+                child,
+                count
+            );
+        }
+    }
 }