diff options
author | EuAndreh <eu@euandre.org> | 2021-06-27 12:48:08 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2021-06-27 13:57:30 -0300 |
commit | 5d1401fb191309386a258c32d72e432239dcfe31 (patch) | |
tree | 09cbb08c82c6d97111e21e2d19289e9278163048 /src/remembering-c.c | |
parent | src/remembering-c.c: Mark as static two functions left (diff) | |
download | remembering-5d1401fb191309386a258c32d72e432239dcfe31.tar.gz remembering-5d1401fb191309386a258c32d72e432239dcfe31.tar.xz |
src/remembering-c.c: Add tests for mkdir_p()
Diffstat (limited to '')
-rw-r--r-- | src/remembering-c.c | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/src/remembering-c.c b/src/remembering-c.c index f120441..494fffc 100644 --- a/src/remembering-c.c +++ b/src/remembering-c.c @@ -13,6 +13,7 @@ #ifdef TEST #include "unit-test.h" #include <stdbool.h> +#include <errno.h> #endif @@ -240,7 +241,6 @@ static int mkdir_p(const char *const path, mode_t mode) { int ret; if (stat(path, &s) == 0 && S_ISDIR(s.st_mode)) { - printf("ISDIR: %s\n", path); return 0; } @@ -260,9 +260,55 @@ static int mkdir_p(const char *const path, mode_t mode) { return mkdir(path, mode); } -int main(int argc, char *argv[]) { #ifdef TEST +static void test_mkdir_p() { + { + testing("mkdir_p() with an existing directory is a noop"); + struct stat s; + assert(stat("/tmp", &s) == 0 && S_ISDIR(s.st_mode)); + assert(mkdir_p("/tmp", S_IRWXU | S_IRWXG | S_IRWXO) == 0); + assert(stat("/tmp", &s) == 0 && S_ISDIR(s.st_mode)); + test_ok(); + } + { + testing("mkdir_p() with a new directory creates it"); + struct stat s; + const char *const SUBDIRECTORY_SUFFIX = "/a/b/c/d/e"; + char template[] = "/tmp/remembering.XXXXXX"; + const char *const prefix = mkdtemp(template); + assert(prefix); + + assert(stat(prefix, &s) == 0 && S_ISDIR(s.st_mode)); + + const size_t subdirectory_size = + strlen(prefix) + + strlen(SUBDIRECTORY_SUFFIX) + + sizeof(char); + char *const subdirectory = malloc(subdirectory_size); + assert(subdirectory); + strcat(subdirectory, prefix); + strcat(subdirectory, SUBDIRECTORY_SUFFIX); + + assert(stat(subdirectory, &s) == -1 && errno == ENOENT); + assert(mkdir_p(subdirectory, S_IRWXU | S_IRWXG | S_IRWXO) == 0); + assert(stat(subdirectory, &s) == 0 && S_ISDIR(s.st_mode)); + + free(subdirectory); + test_ok(); + } +} +#endif + +#ifdef TEST +static void unit_tests() { test_get_profile_file(); + test_mkdir_p(); +} +#endif + +int main(int argc, char *argv[]) { +#ifdef TEST + unit_tests(); return EXIT_SUCCESS; #endif @@ -315,7 +361,7 @@ int main(int argc, char *argv[]) { return EXIT_USAGE; } - // end getopts + /* End getopt() */ int ret = EXIT_SUCCESS; |