File: test_file_writer_as_writer.rs

package info (click to toggle)
rust-flexi-logger 0.29.8-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,084 kB
  • sloc: makefile: 2
file content (100 lines) | stat: -rw-r--r-- 2,929 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
mod test_utils;

use flexi_logger::{writers::FileLogWriter, FileSpec, Logger};
use log::*;

const COUNT: u8 = 3;

#[test]
fn test_write_modes() {
    if let Some(value) = test_utils::dispatch(COUNT) {
        work(value)
    }
}

fn work(value: u8) {
    let link_name = "link_to_log".to_string();
    let mut logger = Logger::try_with_str("trace").unwrap();
    let flwb = FileLogWriter::builder(
        FileSpec::default()
            .directory(self::test_utils::dir())
            .basename("to_foo_or_not_to_foo"),
    );
    match value {
        0 => {
            logger = logger.log_to_writer(Box::new(
                flwb.max_level(LevelFilter::Debug).try_build().unwrap(),
            ));
        }
        1 => {
            logger = logger.log_to_writer(Box::new(
                flwb.max_level(LevelFilter::Trace).try_build().unwrap(),
            ));
        }
        2 => {
            logger = logger.log_to_writer(Box::new(flwb.try_build().unwrap()));
        }
        COUNT..=u8::MAX => {
            unreachable!()
        }
    };

    let handle = logger
        .start()
        .unwrap_or_else(|e| panic!("Logger initialization failed with {e}"));

    error!("This is an error message");
    warn!("This is a warning");
    info!("This is an info message");
    debug!("This is a debug message");
    trace!("This is a trace message");

    match value {
        0 => {
            handle.validate_logs(&[
                ("ERROR", "test_file_writer", "error"),
                ("WARN", "test_file_writer", "warning"),
                ("INFO", "test_file_writer", "info"),
                ("DEBUG", "test_file_writer", "debug"),
            ]);
        }
        1 => {
            handle.validate_logs(&[
                ("ERROR", "test_file_writer", "error"),
                ("WARN", "test_file_writer", "warning"),
                ("INFO", "test_file_writer", "info"),
                ("DEBUG", "test_file_writer", "debug"),
                ("TRACE", "test_file_writer", "trace"),
            ]);
        }
        2 => {
            handle.validate_logs(&[
                ("ERROR", "test_file_writer", "error"),
                ("WARN", "test_file_writer", "warning"),
                ("INFO", "test_file_writer", "info"),
                ("DEBUG", "test_file_writer", "debug"),
                ("TRACE", "test_file_writer", "trace"),
            ]);
        }
        COUNT..=u8::MAX => {
            unreachable!()
        }
    }

    if value == 4 {
        self::platform::check_link(&link_name);
    }
}

mod platform {
    #[cfg(target_family = "unix")]
    pub fn check_link(link_name: &str) {
        match std::fs::symlink_metadata(link_name) {
            Err(e) => panic!("error with symlink: {e}"),
            Ok(metadata) => assert!(metadata.file_type().is_symlink(), "not a symlink"),
        }
    }

    #[cfg(not(target_family = "unix"))]
    pub fn check_link(_: &str) {}
}