diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-07-13 12:24:47 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-07-13 12:24:47 -0700 |
commit | 4db73843b367c57ad900a739bf8dec5f1799552c (patch) | |
tree | 438b0151ea45188120c56457aa46f17634ee92d0 /tests/utime/test_utime.c | |
parent | ce440b5a43c800fa363bd23b64ba8b34020ec1c1 (diff) | |
parent | c089e7d8c6b7f9a5eae596dcdb6df4e2eceac42e (diff) |
Merge pull request #1376 from inolen/utime_fixes
utime fixes
Diffstat (limited to 'tests/utime/test_utime.c')
-rw-r--r-- | tests/utime/test_utime.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/utime/test_utime.c b/tests/utime/test_utime.c new file mode 100644 index 00000000..1793f4a5 --- /dev/null +++ b/tests/utime/test_utime.c @@ -0,0 +1,53 @@ +#include <assert.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <utime.h> +#include <sys/stat.h> + +void setup() { + mkdir("writeable", 0777); + mkdir("unwriteable", 0111); +} + +void cleanup() { + rmdir("writeable"); + rmdir("unwriteable"); +} + +void test() { + struct stat s; + // currently, the most recent timestamp is shared for atime, + // ctime and mtime. using unique values for each in the test + // will fail + struct utimbuf t = {1000000000, 1000000000}; + + utime("writeable", &t); + assert(!errno); + memset(&s, 0, sizeof s); + stat("writeable", &s); + assert(s.st_atime == t.actime); + assert(s.st_mtime == t.modtime); + + // write permissions aren't checked when setting node + // attributes unless the user uid isn't the owner (so + // therefor, this should work fine) + utime("unwriteable", &t); + assert(!errno); + memset(&s, 0, sizeof s); + stat("unwriteable", &s); + assert(s.st_atime == t.actime); + assert(s.st_mtime == t.modtime); + + puts("success"); +} + +int main() { + atexit(cleanup); + signal(SIGABRT, cleanup); + setup(); + test(); + return EXIT_SUCCESS; +}
\ No newline at end of file |