From: Michael Tremer Date: Thu, 11 Mar 2021 20:35:15 +0000 (+0000) Subject: downloader: Add test for retrieve with pending transfers X-Git-Tag: 0.9.28~1285^2~564 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0691b7c9e55e90cf72670977b6a267f5e1c80503;p=pakfire.git downloader: Add test for retrieve with pending transfers Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/downloader.c b/src/libpakfire/downloader.c index f367a9392..439e9689e 100644 --- a/src/libpakfire/downloader.c +++ b/src/libpakfire/downloader.c @@ -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); } diff --git a/tests/libpakfire/downloader.c b/tests/libpakfire/downloader.c index 745570c50..166855efc 100644 --- a/tests/libpakfire/downloader.c +++ b/tests/libpakfire/downloader.c @@ -18,6 +18,8 @@ # # #############################################################################*/ +#include + #include #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(); }