@@ -786,4 +786,66 @@ impl Drop for Async {
786
786
787
787
// }}}
788
788
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
+
789
851
// vim: foldmethod=marker foldmarker={{{,}}}
0 commit comments