@@ -27,7 +27,7 @@ impl std::fmt::Display for Error {
27
27
Error :: InvalidProcessId { process_id, reason } => {
28
28
write ! ( f, "Invalid process id: {process_id}. Reason: {reason}" )
29
29
}
30
- Error :: InvalidCast { source , reason } => {
30
+ Error :: InvalidCast { reason , source } => {
31
31
write ! ( f, "Invalid cast. Reason: {reason}. Source: {source}" )
32
32
}
33
33
Error :: InvalidProcEntry {
@@ -56,6 +56,20 @@ impl From<std::io::Error> for Error {
56
56
}
57
57
}
58
58
59
+ #[ cfg( windows) ]
60
+ impl From < :: windows:: core:: Error > for Error {
61
+ fn from ( error : :: windows:: core:: Error ) -> Self {
62
+ Self :: Windows ( error)
63
+ }
64
+ }
65
+
66
+ #[ cfg( unix) ]
67
+ impl From < nix:: Error > for Error {
68
+ fn from ( error : nix:: Error ) -> Self {
69
+ Self :: Unix ( error)
70
+ }
71
+ }
72
+
59
73
pub type Result < T > = std:: result:: Result < T , Error > ;
60
74
61
75
pub type ProcessId = u32 ;
@@ -141,3 +155,102 @@ pub(crate) mod tokio {
141
155
async fn get_process_infos ( & self ) -> Result < ProcessInfos > ;
142
156
}
143
157
}
158
+
159
+ #[ cfg( test) ]
160
+ mod tests {
161
+ use super :: * ;
162
+
163
+ #[ test]
164
+ fn error_display_invalid_process_id ( ) {
165
+ let error = Error :: InvalidProcessId {
166
+ process_id : 0 ,
167
+ reason : "reason" . to_string ( ) ,
168
+ } ;
169
+ assert_eq ! (
170
+ format!( "{}" , error) ,
171
+ "Invalid process id: 0. Reason: reason"
172
+ ) ;
173
+ }
174
+
175
+ #[ test]
176
+ fn error_display_invalid_cast ( ) {
177
+ let error = Error :: InvalidCast {
178
+ reason : "reason" . to_string ( ) ,
179
+ source : u32:: try_from ( -1 ) . unwrap_err ( ) ,
180
+ } ;
181
+ assert_eq ! (
182
+ format!( "{}" , error) ,
183
+ "Invalid cast. Reason: reason. Source: out of range integral type conversion attempted"
184
+ ) ;
185
+ }
186
+
187
+ #[ test]
188
+ fn error_display_invalid_proc_entry ( ) {
189
+ let error = Error :: InvalidProcEntry {
190
+ process_id : 0 ,
191
+ path : "/proc/0" . to_string ( ) ,
192
+ reason : "reason" . to_string ( ) ,
193
+ source : Some ( "source" . parse :: < u32 > ( ) . unwrap_err ( ) ) ,
194
+ } ;
195
+ assert_eq ! (
196
+ format!( "{}" , error) ,
197
+ "Invalid proc entry. Process id: 0. Path: /proc/0. Reason: reason. Source: Some(ParseIntError { kind: InvalidDigit })"
198
+ ) ;
199
+ }
200
+
201
+ #[ test]
202
+ fn error_display_io ( ) {
203
+ let error = Error :: Io ( std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , "error" ) ) ;
204
+ assert_eq ! ( format!( "{}" , error) , "I/O error: error" ) ;
205
+ }
206
+
207
+ #[ cfg( windows) ]
208
+ #[ test]
209
+ fn error_display_windows ( ) {
210
+ let error = Error :: Windows ( windows:: core:: Error :: OK ) ;
211
+ assert_eq ! (
212
+ format!( "{}" , error) ,
213
+ "Windows error: The operation completed successfully. (0x00000000)"
214
+ ) ;
215
+ }
216
+
217
+ #[ cfg( unix) ]
218
+ #[ test]
219
+ fn error_display_unix ( ) {
220
+ let error = Error :: Unix ( nix:: Error :: UnsupportedOperation ) ;
221
+ assert_eq ! ( format!( "{}" , error) , "Unix error: UnsupportedOperation" ) ;
222
+ }
223
+
224
+ #[ test]
225
+ fn from_io_error ( ) {
226
+ let error = std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , "error" ) ;
227
+ let error = Error :: from ( error) ;
228
+ assert_eq ! ( format!( "{}" , error) , "I/O error: error" ) ;
229
+ }
230
+
231
+ #[ cfg( windows) ]
232
+ #[ test]
233
+ fn from_windows_error ( ) {
234
+ let error = windows:: core:: Error :: OK ;
235
+ let error = Error :: from ( error) ;
236
+ assert_eq ! (
237
+ format!( "{}" , error) ,
238
+ "Windows error: The operation completed successfully. (0x00000000)"
239
+ ) ;
240
+ }
241
+
242
+ #[ cfg( unix) ]
243
+ #[ test]
244
+ fn from_unix_error ( ) {
245
+ let error = nix:: Error :: UnsupportedOperation ;
246
+ let error = Error :: from ( error) ;
247
+ assert_eq ! ( format!( "{}" , error) , "Unix error: UnsupportedOperation" ) ;
248
+ }
249
+
250
+ #[ test]
251
+ fn default_config ( ) {
252
+ let config = Config :: default ( ) ;
253
+ assert_eq ! ( config. signal, "SIGTERM" ) ;
254
+ assert_eq ! ( config. include_target, true ) ;
255
+ }
256
+ }
0 commit comments