From 5d1401fb191309386a258c32d72e432239dcfe31 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Jun 2021 12:48:08 -0300 Subject: src/remembering-c.c: Add tests for mkdir_p() --- src/remembering-c.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) (limited to 'src') 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 +#include #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; -- cgit v1.2.3