Skip to content

Commit dbe6a74

Browse files
committed
Merge #194: Implement addnode method and test
91d2ac1 Implement addnode method and test (GideonBature) Pull request description: Going by the conversations with tcharding for PR [#116 ](#116) on implementing one method at a time for easier review: This is first method under network section, addnode which is a specific type that returns a (json null). Once this is approved, I’ll proceed with the next one. ACKs for top commit: tcharding: ACK 91d2ac1 Tree-SHA512: 05e4f71e335a514336a96f91a06aa51049fea46780568a3e63aae4927996bacecf66cca08ffba062dd7bdb96ac360d5c40702e48843fe8a04660bcc139bc2f69
2 parents 14370df + 91d2ac1 commit dbe6a74

File tree

15 files changed

+94
-13
lines changed

15 files changed

+94
-13
lines changed

client/src/client_sync/v17/mod.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ crate::impl_client_v17__prioritisetransaction!();
7171
crate::impl_client_v17__submitblock!();
7272

7373
// == Network ==
74+
crate::impl_client_v17__addnode!();
7475
crate::impl_client_v17__getaddednodeinfo!();
7576
crate::impl_client_v17__getnettotals!();
7677
crate::impl_client_v17__getnetworkinfo!();
@@ -214,3 +215,12 @@ pub struct WalletCreateFundedPsbtInput {
214215
txid: Txid,
215216
vout: u32,
216217
}
218+
219+
/// Args for the `addnode` method
220+
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
221+
#[serde(rename_all = "lowercase")]
222+
pub enum AddNodeCommand {
223+
Add,
224+
Remove,
225+
OneTry,
226+
}

client/src/client_sync/v17/network.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,22 @@
99
//!
1010
//! See, or use the `define_jsonrpc_minreq_client!` macro to define a `Client`.
1111
12+
/// Implements Bitcoin Core JSON-RPC API method `addnode`
13+
#[macro_export]
14+
macro_rules! impl_client_v17__addnode {
15+
() => {
16+
impl Client {
17+
pub fn add_node(&self, node: &str, command: AddNodeCommand) -> Result<()> {
18+
match self.call("addnode", &[into_json(node)?, into_json(command)?]) {
19+
Ok(serde_json::Value::Null) => Ok(()),
20+
Ok(res) => Err(Error::Returned(res.to_string())),
21+
Err(err) => Err(err.into()),
22+
}
23+
}
24+
}
25+
};
26+
}
27+
1228
/// Implements Bitcoin Core JSON-RPC API method `getaddednodeinfo`
1329
#[macro_export]
1430
macro_rules! impl_client_v17__getaddednodeinfo {

client/src/client_sync/v18/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ use crate::types::v18::*;
1919

2020
#[rustfmt::skip] // Keep public re-exports separate.
2121
pub use crate::client_sync::{
22-
v17::{AddressType, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
22+
v17::{
23+
AddNodeCommand, AddressType, Input, Output, TemplateRequest, TemplateRules,
24+
WalletCreateFundedPsbtInput
25+
},
2326
};
2427

2528
// This publicly re-exports `Client`.
@@ -72,6 +75,7 @@ crate::impl_client_v17__prioritisetransaction!();
7275
crate::impl_client_v17__submitblock!();
7376

7477
// == Network ==
78+
crate::impl_client_v17__addnode!();
7579
crate::impl_client_v17__getaddednodeinfo!();
7680
crate::impl_client_v17__getnettotals!();
7781
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v19/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ use crate::types::v19::*;
1818

1919
#[rustfmt::skip] // Keep public re-exports separate.
2020
pub use crate::client_sync::{
21-
v17::{AddressType, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
21+
v17::{
22+
AddNodeCommand, AddressType, Input, Output, TemplateRequest, TemplateRules,
23+
WalletCreateFundedPsbtInput
24+
},
2225
};
2326

2427
crate::define_jsonrpc_minreq_client!("v19");
@@ -70,6 +73,7 @@ crate::impl_client_v17__prioritisetransaction!();
7073
crate::impl_client_v17__submitblock!();
7174

7275
// == Network ==
76+
crate::impl_client_v17__addnode!();
7377
crate::impl_client_v17__getaddednodeinfo!();
7478
crate::impl_client_v17__getnettotals!();
7579
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v20.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::types::v20::*;
1515

1616
#[rustfmt::skip] // Keep public re-exports separate.
1717
pub use crate::client_sync::{
18-
v17::{AddressType, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
18+
v17::{AddressType, AddNodeCommand, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
1919
};
2020

2121
crate::define_jsonrpc_minreq_client!("v20");
@@ -67,6 +67,7 @@ crate::impl_client_v17__prioritisetransaction!();
6767
crate::impl_client_v17__submitblock!();
6868

6969
// == Network ==
70+
crate::impl_client_v17__addnode!();
7071
crate::impl_client_v17__getaddednodeinfo!();
7172
crate::impl_client_v17__getnettotals!();
7273
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v21/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ use crate::types::v21::*;
1717

1818
#[rustfmt::skip] // Keep public re-exports separate.
1919
pub use crate::client_sync::{
20-
v17::{AddressType, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
20+
v17::{
21+
AddNodeCommand, AddressType, Input, Output, TemplateRequest, TemplateRules,
22+
WalletCreateFundedPsbtInput
23+
},
2124
};
2225

2326
crate::define_jsonrpc_minreq_client!("v21");
@@ -69,6 +72,7 @@ crate::impl_client_v17__prioritisetransaction!();
6972
crate::impl_client_v17__submitblock!();
7073

7174
// == Network ==
75+
crate::impl_client_v17__addnode!();
7276
crate::impl_client_v17__getaddednodeinfo!();
7377
crate::impl_client_v17__getnettotals!();
7478
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v22/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ use crate::types::v22::*;
1717

1818
#[rustfmt::skip] // Keep public re-exports separate.
1919
pub use crate::client_sync::{
20-
v17::{AddressType, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
20+
v17::{
21+
AddNodeCommand, AddressType, Input, Output, TemplateRequest, TemplateRules,
22+
WalletCreateFundedPsbtInput
23+
},
2124
};
2225

2326
crate::define_jsonrpc_minreq_client!("v22");
@@ -69,6 +72,7 @@ crate::impl_client_v17__prioritisetransaction!();
6972
crate::impl_client_v17__submitblock!();
7073

7174
// == Network ==
75+
crate::impl_client_v17__addnode!();
7276
crate::impl_client_v17__getaddednodeinfo!();
7377
crate::impl_client_v17__getnettotals!();
7478
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v23/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use crate::types::v23::*;
1919

2020
#[rustfmt::skip] // Keep public re-exports separate.
2121
pub use crate::client_sync::{
22-
v17::{Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
22+
v17::{AddNodeCommand, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
2323
};
2424

2525
crate::define_jsonrpc_minreq_client!("v23");
@@ -71,6 +71,7 @@ crate::impl_client_v17__prioritisetransaction!();
7171
crate::impl_client_v17__submitblock!();
7272

7373
// == Network ==
74+
crate::impl_client_v17__addnode!();
7475
crate::impl_client_v17__getaddednodeinfo!();
7576
crate::impl_client_v17__getnettotals!();
7677
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v24.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::types::v24::*;
1515

1616
#[rustfmt::skip] // Keep public re-exports separate.
1717
pub use crate::client_sync::{
18-
v17::{Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
18+
v17::{AddNodeCommand, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
1919
v23::AddressType,
2020
};
2121

@@ -68,6 +68,7 @@ crate::impl_client_v17__prioritisetransaction!();
6868
crate::impl_client_v17__submitblock!();
6969

7070
// == Network ==
71+
crate::impl_client_v17__addnode!();
7172
crate::impl_client_v17__getaddednodeinfo!();
7273
crate::impl_client_v17__getnettotals!();
7374
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v25.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::types::v25::*;
1515

1616
#[rustfmt::skip] // Keep public re-exports separate.
1717
pub use crate::client_sync::{
18-
v17::{Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
18+
v17::{AddNodeCommand, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
1919
v23::AddressType,
2020
};
2121

@@ -68,6 +68,7 @@ crate::impl_client_v17__prioritisetransaction!();
6868
crate::impl_client_v17__submitblock!();
6969

7070
// == Network ==
71+
crate::impl_client_v17__addnode!();
7172
crate::impl_client_v17__getaddednodeinfo!();
7273
crate::impl_client_v17__getnettotals!();
7374
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v26/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use crate::types::v26::*;
1919

2020
#[rustfmt::skip] // Keep public re-exports separate.
2121
pub use crate::client_sync::{
22-
v17::{Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
22+
v17::{AddNodeCommand, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
2323
v23::AddressType,
2424
};
2525

@@ -73,6 +73,7 @@ crate::impl_client_v17__prioritisetransaction!();
7373
crate::impl_client_v17__submitblock!();
7474

7575
// == Network ==
76+
crate::impl_client_v17__addnode!();
7677
crate::impl_client_v17__getaddednodeinfo!();
7778
crate::impl_client_v17__getnettotals!();
7879
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v27.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use crate::types::v27::*;
1515

1616
#[rustfmt::skip] // Keep public re-exports separate.
1717
pub use crate::client_sync::{
18-
v17::{Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
18+
v17::{AddNodeCommand, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
1919
v23::AddressType,
2020
};
2121

@@ -69,6 +69,7 @@ crate::impl_client_v17__prioritisetransaction!();
6969
crate::impl_client_v17__submitblock!();
7070

7171
// == Network ==
72+
crate::impl_client_v17__addnode!();
7273
crate::impl_client_v17__getaddednodeinfo!();
7374
crate::impl_client_v17__getnettotals!();
7475
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v28/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::types::v28::*;
1717

1818
#[rustfmt::skip] // Keep public re-exports separate.
1919
pub use crate::client_sync::{
20-
v17::{Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
20+
v17::{AddNodeCommand, Input, Output, TemplateRequest, TemplateRules, WalletCreateFundedPsbtInput},
2121
v23::AddressType,
2222
};
2323

@@ -71,6 +71,7 @@ crate::impl_client_v17__prioritisetransaction!();
7171
crate::impl_client_v17__submitblock!();
7272

7373
// == Network ==
74+
crate::impl_client_v17__addnode!();
7475
crate::impl_client_v17__getaddednodeinfo!();
7576
crate::impl_client_v17__getnettotals!();
7677
crate::impl_client_v17__getnetworkinfo!();

client/src/client_sync/v29/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use crate::types::v29::*;
1919

2020
#[rustfmt::skip] // Keep public re-exports separate.
2121
pub use crate::client_sync::{
22-
v17::{Input, Output, WalletCreateFundedPsbtInput},
22+
v17::{AddNodeCommand, Input, Output, WalletCreateFundedPsbtInput},
2323
v23::AddressType,
2424
};
2525

@@ -74,6 +74,7 @@ crate::impl_client_v17__prioritisetransaction!();
7474
crate::impl_client_v17__submitblock!();
7575

7676
// == Network ==
77+
crate::impl_client_v17__addnode!();
7778
crate::impl_client_v17__getaddednodeinfo!();
7879
crate::impl_client_v17__getnettotals!();
7980
crate::impl_client_v17__getnetworkinfo!();

integration_test/tests/network.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,38 @@
66

77
use integration_test::{Node, NodeExt as _, Wallet};
88
use node::vtype::*; // All the version specific types.
9-
use node::mtype;
9+
use node::{AddNodeCommand, mtype};
10+
11+
#[test]
12+
fn network__add_node() {
13+
let dummy_peer = "192.0.2.1:8333";
14+
15+
#[cfg(not(any(
16+
feature = "v26",
17+
feature = "v27",
18+
feature = "v28",
19+
feature = "v29",
20+
)))]
21+
{
22+
let node = Node::with_wallet(Wallet::None, &[]);
23+
node.client.add_node(dummy_peer, AddNodeCommand::OneTry).expect("addnode onetry");
24+
node.client.add_node(dummy_peer, AddNodeCommand::Add).expect("addnode add");
25+
node.client.add_node(dummy_peer, AddNodeCommand::Remove).expect("addnode remove");
26+
}
27+
28+
#[cfg(any(
29+
feature = "v26",
30+
feature = "v27",
31+
feature = "v28",
32+
feature = "v29",
33+
))]
34+
{
35+
let node = Node::with_wallet(Wallet::None, &["-v2transport"]);
36+
node.client.add_node(dummy_peer, AddNodeCommand::OneTry).expect("addnode onetry");
37+
node.client.add_node(dummy_peer, AddNodeCommand::Add).expect("addnode add");
38+
node.client.add_node(dummy_peer, AddNodeCommand::Remove).expect("addnode remove");
39+
}
40+
}
1041

1142
#[test]
1243
fn network__get_added_node_info() {

0 commit comments

Comments
 (0)