]> git.ipfire.org Git - people/ms/suricata.git/commitdiff
mqtt: add some extra tests for varint parsing
authorSascha Steinbiss <satta@debian.org>
Wed, 9 Sep 2020 07:51:56 +0000 (09:51 +0200)
committerVictor Julien <victor@inliniac.net>
Wed, 9 Sep 2020 14:22:01 +0000 (16:22 +0200)
rust/src/mqtt/parser.rs

index fdab86f3a86a004de12227236c7f2875fad1fbbd..86ad3d83b9ed680f30d100dcbb23c8dc6a0a5bf7 100644 (file)
@@ -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);
+    }
 }