From a31c36f687d3f4f55d2dde42c31ba6acc699b326 Mon Sep 17 00:00:00 2001 From: Fabian Peter Hammerle Date: Sun, 31 Mar 2019 19:37:37 +0200 Subject: [PATCH] added unit tests for rgpgfs_fs_mkdirs; docker ignore binaries in src/ & tests/ --- .dockerignore | 5 +++-- Dockerfile | 3 ++- Makefile | 6 ++++++ tests/fs.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 tests/fs.c diff --git a/.dockerignore b/.dockerignore index 9c68d32..65d9104 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,7 +1,8 @@ * !Makefile !docker/ -!src/ -!tests/ +!src/*.c +!src/*.h +!tests/*.c # https://docs.docker.com/engine/reference/builder/#dockerignore-file diff --git a/Dockerfile b/Dockerfile index 88041f9..00f5e59 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,8 @@ RUN make FROM build as test COPY --chown=build:nogroup tests /rgpgfs/tests -RUN make tests/str && tests/str +RUN make tests/str && tests/str \ + && make tests/fs && tests/fs FROM alpine:3.9 as runtime diff --git a/Makefile b/Makefile index c3d714c..8ddf5d3 100644 --- a/Makefile +++ b/Makefile @@ -27,6 +27,12 @@ src/str.o : src/str.c src/str.h rgpgfs : src/fs.o src/gpgme.o src/main.o src/str.o $(LD) $^ -o $@ $(LIBS) +tests/fs.o : tests/fs.c src/fs.h + $(CC) $(CFLAGS) -c $< -o $@ + +tests/fs : tests/fs.o src/fs.o + $(LD) $^ -o $@ + tests/str.o : tests/str.c src/str.h $(CC) $(CFLAGS) -c $< -o $@ diff --git a/tests/fs.c b/tests/fs.c new file mode 100644 index 0000000..5519359 --- /dev/null +++ b/tests/fs.c @@ -0,0 +1,50 @@ +#include "src/fs.h" + +#define _GNU_SOURCE +#include +#include + +#include +#include +#include +#include + +#define PATH_BUF_LEN 256 + +void test_mkdirs(const char *temp_dir, const char *rel_path) { + char abs_path[PATH_BUF_LEN]; + strcpy(abs_path, temp_dir); + strcat(abs_path, "/"); + strcat(abs_path, rel_path); + if (rgpgfs_fs_mkdirs(abs_path)) { + fprintf(stderr, "rel_path = '%s'\n", rel_path); + perror("rgpgfs_fs_mkdirs failed"); + exit(1); + } + + FILE *f = fopen(abs_path, "w"); + assert(f); + fclose(f); +}; + +int cleanup_rm_cb(const char *fpath, const struct stat *sb, int typeflag, + struct FTW *ftwbuf) { + if (remove(fpath)) { + perror(fpath); + } + return 0; +} + +int main() { + char temp_dir[] = "/tmp/rgpgfs-tests-fs-XXXXXX"; + assert(mkdtemp(temp_dir)); + // printf("temp dir: %s\n", temp_dir); + + test_mkdirs(temp_dir, "file"); + test_mkdirs(temp_dir, "a/file"); + test_mkdirs(temp_dir, "a/b/file"); + test_mkdirs(temp_dir, "c/d/file"); + + nftw(temp_dir, cleanup_rm_cb, 8, FTW_DEPTH); + return 0; +}