X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ffs%2Ftest_fs_download.c;h=d645444acdf2a86c8ffe5b2b0efc6939c2fc5fa7;hb=6da7b6a2dc5ec3645d5f8bdbd4ab77d6090b823f;hp=31be6190385212937a0e300aab5d2b321d46c8a4;hpb=b1055e6385d821fa7d328f2b4d63209a41e6167d;p=oweals%2Fgnunet.git diff --git a/src/fs/test_fs_download.c b/src/fs/test_fs_download.c index 31be61903..d645444ac 100644 --- a/src/fs/test_fs_download.c +++ b/src/fs/test_fs_download.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2004, 2005, 2006, 2008, 2009, 2011 Christian Grothoff (and other contributing authors) + Copyright (C) 2004, 2005, 2006, 2008, 2009, 2011, 2012 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -26,9 +26,8 @@ #include "platform.h" #include "gnunet_util_lib.h" -#include "gnunet_arm_service.h" #include "gnunet_fs_service.h" -#include "gnunet_testing_lib-new.h" +#include "gnunet_testing_lib.h" #include /** @@ -46,6 +45,9 @@ */ #define LIFETIME GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 15) +static unsigned int anonymity_level; + +static int indexed; static struct GNUNET_TIME_Absolute start; @@ -55,10 +57,12 @@ static struct GNUNET_FS_DownloadContext *download; static struct GNUNET_FS_PublishContext *publish; -static GNUNET_SCHEDULER_TaskIdentifier timeout_kill; +static struct GNUNET_SCHEDULER_Task * timeout_kill; static char *fn; +static char *fn1; + static int err; @@ -76,7 +80,7 @@ timeout_kill_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) publish = NULL; } GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Timeout downloading file\n"); - timeout_kill = GNUNET_SCHEDULER_NO_TASK; + timeout_kill = NULL; err = 1; } @@ -116,7 +120,7 @@ abort_download_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_free (fn); fn = NULL; GNUNET_SCHEDULER_cancel (timeout_kill); - timeout_kill = GNUNET_SCHEDULER_NO_TASK; + timeout_kill = NULL; } @@ -135,40 +139,49 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event) (unsigned long long) event->value.publish.specifics. progress.offset); break; + case GNUNET_FS_STATUS_PUBLISH_PROGRESS_DIRECTORY: + break; case GNUNET_FS_STATUS_PUBLISH_COMPLETED: fprintf (stdout, "Publishing complete, %llu kb/s.\n", - (unsigned long long) (FILESIZE * 1000LL / + (unsigned long long) (FILESIZE * 1000000LL / (1 + GNUNET_TIME_absolute_get_duration - (start).rel_value) / 1024LL)); - GAUGER ("FS", "Publishing speed (insertion)", - (unsigned long long) (FILESIZE * 1000LL / - (1 + - GNUNET_TIME_absolute_get_duration - (start).rel_value) / 1024LL), "kb/s"); + (start).rel_value_us) / 1024LL)); + GAUGER ("FS", + (GNUNET_YES == indexed) + ? "Publishing speed (indexing)" + : "Publishing speed (insertion)", + (unsigned long long) (FILESIZE * 1000000LL / + (1 + + GNUNET_TIME_absolute_get_duration + (start).rel_value_us) / 1024LL), "kb/s"); fn = GNUNET_DISK_mktemp ("gnunet-download-test-dst"); start = GNUNET_TIME_absolute_get (); download = GNUNET_FS_download_start (fs, event->value.publish.specifics. completed.chk_uri, NULL, fn, NULL, 0, - FILESIZE, 1, GNUNET_FS_DOWNLOAD_OPTION_NONE, + FILESIZE, anonymity_level, + GNUNET_FS_DOWNLOAD_OPTION_NONE, "download", NULL); GNUNET_assert (download != NULL); break; case GNUNET_FS_STATUS_DOWNLOAD_COMPLETED: fprintf (stdout, "Download complete, %llu kb/s.\n", - (unsigned long long) (FILESIZE * 1000LL / + (unsigned long long) (FILESIZE * 1000000LL / (1 + GNUNET_TIME_absolute_get_duration - (start).rel_value) / 1024LL)); - GAUGER ("FS", "Local download speed (inserted)", - (unsigned long long) (FILESIZE * 1000LL / + (start).rel_value_us) / 1024LL)); + GAUGER ("FS", + (GNUNET_YES == indexed) + ? "Local download speed (indexed)" + : "Local download speed (inserted)", + (unsigned long long) (FILESIZE * 1000000LL / (1 + GNUNET_TIME_absolute_get_duration - (start).rel_value) / 1024LL), "kb/s"); + (start).rel_value_us) / 1024LL), "kb/s"); GNUNET_SCHEDULER_add_now (&abort_download_task, NULL); break; case GNUNET_FS_STATUS_DOWNLOAD_PROGRESS: @@ -187,11 +200,13 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event) GNUNET_break (0); GNUNET_SCHEDULER_add_continuation (&abort_publish_task, NULL, GNUNET_SCHEDULER_REASON_PREREQ_DONE); + GNUNET_SCHEDULER_shutdown (); break; case GNUNET_FS_STATUS_DOWNLOAD_ERROR: FPRINTF (stderr, "Error downloading file: %s\n", event->value.download.specifics.error.message); GNUNET_SCHEDULER_add_now (&abort_download_task, NULL); + GNUNET_SCHEDULER_shutdown (); break; case GNUNET_FS_STATUS_DOWNLOAD_ACTIVE: case GNUNET_FS_STATUS_DOWNLOAD_INACTIVE: @@ -233,8 +248,10 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event) static void run (void *cls, - const struct GNUNET_CONFIGURATION_Handle *cfg) + const struct GNUNET_CONFIGURATION_Handle *cfg, + struct GNUNET_TESTING_Peer *peer) { + const char *binary_name = cls; const char *keywords[] = { "down_foo", "down_bar", @@ -246,7 +263,14 @@ run (void *cls, size_t i; struct GNUNET_FS_BlockOptions bo; - fs = GNUNET_FS_start (cfg, "test-fs-download", &progress_cb, NULL, + if (GNUNET_YES == + GNUNET_CONFIGURATION_get_value_yesno (cfg, + "download-test", + "USE_STREAM")) + anonymity_level = 0; + else + anonymity_level = 1; + fs = GNUNET_FS_start (cfg, binary_name, &progress_cb, NULL, GNUNET_FS_FLAGS_NONE, GNUNET_FS_OPTIONS_END); GNUNET_assert (NULL != fs); buf = GNUNET_malloc (FILESIZE); @@ -255,12 +279,34 @@ run (void *cls, meta = GNUNET_CONTAINER_meta_data_create (); kuri = GNUNET_FS_uri_ksk_create_from_args (2, keywords); bo.content_priority = 42; - bo.anonymity_level = 1; + bo.anonymity_level = anonymity_level; bo.replication_level = 0; bo.expiration_time = GNUNET_TIME_relative_to_absolute (LIFETIME); - fi = GNUNET_FS_file_information_create_from_data (fs, "publish-context", - FILESIZE, buf, kuri, meta, - GNUNET_NO, &bo); + + if (GNUNET_YES == + GNUNET_CONFIGURATION_get_value_yesno (cfg, + "download-test", + "USE_INDEX")) + { + fn1 = GNUNET_DISK_mktemp ("gnunet-download-indexed-test"); + GNUNET_assert (FILESIZE == + GNUNET_DISK_fn_write (fn1, buf, FILESIZE, + GNUNET_DISK_PERM_USER_READ | + GNUNET_DISK_PERM_USER_WRITE)); + GNUNET_free (buf); + fi = GNUNET_FS_file_information_create_from_file (fs, "publish-context", fn1, + kuri, meta, GNUNET_YES, + &bo); + indexed = GNUNET_YES; + } + else + { + fi = GNUNET_FS_file_information_create_from_data (fs, "publish-context", + FILESIZE, buf, kuri, meta, + GNUNET_NO, &bo); + /* note: buf will be free'd as part of 'fi' now */ + indexed = GNUNET_NO; + } GNUNET_FS_uri_destroy (kuri); GNUNET_CONTAINER_meta_data_destroy (meta); GNUNET_assert (NULL != fi); @@ -277,10 +323,30 @@ run (void *cls, int main (int argc, char *argv[]) { - if (0 != GNUNET_TESTING_peer_run ("test-fs-download", - "test_fs_download_data.conf", - &run, NULL)) + const char *binary_name; + const char *config_name; + + binary_name = "test-fs-download"; + config_name = "test_fs_download_data.conf"; + if (NULL != strstr (argv[0], "indexed")) + { + binary_name = "test-fs-download-indexed"; + config_name = "test_fs_download_indexed.conf"; + } + if (NULL != strstr (argv[0], "cadet")) + { + binary_name = "test-fs-download-cadet"; + config_name = "test_fs_download_cadet.conf"; + } + if (0 != GNUNET_TESTING_peer_run (binary_name, + config_name, + &run, (void *) binary_name)) return 1; + if (NULL != fn1) + { + UNLINK (fn1); + GNUNET_free (fn1); + } return err; }