Skip to content

Commit 1808969

Browse files
authored
Merge pull request #155 from nyonson/pr-154
2 parents d5239c7 + 9329bb2 commit 1808969

File tree

2 files changed

+39
-29
lines changed

2 files changed

+39
-29
lines changed

traffic/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ tokio = { version = "1", features = ["sync", "time", "rt", "macros"], optional =
1919

2020
[dev-dependencies]
2121
bitcoind = { package = "corepc-node", version = "0.7.1", default-features = false, features = ["26_0","download"] }
22-
bitcoin = { version = "0.32.4" }
22+
bitcoin = { git = "https://github.com/rust-bitcoin/rust-bitcoin", rev = "16cc257c3695dea0e7301a5fa9cab44b8ed60598" }
23+
p2p = { package = "bitcoin-p2p-messages", git = "https://github.com/rust-bitcoin/rust-bitcoin", rev = "16cc257c3695dea0e7301a5fa9cab44b8ed60598" }
2324
tokio = { version = "1", features = ["sync", "time", "rt", "macros", "net", "io-util"] }

traffic/tests/bitcoin_integration.rs

Lines changed: 37 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@ const PORT: u16 = 18444;
66

77
#[test]
88
fn sync_protocol_with_traffic_shaping() {
9+
use bip324::io::Payload;
10+
use bip324_traffic::{io::ShapedProtocol, DecoyStrategy, PaddingStrategy, TrafficConfig};
11+
use bitcoin::consensus::{deserialize, serialize};
12+
use p2p::{
13+
message::{NetworkMessage, V2NetworkMessage},
14+
message_network::{UserAgent, VersionMessage},
15+
Address, ProtocolVersion, ServiceFlags,
16+
};
917
use std::{
1018
net::{IpAddr, Ipv4Addr, SocketAddr, TcpStream},
1119
time::{SystemTime, UNIX_EPOCH},
1220
};
1321

14-
use bip324::{
15-
io::Payload,
16-
serde::{deserialize, serialize, NetworkMessage},
17-
};
18-
use bip324_traffic::{io::ShapedProtocol, DecoyStrategy, PaddingStrategy, TrafficConfig};
19-
use bitcoin::p2p::{message_network::VersionMessage, Address, ServiceFlags};
20-
2122
let bitcoind = regtest_process();
2223

2324
let stream = TcpStream::connect(bitcoind.params.p2p_socket.unwrap()).unwrap();
@@ -50,55 +51,58 @@ fn sync_protocol_with_traffic_shaping() {
5051
let ip = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), PORT);
5152
let from_and_recv = Address::new(&ip, ServiceFlags::NONE);
5253
let msg = VersionMessage {
53-
version: 70015,
54+
version: ProtocolVersion::INVALID_CB_NO_BAN_VERSION,
5455
services: ServiceFlags::NONE,
5556
timestamp: now as i64,
5657
receiver: from_and_recv.clone(),
5758
sender: from_and_recv,
5859
nonce: 1,
59-
user_agent: "BIP-324 Traffic Shaping Test".to_string(),
60+
user_agent: UserAgent::from_nonstandard("BIP-324 Traffic Shaping Test"),
6061
start_height: 0,
6162
relay: false,
6263
};
6364

6465
// Send version message
6566
let version_message = NetworkMessage::Version(msg);
67+
let v2_version_message = V2NetworkMessage::new(version_message);
6668
println!("Sending version message with traffic shaping");
6769
protocol
68-
.write(&Payload::genuine(serialize(version_message)))
70+
.write(&Payload::genuine(serialize(&v2_version_message)))
6971
.unwrap();
7072

7173
// Read version response
7274
println!("Reading version response");
7375
let response = protocol.read().unwrap();
74-
let response_message: NetworkMessage = deserialize(response.contents()).unwrap();
76+
let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap();
7577
assert_eq!(response_message.cmd(), "version");
7678

7779
// Send verack
7880
let verack_message = NetworkMessage::Verack;
81+
let v2_verack_message = V2NetworkMessage::new(verack_message);
7982
println!("Sending verack with traffic shaping");
8083
protocol
81-
.write(&Payload::genuine(serialize(verack_message)))
84+
.write(&Payload::genuine(serialize(&v2_verack_message)))
8285
.unwrap();
8386

8487
// Read verack response
8588
println!("Reading verack response");
8689
let response = protocol.read().unwrap();
87-
let response_message: NetworkMessage = deserialize(response.contents()).unwrap();
90+
let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap();
8891
assert_eq!(response_message.cmd(), "verack");
8992

9093
// Exchange a few ping/pong messages to verify the connection remains stable
9194
for i in 0..3 {
9295
let ping_message = NetworkMessage::Ping(i);
96+
let v2_ping_message = V2NetworkMessage::new(ping_message);
9397
println!("Sending ping {i} with traffic shaping");
9498
protocol
95-
.write(&Payload::genuine(serialize(ping_message)))
99+
.write(&Payload::genuine(serialize(&v2_ping_message)))
96100
.unwrap();
97101

98102
// Read until we get a pong (might get other messages)
99103
loop {
100104
let response = protocol.read().unwrap();
101-
let response_message: NetworkMessage = deserialize(response.contents()).unwrap();
105+
let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap();
102106
if response_message.cmd() == "pong" {
103107
println!("Received pong {i}");
104108
break;
@@ -122,12 +126,14 @@ async fn async_protocol_with_traffic_shaping() {
122126
time::{SystemTime, UNIX_EPOCH},
123127
};
124128

125-
use bip324::{
126-
io::Payload,
127-
serde::{deserialize, serialize, NetworkMessage},
128-
};
129+
use bip324::io::Payload;
129130
use bip324_traffic::{futures::ShapedProtocol, DecoyStrategy, PaddingStrategy, TrafficConfig};
130-
use bitcoin::p2p::{message_network::VersionMessage, Address, ServiceFlags};
131+
use bitcoin::consensus::{deserialize, serialize};
132+
use p2p::{
133+
message::{NetworkMessage, V2NetworkMessage},
134+
message_network::{UserAgent, VersionMessage},
135+
Address, ProtocolVersion, ServiceFlags,
136+
};
131137
use tokio::net::TcpStream;
132138

133139
let bitcoind = regtest_process();
@@ -165,58 +171,61 @@ async fn async_protocol_with_traffic_shaping() {
165171
let ip = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), PORT);
166172
let from_and_recv = Address::new(&ip, ServiceFlags::NONE);
167173
let msg = VersionMessage {
168-
version: 70015,
174+
version: ProtocolVersion::INVALID_CB_NO_BAN_VERSION,
169175
services: ServiceFlags::NONE,
170176
timestamp: now as i64,
171177
receiver: from_and_recv.clone(),
172178
sender: from_and_recv,
173179
nonce: 1,
174-
user_agent: "BIP-324 Async Traffic Shaping Test".to_string(),
180+
user_agent: UserAgent::from_nonstandard("BIP-324 Async Traffic Shaping Test"),
175181
start_height: 0,
176182
relay: false,
177183
};
178184

179185
// Send version message
180186
let version_message = NetworkMessage::Version(msg);
187+
let v2_version_message = V2NetworkMessage::new(version_message);
181188
println!("Sending version message with async traffic shaping");
182189
protocol
183-
.write(&Payload::genuine(serialize(version_message)))
190+
.write(&Payload::genuine(serialize(&v2_version_message)))
184191
.await
185192
.unwrap();
186193

187194
// Read version response
188195
println!("Reading version response");
189196
let response = protocol.read().await.unwrap();
190-
let response_message: NetworkMessage = deserialize(response.contents()).unwrap();
197+
let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap();
191198
assert_eq!(response_message.cmd(), "version");
192199

193200
// Send verack
194201
let verack_message = NetworkMessage::Verack;
202+
let v2_verack_message = V2NetworkMessage::new(verack_message);
195203
println!("Sending verack with async traffic shaping");
196204
protocol
197-
.write(&Payload::genuine(serialize(verack_message)))
205+
.write(&Payload::genuine(serialize(&v2_verack_message)))
198206
.await
199207
.unwrap();
200208

201209
// Read verack response
202210
println!("Reading verack response");
203211
let response = protocol.read().await.unwrap();
204-
let response_message: NetworkMessage = deserialize(response.contents()).unwrap();
212+
let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap();
205213
assert_eq!(response_message.cmd(), "verack");
206214

207215
// Exchange a few ping/pong messages to verify the connection remains stable
208216
for i in 0..3 {
209217
let ping_message = NetworkMessage::Ping(i);
218+
let v2_ping_message = V2NetworkMessage::new(ping_message);
210219
println!("Sending async ping {i} with traffic shaping");
211220
protocol
212-
.write(&Payload::genuine(serialize(ping_message)))
221+
.write(&Payload::genuine(serialize(&v2_ping_message)))
213222
.await
214223
.unwrap();
215224

216225
// Read until we get a pong (might get other messages)
217226
loop {
218227
let response = protocol.read().await.unwrap();
219-
let response_message: NetworkMessage = deserialize(response.contents()).unwrap();
228+
let response_message: V2NetworkMessage = deserialize(response.contents()).unwrap();
220229
if response_message.cmd() == "pong" {
221230
println!("Received async pong {i}");
222231
break;

0 commit comments

Comments
 (0)