aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2024-07-13 12:24:03 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2024-07-13 12:24:03 -0400
commit2f41ed2fafe2596ef2bee6cf5103403ccbbd430c (patch)
tree19caacd163b4c626d9e48ac588dd50caafa59ef6
parentee2b67d95a865d753cd2587f4c9ae9322d0e8996 (diff)
downloadstasis-2f41ed2fafe2596ef2bee6cf5103403ccbbd430c.tar.gz
Add download() tests
-rw-r--r--tests/test_download.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/test_download.c b/tests/test_download.c
new file mode 100644
index 0000000..cee7683
--- /dev/null
+++ b/tests/test_download.c
@@ -0,0 +1,50 @@
+#include "testing.h"
+
+void test_download() {
+ struct testcase {
+ const char *url;
+ long http_code;
+ const char *data;
+ const char *errmsg;
+ };
+ struct testcase tc[] = {
+ {.url = "https://ssb.stsci.edu/jhunk/stasis_test/test_download.txt", .http_code = 200L, .data = "It works!\n", .errmsg = NULL},
+ {.url = "https://ssb.stsci.edu/jhunk/stasis_test/test_download.broken", .http_code = 404L, .data = "<html", .errmsg = NULL},
+ {.url = "https://example.tld", .http_code = -1L, .data = NULL, .errmsg = "Couldn't resolve host name"},
+ };
+
+ for (size_t i = 0; i < sizeof(tc) / sizeof(*tc); i++) {
+ const char *filename = "output.txt";
+ char errmsg[BUFSIZ] = {0};
+ char *errmsg_p = errmsg;
+ long http_code = download((char *) tc[i].url, filename, &errmsg_p);
+ if (tc[i].errmsg) {
+ STASIS_ASSERT(strlen(errmsg_p), "an error should have been thrown by curl, but wasn't");
+ fflush(stderr);
+ SYSERROR("curl error message: %s", errmsg_p);
+ } else {
+ STASIS_ASSERT(!strlen(errmsg_p), "unexpected error thrown by curl");
+ }
+ STASIS_ASSERT(http_code == tc[i].http_code, "expecting non-error HTTP code");
+
+ char **data = file_readlines(filename, 0, 100, NULL);
+ if (http_code >= 0) {
+ STASIS_ASSERT(data != NULL, "data should not be null");
+ STASIS_ASSERT(strncmp(data[0], tc[i].data, strlen(tc[i].data)) == 0, "data file does not match the expected contents");
+ } else {
+ STASIS_ASSERT(http_code == -1, "http_code should be -1 on fatal curl error");
+ STASIS_ASSERT(data == NULL, "data should be NULL on fatal curl error");
+ }
+ guard_free(data);
+ remove(filename);
+ }
+}
+
+int main(int argc, char *argv[]) {
+ STASIS_TEST_BEGIN_MAIN();
+ STASIS_TEST_FUNC *tests[] = {
+ test_download,
+ };
+ STASIS_TEST_RUN(tests);
+ STASIS_TEST_END_MAIN();
+} \ No newline at end of file