feat: add test protocol
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user