]> git.ipfire.org Git - pakfire.git/commitdiff
tests: httpclient: Add download tests
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 1 Nov 2023 15:36:45 +0000 (15:36 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 1 Nov 2023 15:36:45 +0000 (15:36 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
tests/libpakfire/httpclient.c

index 01e3ca881d1d53ddbdb4016acbe84b09c022a181..fde51743e60f2827228691b0d1686b758ae0a1e5 100644 (file)
@@ -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);
 }