mirror of
https://github.com/rosenpass/rosenpass.git
synced 2026-02-27 22:13:12 -08:00
feat: add tests for util file.rs
Co-authored-by: Paul Spooren <mail@aparcar.org>
This commit is contained in:
committed by
Paul Spooren
parent
d5d15cd9bc
commit
245d4d1a0f
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -2053,6 +2053,7 @@ dependencies = [
|
||||
"mio 1.0.1",
|
||||
"rustix",
|
||||
"static_assertions",
|
||||
"tempfile",
|
||||
"thiserror",
|
||||
"typenum",
|
||||
"zerocopy",
|
||||
|
||||
@@ -21,3 +21,4 @@ zeroize = {workspace = true}
|
||||
zerocopy = { workspace = true }
|
||||
thiserror = { workspace = true }
|
||||
mio = { workspace = true }
|
||||
tempfile = { workspace = true }
|
||||
|
||||
@@ -114,3 +114,96 @@ pub trait DisplayValueB64 {
|
||||
|
||||
fn display_b64<'o>(&self, output: &'o mut [u8]) -> Result<&'o str, Self::Error>;
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::os::unix::fs::PermissionsExt;
|
||||
use tempfile::tempdir;
|
||||
|
||||
#[test]
|
||||
fn test_fopen_w_public() {
|
||||
let tmp_dir = tempdir().unwrap();
|
||||
let path = tmp_dir.path().join("test");
|
||||
let mut file = fopen_w(path, Visibility::Public).unwrap();
|
||||
file.write_all(b"test").unwrap();
|
||||
let metadata = file.metadata().unwrap();
|
||||
let permissions = metadata.permissions();
|
||||
assert_eq!(permissions.mode(), 0o100644);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_fopen_w_secret() {
|
||||
let tmp_dir = tempdir().unwrap();
|
||||
let path = tmp_dir.path().join("test");
|
||||
let mut file = fopen_w(path, Visibility::Secret).unwrap();
|
||||
file.write_all(b"test").unwrap();
|
||||
let metadata = file.metadata().unwrap();
|
||||
let permissions = metadata.permissions();
|
||||
assert_eq!(permissions.mode(), 0o100600);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_fopen_r() {
|
||||
let tmp_dir = tempdir().unwrap();
|
||||
let path = tmp_dir.path().join("test");
|
||||
let mut file = File::create(path.clone()).unwrap();
|
||||
file.write_all(b"test").unwrap();
|
||||
let mut contents = String::new();
|
||||
let mut file = fopen_r(path).unwrap();
|
||||
file.read_to_string(&mut contents).unwrap();
|
||||
assert_eq!(contents, "test");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_read_slice_to_end() {
|
||||
let tmp_dir = tempdir().unwrap();
|
||||
let path = tmp_dir.path().join("test");
|
||||
let mut file = File::create(path.clone()).unwrap();
|
||||
file.write_all(b"test").unwrap();
|
||||
let mut buf = [0u8; 4];
|
||||
let mut file = fopen_r(path).unwrap();
|
||||
file.read_slice_to_end(&mut buf).unwrap();
|
||||
assert_eq!(buf, [116, 101, 115, 116]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_read_exact_to_end() {
|
||||
let tmp_dir = tempdir().unwrap();
|
||||
let path = tmp_dir.path().join("test");
|
||||
let mut file = File::create(path.clone()).unwrap();
|
||||
file.write_all(b"test").unwrap();
|
||||
let mut buf = [0u8; 4];
|
||||
let mut file = fopen_r(path).unwrap();
|
||||
file.read_exact_to_end(&mut buf).unwrap();
|
||||
assert_eq!(buf, [116, 101, 115, 116]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_read_exact_to_end_to_long() {
|
||||
let tmp_dir = tempdir().unwrap();
|
||||
let path = tmp_dir.path().join("test");
|
||||
let mut file = File::create(path.clone()).unwrap();
|
||||
file.write_all(b"test").unwrap();
|
||||
let mut buf = [0u8; 3];
|
||||
let mut file = fopen_r(path).unwrap();
|
||||
let result = file.read_exact_to_end(&mut buf);
|
||||
assert!(result.is_err());
|
||||
assert_eq!(result.unwrap_err().to_string(), "File too long!");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_read_slice_to_end_to_long() {
|
||||
let tmp_dir = tempdir().unwrap();
|
||||
let path = tmp_dir.path().join("test");
|
||||
let mut file = File::create(path.clone()).unwrap();
|
||||
file.write_all(b"test").unwrap();
|
||||
let mut buf = [0u8; 3];
|
||||
let mut file = fopen_r(path).unwrap();
|
||||
let result = file.read_slice_to_end(&mut buf);
|
||||
assert!(result.is_err());
|
||||
assert_eq!(result.unwrap_err().to_string(), "File too long!");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user