Skip to content

Commit 0dfd62f

Browse files
committed
Add ChainSource support to tests
1 parent 9e10fa4 commit 0dfd62f

File tree

2 files changed

+100
-24
lines changed

2 files changed

+100
-24
lines changed

tests/common/mod.rs

Lines changed: 63 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ use rand::{thread_rng, Rng};
3636

3737
use std::env;
3838
use std::path::PathBuf;
39+
use std::str::FromStr;
3940
use std::sync::{Arc, RwLock};
4041
use std::time::Duration;
4142

@@ -241,6 +242,12 @@ type TestNode = Arc<Node>;
241242
#[cfg(not(feature = "uniffi"))]
242243
type TestNode = Node;
243244

245+
#[derive(Clone)]
246+
pub(crate) enum TestChainSource<'a> {
247+
Esplora(&'a ElectrsD),
248+
BitcoinRpc(&'a BitcoinD),
249+
}
250+
244251
macro_rules! setup_builder {
245252
($builder: ident, $config: expr) => {
246253
#[cfg(feature = "uniffi")]
@@ -253,11 +260,12 @@ macro_rules! setup_builder {
253260
pub(crate) use setup_builder;
254261

255262
pub(crate) fn setup_two_nodes(
256-
electrsd: &ElectrsD, allow_0conf: bool, anchor_channels: bool, anchors_trusted_no_reserve: bool,
263+
chain_source: &TestChainSource, allow_0conf: bool, anchor_channels: bool,
264+
anchors_trusted_no_reserve: bool,
257265
) -> (TestNode, TestNode) {
258266
println!("== Node A ==");
259267
let config_a = random_config(anchor_channels);
260-
let node_a = setup_node(electrsd, config_a);
268+
let node_a = setup_node(chain_source, config_a);
261269

262270
println!("\n== Node B ==");
263271
let mut config_b = random_config(anchor_channels);
@@ -272,17 +280,29 @@ pub(crate) fn setup_two_nodes(
272280
.trusted_peers_no_reserve
273281
.push(node_a.node_id());
274282
}
275-
let node_b = setup_node(electrsd, config_b);
283+
let node_b = setup_node(chain_source, config_b);
276284
(node_a, node_b)
277285
}
278286

279-
pub(crate) fn setup_node(electrsd: &ElectrsD, config: Config) -> TestNode {
280-
let esplora_url = format!("http://{}", electrsd.esplora_url.as_ref().unwrap());
281-
let mut sync_config = EsploraSyncConfig::default();
282-
sync_config.onchain_wallet_sync_interval_secs = 100000;
283-
sync_config.lightning_wallet_sync_interval_secs = 100000;
287+
pub(crate) fn setup_node(chain_source: &TestChainSource, config: Config) -> TestNode {
284288
setup_builder!(builder, config);
285-
builder.set_chain_source_esplora(esplora_url.clone(), Some(sync_config));
289+
match chain_source {
290+
TestChainSource::Esplora(electrsd) => {
291+
let esplora_url = format!("http://{}", electrsd.esplora_url.as_ref().unwrap());
292+
let mut sync_config = EsploraSyncConfig::default();
293+
sync_config.onchain_wallet_sync_interval_secs = 100000;
294+
sync_config.lightning_wallet_sync_interval_secs = 100000;
295+
builder.set_chain_source_esplora(esplora_url.clone(), Some(sync_config));
296+
},
297+
TestChainSource::BitcoinRpc(bitcoind) => {
298+
let rpc_host = bitcoind.params.rpc_socket.ip().to_string();
299+
let rpc_port = bitcoind.params.rpc_socket.port();
300+
let values = bitcoind.params.get_cookie_values().unwrap().unwrap();
301+
let rpc_user = values.user;
302+
let rpc_password = values.password;
303+
builder.set_chain_source_bitcoind_rpc(rpc_host, rpc_port, rpc_user, rpc_password);
304+
},
305+
}
286306
let test_sync_store = Arc::new(TestSyncStore::new(config.storage_dir_path.into()));
287307
let node = builder.build_with_store(test_sync_store).unwrap();
288308
node.start().unwrap();
@@ -382,6 +402,40 @@ where
382402
}
383403
}
384404

405+
// Premine dummy blocks to populate estimatesmartfee
406+
pub(crate) fn premine_dummy_blocks<E: ElectrumApi>(bitcoind: &BitcoindClient, electrs: &E) {
407+
let _ = bitcoind.create_wallet("ldk_node_test", None, None, None, None);
408+
let _ = bitcoind.load_wallet("ldk_node_test");
409+
let mut rng = thread_rng();
410+
411+
generate_blocks_and_wait(bitcoind, electrs, 101);
412+
413+
let amount = Amount::from_sat(100000);
414+
for i in 0..5 {
415+
println!("Pre-mining block {}", i);
416+
let num_txs = rng.gen_range(10..42);
417+
let mut last_txid = None;
418+
for _ in 10..num_txs {
419+
let dummy_address: Address =
420+
Address::from_str("bcrt1qh3mvjaldwxynmmwsmx4az4vdg5yj7sjzjpdga5")
421+
.unwrap()
422+
.require_network(Network::Regtest)
423+
.unwrap();
424+
let txid = bitcoind
425+
.send_to_address(&dummy_address, amount, None, None, None, None, Some(1), None)
426+
.unwrap();
427+
println!("Created dummy transaction {}", txid);
428+
last_txid = Some(txid);
429+
}
430+
if let Some(last_txid) = last_txid {
431+
wait_for_tx(electrs, last_txid);
432+
}
433+
generate_blocks_and_wait(bitcoind, electrs, 1);
434+
}
435+
436+
generate_blocks_and_wait(bitcoind, electrs, 1);
437+
}
438+
385439
pub(crate) fn premine_and_distribute_funds<E: ElectrumApi>(
386440
bitcoind: &BitcoindClient, electrs: &E, addrs: Vec<Address>, amount: Amount,
387441
) {

tests/integration_tests_rust.rs

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ mod common;
1010
use common::{
1111
do_channel_full_cycle, expect_channel_ready_event, expect_event, expect_payment_received_event,
1212
expect_payment_successful_event, generate_blocks_and_wait, open_channel,
13-
premine_and_distribute_funds, random_config, setup_bitcoind_and_electrsd, setup_builder,
14-
setup_node, setup_two_nodes, wait_for_tx, TestSyncStore,
13+
premine_and_distribute_funds, premine_dummy_blocks, random_config, setup_bitcoind_and_electrsd,
14+
setup_builder, setup_node, setup_two_nodes, wait_for_tx, TestChainSource, TestSyncStore,
1515
};
1616

1717
use ldk_node::config::EsploraSyncConfig;
@@ -28,42 +28,57 @@ use std::sync::Arc;
2828
#[test]
2929
fn channel_full_cycle() {
3030
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
31-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
31+
let chain_source = TestChainSource::Esplora(&electrsd);
32+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
33+
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
34+
}
35+
36+
#[test]
37+
fn channel_full_cycle_bitcoind() {
38+
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
39+
premine_dummy_blocks(&bitcoind.client, &electrsd.client);
40+
let chain_source = TestChainSource::BitcoinRpc(&bitcoind);
41+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
3242
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, false);
3343
}
3444

3545
#[test]
3646
fn channel_full_cycle_force_close() {
3747
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
38-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
48+
let chain_source = TestChainSource::Esplora(&electrsd);
49+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
3950
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, true);
4051
}
4152

4253
#[test]
4354
fn channel_full_cycle_force_close_trusted_no_reserve() {
4455
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
45-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, true);
56+
let chain_source = TestChainSource::Esplora(&electrsd);
57+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, true);
4658
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, true, true);
4759
}
4860

