From 07dc44efdc5c2fbc2b34c969e623d3b0bc0df15a Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Mon, 15 Jul 2024 10:07:25 -0400 Subject: Unit tests (#12) * Change return value of conda_setup_headless() from void to int * Replace exit() with return; * Return early if unpacking the micromamba binary fails * Exit program when pointer to INIFILE is NULL. * Validation function cannot otherwise proceed * The way the logic is set up I've decided to duplicate the installation code for now until I find time to revise it * The only meaningful difference between a "fresh start" and reusing the conda installation is a rmtree(). * Exposes STASIS_DOWNLOAD_TIMEOUT environment variable * Sets the connection timeout for libcurl to 30, instead of 300. * Export ini_section_create() function * Add download() tests * Add conda_*() tests * Add boilerplate source file for test framework * Fixes segfault reported by @GeorgeJCleary (#10) * The key is now an array index. When key is -1, the env variable is not defined. * Free resources only when continue on error is disabled (#11) * Fix segfault due to premature shutdown/cleanup * If conda_setup_headless cannot succeed, die * Set STASIS_SYSCONFDIR for tests --- tests/test_download.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 tests/test_download.c (limited to 'tests/test_download.c') 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 = "= 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 -- cgit