From: Michael Tremer Date: Wed, 1 Nov 2023 15:36:45 +0000 (+0000) Subject: tests: httpclient: Add download tests X-Git-Tag: 0.9.30~1336 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b439dae352cbbf9a946eee49c013a6014f5ce6ec;p=pakfire.git tests: httpclient: Add download tests Signed-off-by: Michael Tremer --- diff --git a/tests/libpakfire/httpclient.c b/tests/libpakfire/httpclient.c index 01e3ca881..fde51743e 100644 --- a/tests/libpakfire/httpclient.c +++ b/tests/libpakfire/httpclient.c @@ -24,6 +24,8 @@ #include "../testsuite.h" +#define DOWNLOAD_URL "file://" ABS_TOP_SRCDIR "/tests/data/beep-1.3-2.ip3.x86_64.pfm" + static int test_create(const struct test* t) { struct pakfire_httpclient* client = NULL; int r = EXIT_FAILURE; @@ -41,8 +43,114 @@ FAIL: return r; } +static int test_one(const struct test* t) { + struct pakfire_xfer* xfer = NULL; + char* buffer = NULL; + size_t length = 0; + int r = EXIT_FAILURE; + + // Create a new transfer + ASSERT_SUCCESS(pakfire_xfer_create(&xfer, t->ctx, t->httpclient, DOWNLOAD_URL)); + + // Set output buffer + ASSERT_SUCCESS(pakfire_xfer_set_output_buffer(xfer, &buffer, &length)); + + // Enqueue the transfer + ASSERT_SUCCESS(pakfire_httpclient_enqueue_xfer(t->httpclient, xfer)); + + // Run it! + ASSERT_SUCCESS(pakfire_httpclient_run(t->httpclient, "Downloading...")); + + // Everything passed + r = EXIT_SUCCESS; + +FAIL: + if (xfer) + pakfire_xfer_unref(xfer); + if (buffer) + free(buffer); + + return r; +} + +static int __test_create_transfer(const struct test* t, struct pakfire_xfer** xfer, + const char* url, char** buffer, size_t* length) { + int r; + + // Create a new transfer + r = pakfire_xfer_create(xfer, t->ctx, t->httpclient, url); + if (r) + return r; + + // Set the output buffer + r = pakfire_xfer_set_output_buffer(*xfer, buffer, length); + if (r) + return r; + + // Enqueue the transfer + r = pakfire_httpclient_enqueue_xfer(t->httpclient, *xfer); + if (r) + return r; + + return 0; +} + +static int test_multiple(const struct test* t) { + struct pakfire_xfer* xfer1 = NULL; + char* buffer1 = NULL; + size_t length1 = 0; + struct pakfire_xfer* xfer2 = NULL; + char* buffer2 = NULL; + size_t length2 = 0; + struct pakfire_xfer* xfer3 = NULL; + char* buffer3 = NULL; + size_t length3 = 0; + struct pakfire_xfer* xfer4 = NULL; + char* buffer4 = NULL; + size_t length4 = 0; + int r = EXIT_FAILURE; + + ASSERT_SUCCESS(__test_create_transfer(t, &xfer1, DOWNLOAD_URL, &buffer1, &length1)); + ASSERT_SUCCESS(__test_create_transfer(t, &xfer2, DOWNLOAD_URL, &buffer2, &length2)); + ASSERT_SUCCESS(__test_create_transfer(t, &xfer3, DOWNLOAD_URL, &buffer3, &length3)); + ASSERT_SUCCESS(__test_create_transfer(t, &xfer4, DOWNLOAD_URL, &buffer4, &length4)); + + // Run it! + ASSERT_SUCCESS(pakfire_httpclient_run(t->httpclient, "Downloading...")); + + ASSERT(*buffer1); + ASSERT(*buffer2); + ASSERT(*buffer3); + ASSERT(*buffer4); + + // Everything passed + r = EXIT_SUCCESS; + +FAIL: + if (xfer1) + pakfire_xfer_unref(xfer1); + if (xfer2) + pakfire_xfer_unref(xfer2); + if (xfer3) + pakfire_xfer_unref(xfer3); + if (xfer4) + pakfire_xfer_unref(xfer4); + if (buffer1) + free(buffer1); + if (buffer2) + free(buffer2); + if (buffer3) + free(buffer3); + if (buffer4) + free(buffer4); + + return r; +} + int main(int argc, const char* argv[]) { testsuite_add_test(test_create, 0); + testsuite_add_test(test_one, TEST_WANTS_HTTPCLIENT); + testsuite_add_test(test_multiple, TEST_WANTS_HTTPCLIENT); return testsuite_run(argc, argv); }