4961
#[test]
5062
fn channel_full_cycle_0conf() {
5163
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
52-
let (node_a, node_b) = setup_two_nodes(&electrsd, true, true, false);
64+
let chain_source = TestChainSource::Esplora(&electrsd);
65+
let (node_a, node_b) = setup_two_nodes(&chain_source, true, true, false);
5366
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, true, true, false)
5467
}
5568

5669
#[test]
5770
fn channel_full_cycle_legacy_staticremotekey() {
5871
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
59-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, false, false);
72+
let chain_source = TestChainSource::Esplora(&electrsd);
73+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, false, false);
6074
do_channel_full_cycle(node_a, node_b, &bitcoind.client, &electrsd.client, false, false, false);
6175
}
6276

6377
#[test]
6478
fn channel_open_fails_when_funds_insufficient() {
6579
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
66-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
80+
let chain_source = TestChainSource::Esplora(&electrsd);
81+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
6782

6883
let addr_a = node_a.onchain_payment().new_address().unwrap();
6984
let addr_b = node_b.onchain_payment().new_address().unwrap();
@@ -266,7 +281,8 @@ fn start_stop_reinit() {
266281
#[test]
267282
fn onchain_spend_receive() {
268283
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
269-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
284+
let chain_source = TestChainSource::Esplora(&electrsd);
285+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
270286

271287
let addr_a = node_a.onchain_payment().new_address().unwrap();
272288
let addr_b = node_b.onchain_payment().new_address().unwrap();
@@ -315,7 +331,8 @@ fn onchain_spend_receive() {
315331
fn sign_verify_msg() {
316332
let (_bitcoind, electrsd) = setup_bitcoind_and_electrsd();
317333
let config = random_config(true);
318-
let node = setup_node(&electrsd, config);
334+
let chain_source = TestChainSource::Esplora(&electrsd);
335+
let node = setup_node(&chain_source, config);
319336

320337
// Tests arbitrary message signing and later verification
321338
let msg = "OK computer".as_bytes();
@@ -332,7 +349,8 @@ fn connection_restart_behavior() {
332349

333350
fn do_connection_restart_behavior(persist: bool) {
334351
let (_bitcoind, electrsd) = setup_bitcoind_and_electrsd();
335-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, false, false);
352+
let chain_source = TestChainSource::Esplora(&electrsd);
353+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, false, false);
336354

337355
let node_id_a = node_a.node_id();
338356
let node_id_b = node_b.node_id();
@@ -383,7 +401,8 @@ fn do_connection_restart_behavior(persist: bool) {
383401
#[test]
384402
fn concurrent_connections_succeed() {
385403
let (_bitcoind, electrsd) = setup_bitcoind_and_electrsd();
386-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
404+
let chain_source = TestChainSource::Esplora(&electrsd);
405+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
387406

388407
let node_a = Arc::new(node_a);
389408
let node_b = Arc::new(node_b);
@@ -413,7 +432,8 @@ fn concurrent_connections_succeed() {
413432
#[test]
414433
fn simple_bolt12_send_receive() {
415434
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
416-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
435+
let chain_source = TestChainSource::Esplora(&electrsd);
436+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
417437

418438
let address_a = node_a.onchain_payment().new_address().unwrap();
419439
let premine_amount_sat = 5_000_000;
@@ -620,7 +640,8 @@ fn simple_bolt12_send_receive() {
620640
#[test]
621641
fn generate_bip21_uri() {
622642
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
623-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
643+
let chain_source = TestChainSource::Esplora(&electrsd);
644+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
624645

625646
let address_a = node_a.onchain_payment().new_address().unwrap();
626647
let premined_sats = 5_000_000;
@@ -661,7 +682,8 @@ fn generate_bip21_uri() {
661682
#[test]
662683
fn unified_qr_send_receive() {
663684
let (bitcoind, electrsd) = setup_bitcoind_and_electrsd();
664-
let (node_a, node_b) = setup_two_nodes(&electrsd, false, true, false);
685+
let chain_source = TestChainSource::Esplora(&electrsd);
686+
let (node_a, node_b) = setup_two_nodes(&chain_source, false, true, false);
665687

666688
let address_a = node_a.onchain_payment().new_address().unwrap();
667689
let premined_sats = 5_000_000;

0 commit comments

Comments
 (0)