#include #include #include "browse.h" #include "http.h" #include "upload.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 * test_upload_post() { char *file_content; struct kreq r; struct http_ret ret; struct kpair fields[2]; file_content = "text file"; fields[0] = (struct kpair) { .key = "file", .file = "bob.txt", .val = file_content, .valsz = strlen(file_content) }; fields[1] = (struct kpair) { .key = "file", .file = "alice.txt", .val = file_content, .valsz = strlen(file_content) }; r = (struct kreq) { .pname = "/vault", .path = "", .method = KMETHOD_POST, .fieldsz = 2, .fields = fields }; ret = upload(&r); mu_assert("error, POST upload failed!", 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); mu_run_test(test_upload_post); 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; }