diff options
Diffstat (limited to 'tests/files.c')
| -rw-r--r-- | tests/files.c | 207 |
1 files changed, 133 insertions, 74 deletions
diff --git a/tests/files.c b/tests/files.c index 6e9e5564..3b21ac65 100644 --- a/tests/files.c +++ b/tests/files.c @@ -1,6 +1,6 @@ // -// Copyright 2017 Garrett D'Amore <garrett@damore.org> -// Copyright 2017 Capitar IT Group BV <info@capitar.com> +// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Capitar IT Group BV <info@capitar.com> // // This software is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this @@ -32,24 +32,63 @@ test_permissions(void) size_t n; temp = nni_plat_temp_dir(); So(temp != NULL); - file = nni_plat_join_dir(temp, "nng_files_perms_test"); + file = nni_file_join(temp, "nng_files_perms_test"); if (geteuid() == 0) { ConveySkip("Cannot test permissions as root"); } - So(nni_plat_file_put(file, "abc", 4) == 0); + So(nni_file_put(file, "abc", 4) == 0); Reset({ - nni_plat_file_delete(file); + nni_file_delete(file); nni_strfree(file); nni_strfree(temp); }); chmod(file, 0); - So((rv = nni_plat_file_get(file, &data, &n)) != 0); + So((rv = nni_file_get(file, &data, &n)) != 0); So(rv == NNG_EPERM); - So(nni_plat_file_put(file, "def", 4) == NNG_EPERM); + So(nni_file_put(file, "def", 4) == NNG_EPERM); }); #endif } +struct walkarg { + int a; + int b; + int c; + int d; + int seen; +}; + +static int +walker(const char *name, void *arg) +{ + struct walkarg *wa = arg; + const char * bn; + + bn = nni_file_basename(name); + if (wa != NULL) { + wa->seen++; + if (strcmp(bn, "a") == 0) { + wa->a++; + } else if (strcmp(bn, "b") == 0) { + wa->b++; + } else if (strcmp(bn, "c") == 0) { + wa->c++; + } else if (strcmp(bn, "d") == 0) { + wa->d++; + } + } + if (strcmp(bn, "stop") == 0) { + return (NNI_FILE_WALK_STOP); + } + if (strcmp(bn, "prunechild") == 0) { + return (NNI_FILE_WALK_PRUNE_CHILD); + } + if (strcmp(bn, "prunesib") == 0) { + return (NNI_FILE_WALK_PRUNE_SIB); + } + return (NNI_FILE_WALK_CONTINUE); +} + TestMain("Platform File Support", { Convey("Directory names work", { char *d; @@ -60,7 +99,7 @@ TestMain("Platform File Support", { So((d = nni_plat_home_dir()) != NULL); nni_strfree(d); - So((d = nni_plat_join_dir("a", "b")) != NULL); + So((d = nni_file_join("a", "b")) != NULL); So(d[0] == 'a'); So(d[2] == 'b'); So(d[3] == '\0'); @@ -68,45 +107,40 @@ TestMain("Platform File Support", { nni_strfree(d); }); - Convey("Cannot create file in non-extant directory", { - int rv; - So((rv = nni_plat_file_put("/bogus/dir/a", "", 0)) != 0); - So(rv == NNG_ENOENT); + Convey("Can create file in non-existent directory", { + int rv; + char *tmp; + char *d1; + char *d2; + So((tmp = nni_plat_temp_dir()) != NULL); + So((d1 = nni_file_join(tmp, "bogusdir")) != NULL); + So((d2 = nni_file_join(d1, "a")) != NULL); + So((rv = nni_plat_file_put(d2, "", 0)) == 0); + So(nni_file_delete(d2) == 0); + So(nni_file_delete(d1) == 0); + nni_strfree(d2); + nni_strfree(d1); + nni_strfree(tmp); }); Convey("Cannot read missing file", { int rv; void * data; size_t n; - So((rv = nni_plat_file_get("/bogus/dir/a", &data, &n)) != 0); - So(rv == NNG_ENOENT); - }); - Convey("Cannot delete missing file", { - int rv; - So((rv = nni_plat_file_delete("/bogus/dir/a")) != 0); - So(rv == NNG_ENOENT); - }); - Convey("Cannot open missing directory", { - int rv; - void *dir; - So((rv = nni_plat_dir_open( - &dir, "/bogus/nng_does_not_exist")) != 0); + So((rv = nni_file_get("/bogus/dir/a", &data, &n)) != 0); So(rv == NNG_ENOENT); }); - Convey("Cannot create directory in non-existing subdir", { - int rv; - So((rv = nni_plat_dir_create( - "/bogus/nng_does_not_exist/subdir")) != 0); + + Convey("Delete of missing file passes", + { So(nni_file_delete("/bogus/dir/a") == 0); }); + + Convey("Walk of missing directory fails", { + int rv = nni_file_walk("/bogus/dir/a", walker, NULL, 0); So(rv == NNG_ENOENT); }); + Convey("Remove missing directory works", - { So(nni_plat_dir_remove("/bogus/nng_does_not_exist") == 0); }); + { So(nni_file_delete("/bogus/nng_does_not_exist") == 0); }); - Convey("Create existing directory works", { - char *tmp; - tmp = nni_plat_temp_dir(); - So(nni_plat_dir_create(tmp) == 0); - nni_strfree(tmp); - }); Convey("We can create a pair of files", { char *temp; @@ -114,62 +148,86 @@ TestMain("Platform File Support", { char *a; char *b; char *c; + char *d; temp = nni_plat_temp_dir(); So(temp != NULL); - mydir = nni_plat_join_dir(temp, "nng_files_test"); + mydir = nni_file_join(temp, "nng_files_test"); So(mydir != NULL); - a = nni_plat_join_dir(mydir, "a"); + a = nni_file_join(mydir, "a"); So(a != NULL); - b = nni_plat_join_dir(mydir, "b"); + b = nni_file_join(mydir, "b"); So(b != NULL); - c = nni_plat_join_dir(mydir, "c"); + c = nni_file_join(mydir, "c"); So(c != NULL); + d = nni_file_join(c, "d"); + So(d != NULL); - So(nni_plat_dir_create(mydir) == 0); - So(nni_plat_file_put(a, "alpha", 6) == 0); - So(nni_plat_file_put(b, "bravo", 6) == 0); + So(nni_file_put(a, "alpha", 6) == 0); + So(nni_file_put(b, "bravo", 6) == 0); + So(nni_file_put(d, "delta", 6) == 0); Reset({ nni_strfree(temp); - nni_plat_file_delete(a); - nni_plat_file_delete(b); + nni_file_delete(a); + nni_file_delete(b); + nni_file_delete(d); + nni_file_delete(c); + nni_file_delete(mydir); nni_strfree(a); nni_strfree(b); nni_strfree(c); - nni_plat_dir_remove(mydir); + nni_strfree(d); nni_strfree(mydir); }); - Convey("Directory list works", { - int seen_a = 0; - int seen_b = 0; - int seen_what = 0; - int rv; - void * dirh; - const char *name; - - So(nni_plat_dir_open(&dirh, mydir) == 0); - while ((rv = nni_plat_dir_next(dirh, &name)) == 0) { - if (strcmp(name, "a") == 0) { - seen_a++; - } else if (strcmp(name, "b") == 0) { - seen_b++; - } else { - seen_what++; - } - } - So(rv == NNG_ENOENT); - So(seen_a == 1); - So(seen_b == 1); - So(seen_what == 0); - nni_plat_dir_close(dirh); + Convey("Directory walk works", { + struct walkarg wa = { 0 }; + int rv; + + rv = nni_file_walk(mydir, walker, &wa, 0); + So(rv == 0); + So(wa.a == 1); + So(wa.b == 1); + So(wa.c == 1); + So(wa.d == 1); + So(wa.seen == 4); + + memset(&wa, 0, sizeof(wa)); + rv = nni_file_walk( + mydir, walker, &wa, NNI_FILE_WALK_FILES_ONLY); + So(rv == 0); + So(wa.a == 1); + So(wa.b == 1); + So(wa.c == 0); + So(wa.d == 1); + So(wa.seen == 3); + + memset(&wa, 0, sizeof(wa)); + rv = nni_file_walk( + mydir, walker, &wa, NNI_FILE_WALK_SHALLOW); + So(rv == 0); + So(wa.a == 1); + So(wa.b == 1); + So(wa.c == 1); + So(wa.d == 0); + So(wa.seen == 3); + + memset(&wa, 0, sizeof(wa)); + rv = nni_file_walk(mydir, walker, &wa, + NNI_FILE_WALK_SHALLOW | NNI_FILE_WALK_FILES_ONLY); + So(rv == 0); + So(wa.a == 1); + So(wa.b == 1); + So(wa.c == 0); + So(wa.d == 0); + So(wa.seen == 2); }); Convey("Contents work", { void * data; size_t len; - So(nni_plat_file_get(a, &data, &len) == 0); + So(nni_file_get(a, &data, &len) == 0); So(len == 6); So(strcmp(data, "alpha") == 0); nni_free(data, len); @@ -183,15 +241,16 @@ TestMain("Platform File Support", { size_t n; temp = nni_plat_temp_dir(); So(temp != NULL); - empty = nni_plat_join_dir(temp, "nng_files_test1"); + empty = nni_file_join(temp, "nng_files_test1"); So(empty != NULL); - So(nni_plat_file_put(empty, "", 0) == 0); + So(nni_file_put(empty, "", 0) == 0); Reset({ - nni_plat_file_delete(empty); + nni_file_delete(empty); nni_strfree(empty); nni_strfree(temp); }); - So(nni_plat_file_get(empty, &data, &n) == 0); + So(nni_file_get(empty, &data, &n) == 0); + nni_free(data, n); So(n == 0); }); |
