Skip to content

Commit 62d9113

Browse files
njamdpc
authored andcommitted
Add an integration test
1 parent 3a4ca5e commit 62d9113

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

lib.rs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,4 +786,66 @@ impl Drop for Async {
786786

787787
// }}}
788788

789+
790+
#[cfg(test)]
791+
mod test {
792+
use super::*;
793+
use std::sync::mpsc;
794+
795+
#[test]
796+
fn integration_test() {
797+
let (mock_drain, mock_drain_rx) = MockDrain::new();
798+
let async_drain = AsyncBuilder::new(mock_drain)
799+
.build();
800+
let slog = slog::Logger::root(async_drain.fuse(), o!("field1" => "value1"));
801+
802+
info!(slog, "Message 1"; "field2" => "value2");
803+
warn!(slog, "Message 2"; "field3" => "value3");
804+
assert_eq!(mock_drain_rx.recv().unwrap(), r#"INFO Message 1: [("field1", "value1"), ("field2", "value2")]"#);
805+
assert_eq!(mock_drain_rx.recv().unwrap(), r#"WARN Message 2: [("field1", "value1"), ("field3", "value3")]"#);
806+
}
807+
808+
809+
/// Test-helper drain
810+
#[derive(Debug)]
811+
struct MockDrain {
812+
tx: mpsc::Sender<String>,
813+
}
814+
815+
impl MockDrain {
816+
fn new() -> (Self, mpsc::Receiver<String>) {
817+
let (tx, rx) = mpsc::channel();
818+
(Self { tx }, rx)
819+
}
820+
}
821+
822+
impl slog::Drain for MockDrain {
823+
type Ok = ();
824+
type Err = slog::Never;
825+
826+
fn log(&self, record: &Record, logger_kv: &OwnedKVList) -> Result<Self::Ok, Self::Err> {
827+
let mut serializer = MockSerializer::default();
828+
logger_kv.serialize(record, &mut serializer).unwrap();
829+
record.kv().serialize(record, &mut serializer).unwrap();
830+
let level = record.level().as_short_str();
831+
let msg = record.msg().to_string();
832+
let entry = format!("{} {}: {:?}", level, msg, serializer.kvs);
833+
self.tx.send(entry).unwrap();
834+
Ok(())
835+
}
836+
}
837+
838+
#[derive(Default)]
839+
struct MockSerializer {
840+
kvs: Vec<(String, String)>,
841+
}
842+
843+
impl slog::Serializer for MockSerializer {
844+
fn emit_arguments(&mut self, key: Key, val: &fmt::Arguments) -> Result<(), slog::Error> {
845+
self.kvs.push((key.to_string(), val.to_string()));
846+
Ok(())
847+
}
848+
}
849+
}
850+
789851
// vim: foldmethod=marker foldmarker={{{,}}}

0 commit comments

Comments
 (0)