feat: add test protocol

This commit is contained in:
2026-07-20 20:31:07 +02:00
parent ad7da5f7ee
commit 428237f351
5 changed files with 1498 additions and 29 deletions
+73 -11
View File
@@ -101,19 +101,81 @@ mod tests {
use super::*;
#[test]
fn build_then_extract_round_trips() {
let cmd = 0x34;
let args = [0x01, 0x02, 0x03];
let frame = build_frame(cmd, &args);
fn test_checksum() {
let payload = [0x00, 0x01, 0x03, 0x10, 0x20, 0x30];
let decoded = extract_frame(&frame).unwrap();
assert_eq!(decoded.command, cmd);
assert_eq!(decoded.payload, vec![0x01, 0x02, 0x03]);
// 0x01 ^ 0x00 ^ 0x01 ^ 0x03 ^ 0x10 ^ 0x20 ^ 0x30
assert_eq!(checksum(&payload), 0x03);
}
#[test]
fn too_short_is_an_error() {
let err = extract_frame(&[0x10, 0x02, 0x01]).unwrap_err();
assert!(err.0.contains("too short"));
fn test_build_frame() {
let frame = build_frame(0x05, &[0xAA, 0xBB]);
let expected_without_checksum = vec![
0x10, 0x02, // header
0x00, 0x01, 0x03, // device + version + length
0x05, 0xAA, 0xBB, // command + args
0x10, 0x03, // footer
];
assert_eq!(&frame[..frame.len() - 1], expected_without_checksum);
let expected_checksum = checksum(&frame[2..frame.len() - 3]);
assert_eq!(frame[frame.len() - 1], expected_checksum);
}
}
#[test]
fn test_extract_frame_invalid_header() {
let mut frame = build_frame(0x01, &[]);
frame[0] = 0x11;
let result = extract_frame(&frame);
assert!(result.is_err());
}
#[test]
fn test_extract_frame_invalid_checksum() {
let mut frame = build_frame(0x01, &[]);
let last = frame.len() - 1;
frame[last] ^= 0xFF;
let result = extract_frame(&frame);
assert!(result.is_err());
}
#[test]
fn test_extract_frame_not_response() {
let mut frame = build_frame(0x01, &[]);
// data[2] == 0 means request frame according to your parser
frame[2] = 0x00;
let result = extract_frame(&frame);
assert!(result.is_err());
}
#[test]
fn test_extract_frame_invalid_device_id() {
let mut frame = build_frame(0x01, &[]);
frame[3] = 0xFF;
let result = extract_frame(&frame);
assert!(result.is_err());
}
#[test]
fn test_extract_frame_too_short() {
let data = vec![0x10, 0x02, 0x01];
let result = extract_frame(&data);
assert!(result.is_err());
}
}