diff options
Diffstat (limited to 'test.c')
-rw-r--r-- | test.c | 74 |
1 files changed, 74 insertions, 0 deletions
@@ -0,0 +1,74 @@ +#include <stdio.h> + +#include "browse.h" +#include "http.h" + +/* minunit, see https://jera.com/techinfo/jtns/jtn002 */ +#define mu_assert(message, test) do { if (!(test)) return message; } while (0) +#define mu_run_test(test) do { char* message = test(); tests_run++; \ + if(message) return message; } while (0) + +int tests_run; + +static char * +test_browse_invalid_traversal() +{ + struct kreq r; + struct http_ret ret; + + /* attempt to traverse out of DATA_DIR... */ + r = (struct kreq) { + .path = "..", + .suffix = "", + .mime = KMIME_TEXT_HTML + }; + ret = browse(&r); + + /* ...should return an error */ + mu_assert("error, browse allowed invalid traversal!", + ret.code >= KHTTP_400); + + return 0; +} + +static char * +test_browse_path_too_long() +{ + struct kreq r; + struct http_ret ret; + + /* a lengthy path should cause URL overflow... */ + r = (struct kreq) { + .path = "this/is/a/very/very/lengthy/path/that/should/overflow/the/maximum/allowed/path/length/of/PATH_MAX/well/of/course/this/limit/is/platform/dependent", + .suffix = "", + .mime = KMIME_TEXT_HTML + }; + ret = browse(&r); + + mu_assert("error, browse allowed invalid traversal!", + ret.code >= KHTTP_400); + + return 0; +} + +static char * +all_tests() +{ + mu_run_test(test_browse_invalid_traversal); + mu_run_test(test_browse_path_too_long); + return 0; +} + +int +main(void) +{ + char *result = all_tests(); + if (result != 0) { + printf("%s\n", result); + } else { + printf("ALL TESTS PASSED\n"); + } + printf("Tests run: %d\n", tests_run); + + return result != 0; +} |