]> git.ipfire.org Git - pakfire.git/commitdiff
downloader: Add test for retrieve with pending transfers
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 11 Mar 2021 20:35:15 +0000 (20:35 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 11 Mar 2021 20:35:15 +0000 (20:35 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/downloader.c
tests/libpakfire/downloader.c

index f367a93920fdf8b9787f9e555961d3483d30f6b5..439e9689e14ba195d06faa9a5b8b9a0283391aef 100644 (file)
@@ -102,26 +102,19 @@ static void pakfire_transfer_free(struct pakfire_transfer* transfer) {
                curl_easy_cleanup(transfer->handle);
 
        // Close temporary file
-       if (transfer->f) {
-               unlink(transfer->tempfile);
+       if (transfer->f)
                fclose(transfer->f);
-       }
 
        free(transfer);
 }
 
 static void pakfire_downloader_free(struct pakfire_downloader* downloader) {
-       if (downloader->curl)
-               curl_multi_cleanup(downloader->curl);
-
-       // Cleanup global stuff after all downloader instances have been freed
-       if (!--curl_initialized)
-               curl_global_cleanup();
-
        // Free any unprocessed transfers
        struct pakfire_transfer* transfer;
-       TAILQ_FOREACH(transfer, &downloader->transfers, nodes)
-               pakfire_transfer_free(transfer);
+       while (!TAILQ_EMPTY(&downloader->transfers)) {
+               transfer = TAILQ_LAST(&downloader->transfers, transfers);
+               TAILQ_REMOVE(&downloader->transfers, transfer, nodes);
+       }
 
        // Free mirrors
        if (downloader->mirrors) {
@@ -130,6 +123,13 @@ static void pakfire_downloader_free(struct pakfire_downloader* downloader) {
                free(downloader->mirrors);
        }
 
+       if (downloader->curl)
+               curl_multi_cleanup(downloader->curl);
+
+       // Cleanup global stuff after all downloader instances have been freed
+       if (!--curl_initialized)
+               curl_global_cleanup();
+
        pakfire_unref(downloader->pakfire);
        free(downloader);
 }
index 745570c502ebd8564fdb5711f7deb8604a2aea19..166855efcc20a8ecb603751f796c7327ef52cfef 100644 (file)
@@ -18,6 +18,8 @@
 #                                                                             #
 #############################################################################*/
 
+#include <errno.h>
+
 #include <pakfire/downloader.h>
 
 #include "../testsuite.h"
@@ -43,8 +45,30 @@ static int test_simple(const struct test* t) {
        return EXIT_SUCCESS;
 }
 
+static int test_retrieve_with_pending_transfers(const struct test* t) {
+       struct pakfire_downloader* d;
+
+       // Create downloader
+       int r = pakfire_downloader_create(&d, t->pakfire);
+       ASSERT(r == 0);
+
+       // Add a transfer
+       r = pakfire_downloader_add(d, DOWNLOAD_URL, DOWNLOAD_PATH);
+       ASSERT(r == 0);
+
+       // Retrieve a file
+       r = pakfire_downloader_retrieve(d, DOWNLOAD_URL, DOWNLOAD_PATH);
+       ASSERT(r == EBUSY);
+
+       // Cleanup
+       pakfire_downloader_unref(d);
+
+       return EXIT_SUCCESS;
+}
+
 int main(int argc, char** argv) {
        testsuite_add_test(test_simple);
+       testsuite_add_test(test_retrieve_with_pending_transfers);
 
        return testsuite_run();
 }