From 5fab65a9f8c026ccd9e4c58cbe1d2aea06c28305 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Thu, 9 Apr 2020 13:16:04 -0400 Subject: Add test_fs_get_file_size * Add mock_size function to framework.h --- tests/framework.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'tests/framework.h') diff --git a/tests/framework.h b/tests/framework.h index 7770ed7..c083b8a 100644 --- a/tests/framework.h +++ b/tests/framework.h @@ -73,6 +73,49 @@ size_t mock(const char *filename, void *data, size_t size, size_t nelem) { return written; } +/** + * Generate a temporary file of `size` in bytes, filled with `fill_byte`s + * @param size size of new file in bytes + * @param fill_byte byte to write `size` times + * @return temporary file path + */ +char *mock_size(size_t size, const char *fill_byte) { + FILE *fp = NULL; + char *buffer = NULL; + char filename[PATH_MAX] = {"mock_file_of_size.XXXXXX"}; + + if ((buffer = malloc(size)) == NULL) { + perror("unable to allocate buffer"); + exit(errno); + } + + if (fill_byte == NULL) { + return NULL; + } + + if ((mkstemp(filename)) < 0) { + perror("mktemp failed to create temporary file"); + exit(errno); + } + + if ((fp = fopen(filename, "w+")) == NULL) { + perror(filename); + exit(errno); + } + + memset(buffer, fill_byte[0], size); + size_t bytes = fwrite(buffer, sizeof(char), size, fp); + if (bytes == 0 && ferror(fp) != 0) { + fprintf(stderr, "%s: read failed\n", filename); + exit(1); + } + + fclose(fp); + free(buffer); + + return strdup(filename); +} + #define myassert(condition, ...) \ do { \ if (!(condition)) { \ -- cgit