Skip to content

Commit a7b7afb

Browse files
committed
test: reject message (de)serialization
This adds tests for the previously untested reject message (de)serialization. The two reject messages were received from an older Bitcoin Core peer that still sends reject messages.
1 parent ed646aa commit a7b7afb

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

src/network/message_network.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,11 @@ impl_consensus_encoding!(Reject, message, ccode, reason, hash);
146146
#[cfg(test)]
147147
mod tests {
148148
use super::VersionMessage;
149+
use super::Reject;
150+
use super::RejectReason;
149151

150152
use hashes::hex::FromHex;
153+
use hashes::sha256d::Hash;
151154
use network::constants::ServiceFlags;
152155

153156
use consensus::encode::{deserialize, serialize};
@@ -171,4 +174,37 @@ mod tests {
171174

172175
assert_eq!(serialize(&real_decode), from_sat);
173176
}
177+
178+
#[test]
179+
fn reject_message_test() {
180+
let reject_tx_conflict = Vec::from_hex("027478121474786e2d6d656d706f6f6c2d636f6e666c69637405df54d3860b3c41806a3546ab48279300affacf4b88591b229141dcf2f47004").unwrap();
181+
let reject_tx_nonfinal = Vec::from_hex("02747840096e6f6e2d66696e616c259bbe6c83db8bbdfca7ca303b19413dc245d9f2371b344ede5f8b1339a5460b").unwrap();
182+
183+
let decode_result_conflict: Result<Reject, _> = deserialize(&reject_tx_conflict);
184+
let decode_result_nonfinal: Result<Reject, _> = deserialize(&reject_tx_nonfinal);
185+
186+
assert!(decode_result_conflict.is_ok());
187+
assert!(decode_result_nonfinal.is_ok());
188+
189+
let conflict = decode_result_conflict.unwrap();
190+
assert_eq!("tx", conflict.message);
191+
assert_eq!(RejectReason::Duplicate, conflict.ccode);
192+
assert_eq!("txn-mempool-conflict", conflict.reason);
193+
assert_eq!(
194+
Hash::from_hex("0470f4f2dc4191221b59884bcffaaf00932748ab46356a80413c0b86d354df05").unwrap(),
195+
conflict.hash
196+
);
197+
198+
let nonfinal = decode_result_nonfinal.unwrap();
199+
assert_eq!("tx", nonfinal.message);
200+
assert_eq!(RejectReason::NonStandard, nonfinal.ccode);
201+
assert_eq!("non-final", nonfinal.reason);
202+
assert_eq!(
203+
Hash::from_hex("0b46a539138b5fde4e341b37f2d945c23d41193b30caa7fcbd8bdb836cbe9b25").unwrap(),
204+
nonfinal.hash
205+
);
206+
207+
assert_eq!(serialize(&conflict), reject_tx_conflict);
208+
assert_eq!(serialize(&nonfinal), reject_tx_nonfinal);
209+
}
174210
}

0 commit comments

Comments
 (0)