From d25a27a5b6a5dc8e8759e1d1c79e5a8d44de7fb9 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Mon, 2 Aug 2021 15:04:40 +0000 Subject: [PATCH] Check IO errors in test using `raw_os_error()` instead of `kind()` std::io::ErrorKind is a `#[non_exhaustive]` enum as more specific error types are to be added in the future. It was unclear in the docs until very recently, however, that this is to be done by re-defining `ErrorKind::Other` errors to new enum variants. Thus, our tests which check explicitly for `ErrorKind::Other` as a result of trying to access a directory as a file were incorrect. Sadly, these generated no meaningful feedback from rustc at all, except that they're suddenly failing in rustc beta! After some back-and-forth, it seems rustc is moving forward breaking existing code in future versions, so we move to the "correct" check here, which is to check the raw IO error. See rust-lang/rust#86442 and rust-lang/rust#85746 for more info. --- lightning-persister/src/util.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lightning-persister/src/util.rs b/lightning-persister/src/util.rs index 1825980ad89..73b28985bff 100644 --- a/lightning-persister/src/util.rs +++ b/lightning-persister/src/util.rs @@ -135,7 +135,7 @@ mod tests { // Create the channel data file and make it a directory. fs::create_dir_all(get_full_filepath(path.clone(), filename.to_string())).unwrap(); match write_to_file(path.clone(), filename.to_string(), &test_writeable) { - Err(e) => assert_eq!(e.kind(), io::ErrorKind::Other), + Err(e) => assert_eq!(e.raw_os_error(), Some(libc::EISDIR)), _ => panic!("Unexpected Ok(())") } fs::remove_dir_all(path).unwrap(); @@ -178,7 +178,7 @@ mod tests { match write_to_file(path, filename, &test_writeable) { Err(e) => { #[cfg(not(target_os = "windows"))] - assert_eq!(e.kind(), io::ErrorKind::Other); + assert_eq!(e.raw_os_error(), Some(libc::EISDIR)); #[cfg(target_os = "windows")] assert_eq!(e.kind(), io::ErrorKind::PermissionDenied); }