From db9b3433bcb06668d8386b836b586b1a7c74a01d Mon Sep 17 00:00:00 2001
From: Fuad Ismail <fuad1502@gmail.com>
Date: Sat, 7 Dec 2024 15:28:29 +0000
Subject: [PATCH] tests/dmesg: add facility and level filter tests.

---
 tests/by-util/test_dmesg.rs | 65 +++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/tests/by-util/test_dmesg.rs b/tests/by-util/test_dmesg.rs
index b811584..b6cfb73 100644
--- a/tests/by-util/test_dmesg.rs
+++ b/tests/by-util/test_dmesg.rs
@@ -81,3 +81,68 @@ fn test_invalid_time_format() {
         .code_is(1)
         .stderr_only("dmesg: unknown time format: definitely-invalid\n");
 }
+
+#[test]
+fn test_filter_facility() {
+    let facilities = [
+        "kern", "user", "mail", "daemon", "auth", "syslog", "lpr", "news", "uucp", "cron",
+        "authpriv", "ftp", "local0", "local1", "local2", "local3", "local4", "local5", "local6",
+        "local7",
+    ];
+    for facility in facilities {
+        let facility_filter_arg = format!("--facility={facility}");
+        let mut cmd = new_ucmd!();
+        let result = cmd
+            .arg("--kmsg-file")
+            .arg("kmsg.input")
+            .arg(facility_filter_arg)
+            .succeeds();
+        let stdout = result.no_stderr().stdout_str();
+        assert_eq!(stdout.lines().count(), 8);
+        let expected = format!("LOG_{}", facility.to_uppercase());
+        stdout
+            .lines()
+            .for_each(|line| assert!(line.contains(&expected)));
+    }
+}
+
+#[test]
+fn test_filter_levels() {
+    let levels = [
+        "emerg", "alert", "crit", "err", "warn", "notice", "info", "debug",
+    ];
+    for level in levels {
+        let level_filter_arg = format!("--level={level}");
+        let mut cmd = new_ucmd!();
+        let result = cmd
+            .arg("--kmsg-file")
+            .arg("kmsg.input")
+            .arg(level_filter_arg)
+            .succeeds();
+        let stdout = result.no_stderr().stdout_str();
+        assert_eq!(stdout.lines().count(), 20);
+        let expected = format!("LOG_{}", level.to_uppercase());
+        stdout
+            .lines()
+            .for_each(|line| assert!(line.contains(&expected)));
+    }
+}
+
+#[test]
+fn test_filter_multiple() {
+    let mut cmd = new_ucmd!();
+    let result = cmd
+        .arg("--kmsg-file")
+        .arg("kmsg.input")
+        .arg("--facility=kern,user")
+        .arg("--level=emerg,alert")
+        .succeeds();
+    let stdout = result.no_stderr().stdout_str();
+    assert_eq!(stdout.lines().count(), 4);
+    stdout.lines().for_each(|line| {
+        assert!(
+            (line.contains("LOG_KERN") || line.contains("LOG_USER"))
+                && (line.contains("LOG_EMERG") || line.contains("LOG_ALERT"))
+        )
+    });
+}