diff options
author | Julio Merino <jmmv@google.com> | 2018-10-17 12:03:08 -0400 |
---|---|---|
committer | Julio Merino <julio@meroh.net> | 2018-10-19 22:09:13 -0400 |
commit | 9bf4ab32764be9b05fd74d67b21c6433bed7e488 (patch) | |
tree | 299f195c6407c34bd3b41aaab693842bb5df1f28 /test/test_unistd.rs | |
parent | f3dab48a9221ede9f5409662eacca4b53de34171 (diff) | |
download | nix-9bf4ab32764be9b05fd74d67b21c6433bed7e488.zip |
Add trivial tests for chown and fchownat
These are mostly to ensure that all the platforms we care about in our
CI can reference these primitives.
Diffstat (limited to 'test/test_unistd.rs')
-rw-r--r-- | test/test_unistd.rs | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/test/test_unistd.rs b/test/test_unistd.rs index 981ab53d..e5f9d448 100644 --- a/test/test_unistd.rs +++ b/test/test_unistd.rs @@ -1,4 +1,4 @@ -use nix::fcntl::{fcntl, FcntlArg, FdFlag, OFlag}; +use nix::fcntl::{fcntl, FcntlArg, FdFlag, open, OFlag}; use nix::unistd::*; use nix::unistd::ForkResult::*; use nix::sys::signal::{SaFlags, SigAction, SigHandler, SigSet, Signal, sigaction}; @@ -302,6 +302,49 @@ fn test_getcwd() { } #[test] +fn test_chown() { + // Testing for anything other than our own UID/GID is hard. + let uid = Some(getuid()); + let gid = Some(getgid()); + + let tempdir = tempfile::tempdir().unwrap(); + let path = tempdir.path().join("file"); + { + File::create(&path).unwrap(); + } + + chown(&path, uid, gid).unwrap(); + chown(&path, uid, None).unwrap(); + chown(&path, None, gid).unwrap(); + + fs::remove_file(&path).unwrap(); + chown(&path, uid, gid).unwrap_err(); +} + +#[test] +fn test_fchownat() { + // Testing for anything other than our own UID/GID is hard. + let uid = Some(getuid()); + let gid = Some(getgid()); + + let tempdir = tempfile::tempdir().unwrap(); + let path = tempdir.path().join("file"); + { + File::create(&path).unwrap(); + } + + let dirfd = open(tempdir.path(), OFlag::empty(), Mode::empty()).unwrap(); + + fchownat(Some(dirfd), "file", uid, gid, FchownatFlags::FollowSymlink).unwrap(); + + chdir(tempdir.path()).unwrap(); + fchownat(None, "file", uid, gid, FchownatFlags::FollowSymlink).unwrap(); + + fs::remove_file(&path).unwrap(); + fchownat(None, "file", uid, gid, FchownatFlags::FollowSymlink).unwrap_err(); +} + +#[test] fn test_lseek() { const CONTENTS: &[u8] = b"abcdef123456"; let mut tmp = tempfile().unwrap(); |