From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- vendor/rustix/tests/fs/utimensat.rs | 127 ++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 vendor/rustix/tests/fs/utimensat.rs (limited to 'vendor/rustix/tests/fs/utimensat.rs') diff --git a/vendor/rustix/tests/fs/utimensat.rs b/vendor/rustix/tests/fs/utimensat.rs new file mode 100644 index 000000000..f0fb7e27b --- /dev/null +++ b/vendor/rustix/tests/fs/utimensat.rs @@ -0,0 +1,127 @@ +#[cfg(not(any(target_os = "redox", target_os = "wasi")))] +#[test] +fn test_utimensat() { + use rustix::fs::{cwd, openat, statat, utimensat, AtFlags, Mode, OFlags, Timespec, Timestamps}; + + let tmp = tempfile::tempdir().unwrap(); + let dir = openat( + cwd(), + tmp.path(), + OFlags::RDONLY | OFlags::CLOEXEC, + Mode::empty(), + ) + .unwrap(); + + let _ = openat( + &dir, + "foo", + OFlags::CREATE | OFlags::WRONLY | OFlags::CLOEXEC, + Mode::empty(), + ) + .unwrap(); + + let times = Timestamps { + last_access: Timespec { + tv_sec: 44000, + tv_nsec: 45000, + }, + last_modification: Timespec { + tv_sec: 46000, + tv_nsec: 47000, + }, + }; + utimensat(&dir, "foo", ×, AtFlags::empty()).unwrap(); + + let after = statat(&dir, "foo", AtFlags::empty()).unwrap(); + + assert_eq!(times.last_modification.tv_sec as u64, after.st_mtime as u64); + #[cfg(not(target_os = "netbsd"))] + assert_eq!( + times.last_modification.tv_nsec as u64, + after.st_mtime_nsec as u64 + ); + #[cfg(target_os = "netbsd")] + assert_eq!( + times.last_modification.tv_nsec as u64, + after.st_mtimensec as u64 + ); + assert!(times.last_access.tv_sec as u64 >= after.st_atime as u64); + #[cfg(not(target_os = "netbsd"))] + assert!( + times.last_access.tv_sec as u64 > after.st_atime as u64 + || times.last_access.tv_nsec as u64 >= after.st_atime_nsec as u64 + ); + #[cfg(target_os = "netbsd")] + assert!( + times.last_access.tv_sec as u64 > after.st_atime as u64 + || times.last_access.tv_nsec as u64 >= after.st_atimensec as u64 + ); +} + +#[cfg(not(any(target_os = "redox", target_os = "wasi")))] +#[test] +fn test_utimensat_noent() { + use rustix::fs::{cwd, openat, utimensat, AtFlags, Mode, OFlags, Timespec, Timestamps}; + + let tmp = tempfile::tempdir().unwrap(); + let dir = openat( + cwd(), + tmp.path(), + OFlags::RDONLY | OFlags::CLOEXEC, + Mode::empty(), + ) + .unwrap(); + + let times = Timestamps { + last_access: Timespec { + tv_sec: 44000, + tv_nsec: 45000, + }, + last_modification: Timespec { + tv_sec: 46000, + tv_nsec: 47000, + }, + }; + assert_eq!( + utimensat(&dir, "foo", ×, AtFlags::empty()).unwrap_err(), + rustix::io::Errno::NOENT + ); +} + +#[cfg(not(any(target_os = "redox", target_os = "wasi")))] +#[test] +fn test_utimensat_notdir() { + use rustix::fs::{cwd, openat, utimensat, AtFlags, Mode, OFlags, Timespec, Timestamps}; + + let tmp = tempfile::tempdir().unwrap(); + let dir = openat( + cwd(), + tmp.path(), + OFlags::RDONLY | OFlags::CLOEXEC, + Mode::empty(), + ) + .unwrap(); + + let foo = openat( + &dir, + "foo", + OFlags::CREATE | OFlags::WRONLY | OFlags::CLOEXEC, + Mode::empty(), + ) + .unwrap(); + + let times = Timestamps { + last_access: Timespec { + tv_sec: 44000, + tv_nsec: 45000, + }, + last_modification: Timespec { + tv_sec: 46000, + tv_nsec: 47000, + }, + }; + assert_eq!( + utimensat(&foo, "bar", ×, AtFlags::empty()).unwrap_err(), + rustix::io::Errno::NOTDIR + ); +} -- cgit v1.2.3