diff --git a/rust/src/mqtt/parser.rs b/rust/src/mqtt/parser.rs index fdab86f3a8..86ad3d83b9 100644 --- a/rust/src/mqtt/parser.rs +++ b/rust/src/mqtt/parser.rs @@ -659,12 +659,9 @@ pub fn parse_message(input: &[u8], protocol_version: u8, max_msg_size: usize) -> #[cfg(test)] mod tests { - use super::*; - #[test] - fn test_mqtt_parse_variable_integer() { - let buf0: &[u8] = &[0xFF, 0xFF, 0xFF, 0xFF]; + fn test_mqtt_parse_variable_fail(buf0: &[u8]) { let r0 = parse_mqtt_variable_integer(buf0); match r0 { Ok((_, _)) => { @@ -678,4 +675,36 @@ mod tests { } } } + + fn test_mqtt_parse_variable_check(buf0: &[u8], expected: u32) { + let r0 = parse_mqtt_variable_integer(buf0); + match r0 { + Ok((_, val)) => { + assert_eq!(val, expected); + } + Err(_) => { + panic!("Result should have been ok."); + } + } + } + + #[test] + fn test_mqtt_parse_variable_integer_largest_input() { + test_mqtt_parse_variable_fail(&[0xFF, 0xFF, 0xFF, 0xFF]); + } + + #[test] + fn test_mqtt_parse_variable_integer_boundary() { + test_mqtt_parse_variable_fail(&[0xFF, 0xFF, 0xFF, 0x80]); + } + + #[test] + fn test_mqtt_parse_variable_integer_largest_valid() { + test_mqtt_parse_variable_check(&[0xFF, 0xFF, 0xFF, 0x7F], 268435455); + } + + #[test] + fn test_mqtt_parse_variable_integer_smallest_valid() { + test_mqtt_parse_variable_check(&[0x0], 0); + } }