Skip to content

Commit 5fb3a4a

Browse files
committed
fixup! tests: add tests for KeyRing and Wallet
1 parent ddcd8a6 commit 5fb3a4a

1 file changed

Lines changed: 96 additions & 1 deletion

File tree

tests/keyring.rs

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use std::collections::BTreeMap;
22

33
use bdk_wallet::descriptor::DescriptorError;
4-
use bdk_wallet::keyring::KeyRing;
54
use bdk_wallet::keyring::KeyRingError;
5+
use bdk_wallet::keyring::{ChangeSet, KeyRing};
66
use bdk_wallet::test_utils::get_test_wpkh_and_change_desc;
77
use bdk_wallet::KeychainKind;
88
use bitcoin::secp256k1::Secp256k1;
@@ -123,3 +123,98 @@ fn test_duplicate_keychain_and_desc() {
123123
let err = keyring.add_descriptor(1, desc).unwrap_err();
124124
assert_eq!(err, KeyRingError::KeychainAlreadyExists(1));
125125
}
126+
127+
#[cfg(feature = "rusqlite")]
128+
#[test]
129+
fn test_from_v2() -> anyhow::Result<()> {
130+
use bdk_chain::{
131+
rusqlite::{params, types::Null, Connection},
132+
Impl,
133+
};
134+
let mut conn = Connection::open_in_memory()?;
135+
136+
let desc_str = "tr(tprv8ZgxMBicQKsPdWAHbugK2tjtVtRjKGixYVZUdL7xLHMgXZS6BFbFi1UDb1CHT25Z5PU1F9j7wGxwUiRhqz9E3nZRztikGUV6HoRDYcqPhM4/86'/1'/0'/0/*)";
137+
138+
let change_desc_str = "tr(tprv8ZgxMBicQKsPdWAHbugK2tjtVtRjKGixYVZUdL7xLHMgXZS6BFbFi1UDb1CHT25Z5PU1F9j7wGxwUiRhqz9E3nZRztikGUV6HoRDYcqPhM4/86'/1'/0'/1/*)";
139+
140+
let descriptor = get_descriptor(desc_str);
141+
142+
let change_descriptor = get_descriptor(change_desc_str);
143+
144+
let network = Network::Regtest;
145+
146+
conn.execute(
147+
"CREATE TABLE bdk_wallet ( \
148+
id INTEGER PRIMARY KEY NOT NULL CHECK (id = 0), \
149+
descriptor TEXT, \
150+
change_descriptor TEXT, \
151+
network TEXT \
152+
) STRICT;",
153+
[],
154+
)?;
155+
156+
conn.execute(
157+
"INSERT INTO bdk_wallet (id, descriptor) VALUES(?1 , ?2) ON CONFLICT(id) DO UPDATE SET descriptor=?2",
158+
params![0, Impl(descriptor.clone())],
159+
)?;
160+
161+
conn.execute(
162+
"INSERT INTO bdk_wallet (id, change_descriptor) VALUES(?1 , ?2) ON CONFLICT(id) DO UPDATE SET change_descriptor=?2",
163+
params![0, Impl(change_descriptor.clone())],
164+
)?;
165+
166+
conn.execute(
167+
"INSERT INTO bdk_wallet (id, network) VALUES(?1 , ?2) ON CONFLICT(id) DO UPDATE SET network=?2",
168+
params![0, Impl(network)],
169+
)?;
170+
171+
let keyring_changeset =
172+
ChangeSet::from_v2(&mut conn, KeychainKind::External, KeychainKind::Internal)?;
173+
let keyring = KeyRing::from_changeset(keyring_changeset, None, [].into())?
174+
.expect("changeset should not be empty");
175+
let descriptors = keyring.list_keychains();
176+
assert_eq!(
177+
descriptors.get(&KeychainKind::External),
178+
Some(&descriptor),
179+
"External keychain must be loaded"
180+
);
181+
assert_eq!(
182+
descriptors.get(&KeychainKind::Internal),
183+
Some(&change_descriptor),
184+
"Internal keychain must be loaded"
185+
);
186+
assert_eq!(
187+
keyring.network(),
188+
Network::Regtest,
189+
"network must be loaded"
190+
);
191+
192+
conn.execute(
193+
"INSERT INTO bdk_wallet (id, change_descriptor) VALUES(?1 , ?2) ON CONFLICT(id) DO UPDATE SET change_descriptor=?2",
194+
params![0, &Null],
195+
)?;
196+
197+
let keyring_changeset =
198+
ChangeSet::from_v2(&mut conn, KeychainKind::External, KeychainKind::External)?;
199+
let keyring = KeyRing::from_changeset(keyring_changeset, None, [].into())?
200+
.expect("changeset should not be empty");
201+
202+
let descriptors = keyring.list_keychains();
203+
assert_eq!(
204+
descriptors.get(&KeychainKind::External),
205+
Some(&descriptor),
206+
"External keychain must be loaded"
207+
);
208+
assert_eq!(
209+
descriptors.get(&KeychainKind::Internal),
210+
None,
211+
"Internal keychain must not be loaded"
212+
);
213+
assert_eq!(
214+
keyring.network(),
215+
Network::Regtest,
216+
"network must be loaded "
217+
);
218+
219+
Ok(())
220+
}

0 commit comments

Comments
 (0)