Add tests of version encoder and decoder
What changed, and why it matters
This commit only adds new unit tests for encoding and decoding the block version number. It does not change any production code, so it cannot introduce or fix a security vulnerability on its own.
No security action needed; treat as routine test coverage improvement.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff adds three test cases in primitives/src/block.rs exercising Version::encoder(), VersionDecoder::new()/default(), push_bytes(), end(), read_limit(), and current_chunk(). No implementation code is modified. There is no security-relevant change.
Changed components
primitives/src/block.rs (tests only)Inspect captured patch +39 / −0
diff --git a/primitives/src/block.rs b/primitives/src/block.rs
index a2d46ce1..9eda5364 100644
--- a/primitives/src/block.rs
+++ b/primitives/src/block.rs
@@ -934,6 +934,8 @@ mod tests {
#[cfg(all(feature = "alloc", feature = "hex"))]
use core::str::FromStr as _;
+ use encoding::{Decoder, Encoder};
+
use super::*;
fn dummy_header() -> Header {
@@ -1498,4 +1500,41 @@ mod tests {
assert_eq!(block.check_witness_commitment(), (false, None));
assert!(matches!(block.validate(), Err(InvalidBlockError::InvalidWitnessCommitment)));
}
+
+ #[test]
+ fn version_encoder_emits_consensus_bytes() {
+ let version = Version::from_consensus(123_456_789);
+ let mut encoder = version.encoder();
+
+ assert_eq!(encoder.current_chunk(), &version.to_consensus().to_le_bytes());
+ assert!(!encoder.advance());
+ }
+
+ #[test]
+ fn version_decoder_end_and_read_limit() {
+ let mut decoder = VersionDecoder::new();
+ let bytes_arr = Version::TWO.to_consensus().to_le_bytes();
+ let mut bytes = bytes_arr.as_slice();
+
+ assert!(decoder.read_limit() > 0);
+
+ let needs_more = decoder.push_bytes(&mut bytes).unwrap();
+ assert!(!needs_more);
+ assert!(bytes.is_empty());
+
+ assert_eq!(decoder.read_limit(), 0);
+ let decoded = decoder.end().unwrap();
+ assert_eq!(decoded, Version::TWO);
+ }
+
+ #[test]
+ fn version_decoder_default_roundtrip() {
+ let version = Version::from_consensus(123_456_789);
+ let mut decoder = VersionDecoder::default();
+ let consensus = version.to_consensus().to_le_bytes();
+ let mut bytes = consensus.as_slice();
+ decoder.push_bytes(&mut bytes).unwrap();
+
+ assert_eq!(decoder.end().unwrap(), version);
+ }
}
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.