1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#include "testing.h"
#include "download.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();
}
|