@@ -66,3 +66,98 @@ impl Deserialize for ThresholdFilterDeserializer {
66
66
Ok ( Box :: new ( ThresholdFilter :: new ( config. level ) ) )
67
67
}
68
68
}
69
+
70
+ #[ cfg( test) ]
71
+ mod test {
72
+ use log:: { Level , LevelFilter , Record } ;
73
+
74
+ use super :: * ;
75
+
76
+ #[ cfg( feature = "config_parsing" ) ]
77
+ use crate :: config:: Deserializers ;
78
+
79
+ #[ cfg( feature = "config_parsing" ) ]
80
+ use serde_test:: { assert_de_tokens, assert_de_tokens_error, Token } ;
81
+
82
+ #[ test]
83
+ #[ cfg( feature = "config_parsing" ) ]
84
+ fn test_cfg_deserialize ( ) {
85
+ let filter_cfg = ThresholdFilterConfig {
86
+ level : LevelFilter :: Off ,
87
+ } ;
88
+
89
+ let mut cfg = vec ! [
90
+ Token :: Struct {
91
+ name: "ThresholdFilterConfig" ,
92
+ len: 1 ,
93
+ } ,
94
+ Token :: Str ( "level" ) ,
95
+ Token :: Enum {
96
+ name: "LevelFilter" ,
97
+ } ,
98
+ Token :: Str ( "Off" ) ,
99
+ Token :: Unit ,
100
+ Token :: StructEnd ,
101
+ ] ;
102
+
103
+ assert_de_tokens ( & filter_cfg, & cfg) ;
104
+
105
+ cfg[ 1 ] = Token :: Str ( "leel" ) ;
106
+ assert_de_tokens_error :: < ThresholdFilterConfig > ( & cfg, "missing field `level`" ) ;
107
+
108
+ cfg[ 1 ] = Token :: Str ( "level" ) ;
109
+ cfg[ 3 ] = Token :: Str ( "On" ) ;
110
+ cfg. remove ( 4 ) ; // No Unit on this one as the Option is invalid
111
+ assert_de_tokens_error :: < ThresholdFilterConfig > (
112
+ & cfg,
113
+ "unknown variant `On`, expected one of `OFF`, `ERROR`, `WARN`, `INFO`, `DEBUG`, `TRACE`" ,
114
+ ) ;
115
+ }
116
+
117
+ #[ test]
118
+ fn test_filter_new_vs_struct ( ) {
119
+ assert_eq ! (
120
+ ThresholdFilter :: new( LevelFilter :: Info ) ,
121
+ ThresholdFilter {
122
+ level: LevelFilter :: Info
123
+ }
124
+ ) ;
125
+ }
126
+
127
+ #[ test]
128
+ fn test_threshold_filter ( ) {
129
+ let thres = ThresholdFilter :: new ( LevelFilter :: Info ) ;
130
+ let debug_record = Record :: builder ( )
131
+ . level ( Level :: Debug )
132
+ . args ( format_args ! ( "the message" ) )
133
+ . module_path ( Some ( "path" ) )
134
+ . file ( Some ( "file" ) )
135
+ . line ( Some ( 132 ) )
136
+ . build ( ) ;
137
+
138
+ assert_eq ! ( thres. filter( & debug_record) , Response :: Reject ) ;
139
+
140
+ let error_record = Record :: builder ( )
141
+ . level ( Level :: Error )
142
+ . args ( format_args ! ( "the message" ) )
143
+ . module_path ( Some ( "path" ) )
144
+ . file ( Some ( "file" ) )
145
+ . line ( Some ( 132 ) )
146
+ . build ( ) ;
147
+
148
+ assert_eq ! ( thres. filter( & error_record) , Response :: Neutral ) ;
149
+ }
150
+
151
+ #[ test]
152
+ #[ cfg( feature = "config_parsing" ) ]
153
+ fn test_cfg_deserializer ( ) {
154
+ let filter_cfg = ThresholdFilterConfig {
155
+ level : LevelFilter :: Off ,
156
+ } ;
157
+
158
+ let deserializer = ThresholdFilterDeserializer ;
159
+
160
+ let res = deserializer. deserialize ( filter_cfg, & Deserializers :: default ( ) ) ;
161
+ assert ! ( res. is_ok( ) ) ;
162
+ }
163
+ }
0 commit comments