X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ffs%2Ftest_fs_namespace.c;h=b8325d8d86cc6cf4258899950bf02db1571b056d;hb=0d8487a744066dce7d097fb91ae0f965033c79ea;hp=61f304487ecae93100d99028ee3630d1aabcd7a8;hpb=046e90172489ca6091346685bf444a037b1187ee;p=oweals%2Fgnunet.git diff --git a/src/fs/test_fs_namespace.c b/src/fs/test_fs_namespace.c index 61f304487..b8325d8d8 100644 --- a/src/fs/test_fs_namespace.c +++ b/src/fs/test_fs_namespace.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2005, 2006, 2008, 2009 Christian Grothoff (and other contributing authors) + Copyright (C) 2005-2013 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -29,7 +29,7 @@ #include "gnunet_fs_service.h" -static struct GNUNET_HashCode nsid; +static struct GNUNET_CRYPTO_EcdsaPublicKey nsid; static struct GNUNET_FS_Uri *sks_expect_uri; @@ -41,117 +41,72 @@ static struct GNUNET_FS_SearchContext *sks_search; static struct GNUNET_FS_SearchContext *ksk_search; -static GNUNET_SCHEDULER_TaskIdentifier kill_task; - -static GNUNET_SCHEDULER_TaskIdentifier kill_ncc_task; - -struct GNUNET_FS_NamespaceCreationContext *ncc; +static struct GNUNET_SCHEDULER_Task * kill_task; static int update_started; static int err; -static int phase; - -const struct GNUNET_CONFIGURATION_Handle *config; - -static void ns_created (void *cls, struct GNUNET_FS_Namespace *ns, const char *emsg); - -static void do_ncc_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc); - static void -next_phase () +abort_ksk_search_task (void *cls) { - switch (phase) + if (ksk_search != NULL) { - case 0: - phase += 1; - FPRINTF (stderr, "%s", "Testing asynchronous namespace creation\n"); - ncc = GNUNET_FS_namespace_create_start (fs, "testNamespace", ns_created, NULL); - if (NULL == ncc) + GNUNET_FS_search_stop (ksk_search); + ksk_search = NULL; + if (sks_search == NULL) { - FPRINTF (stderr, "%s", "Failed to start asynchronous namespace creation\n"); - err = 1; - next_phase (); - return; + GNUNET_FS_stop (fs); + if (NULL != kill_task) + GNUNET_SCHEDULER_cancel (kill_task); } - kill_ncc_task = - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, &do_ncc_timeout, - NULL); - break; - case 1: - FPRINTF (stderr, "%s", "Shutting down FS\n"); - GNUNET_FS_stop (fs); - if (GNUNET_SCHEDULER_NO_TASK != kill_task) - GNUNET_SCHEDULER_cancel (kill_task); - kill_task = GNUNET_SCHEDULER_NO_TASK; } } -static void -abort_ksk_search_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - if (NULL == ksk_search) - return; - FPRINTF (stderr, "%s", "Stopping KSK search\n"); - GNUNET_FS_search_stop (ksk_search); - ksk_search = NULL; - if (sks_search == NULL) - next_phase (); -} - static void -abort_sks_search_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +abort_sks_search_task (void *cls) { - struct GNUNET_FS_Namespace *ns; - if (sks_search == NULL) return; - FPRINTF (stderr, "%s", "Stopping SKS search\n"); GNUNET_FS_search_stop (sks_search); sks_search = NULL; - ns = GNUNET_FS_namespace_create (fs, "testNamespace"); - GNUNET_assert (NULL != ns); - GNUNET_assert (GNUNET_OK == GNUNET_FS_namespace_delete (ns, GNUNET_YES)); if (ksk_search == NULL) - next_phase (); + { + GNUNET_FS_stop (fs); + if (NULL != kill_task) + GNUNET_SCHEDULER_cancel (kill_task); + } } static void -do_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +do_timeout (void *cls) { + err = 1; FPRINTF (stderr, "%s", "Operation timed out\n"); - kill_task = GNUNET_SCHEDULER_NO_TASK; - abort_sks_search_task (NULL, tc); - abort_ksk_search_task (NULL, tc); + kill_task = NULL; + abort_sks_search_task (NULL); + abort_ksk_search_task (NULL); } static void * progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event) { - char *got; switch (event->status) { case GNUNET_FS_STATUS_SEARCH_RESULT: - got = GNUNET_FS_uri_to_string (event->value.search.specifics.result.uri); - FPRINTF (stderr, "Got a search result `%s'\n", got); if (sks_search == event->value.search.sc) { if (!GNUNET_FS_uri_test_equal (sks_expect_uri, event->value.search.specifics.result.uri)) { - char *expected; - expected = GNUNET_FS_uri_to_string (sks_expect_uri); - FPRINTF (stderr, "Wrong result for sks search! Expected:\n%s\nGot:\n%s\n", expected, got); - GNUNET_free (expected); + FPRINTF (stderr, "%s", "Wrong result for sks search!\n"); err = 1; } /* give system 1ms to initiate update search! */ - FPRINTF (stderr, "scheduling `%s'\n", "abort_sks_search_task"); GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS, &abort_sks_search_task, NULL); } @@ -160,37 +115,28 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event) if (!GNUNET_FS_uri_test_equal (ksk_expect_uri, event->value.search.specifics.result.uri)) { - char *expected; - expected = GNUNET_FS_uri_to_string (ksk_expect_uri); - FPRINTF (stderr, "Wrong result for ksk search! Expected:\n%s\nGot:\n%s\n", expected, got); - GNUNET_free (expected); + FPRINTF (stderr, "%s", "Wrong result for ksk search!\n"); err = 1; } - FPRINTF (stderr, "scheduling `%s'\n", "abort_ksk_search_task"); - GNUNET_SCHEDULER_add_continuation (&abort_ksk_search_task, NULL, - GNUNET_SCHEDULER_REASON_PREREQ_DONE); + GNUNET_SCHEDULER_add_now (&abort_ksk_search_task, NULL); } else { - FPRINTF (stderr, "Unexpected search result `%s' received!\n", got); + FPRINTF (stderr, "%s", "Unexpected search result received!\n"); GNUNET_break (0); } - GNUNET_free (got); break; case GNUNET_FS_STATUS_SEARCH_ERROR: FPRINTF (stderr, "Error searching file: %s\n", event->value.search.specifics.error.message); if (sks_search == event->value.search.sc) - GNUNET_SCHEDULER_add_continuation (&abort_sks_search_task, NULL, - GNUNET_SCHEDULER_REASON_PREREQ_DONE); + GNUNET_SCHEDULER_add_now (&abort_sks_search_task, NULL); else if (ksk_search == event->value.search.sc) - GNUNET_SCHEDULER_add_continuation (&abort_ksk_search_task, NULL, - GNUNET_SCHEDULER_REASON_PREREQ_DONE); + GNUNET_SCHEDULER_add_now (&abort_ksk_search_task, NULL); else GNUNET_break (0); break; case GNUNET_FS_STATUS_SEARCH_START: - FPRINTF (stderr, "Search %s started\n", event->value.search.pctx); GNUNET_assert ((NULL == event->value.search.cctx) || (0 == strcmp ("sks_search", event->value.search.cctx)) || (0 == strcmp ("ksk_search", event->value.search.cctx))); @@ -202,10 +148,8 @@ progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event) GNUNET_assert (1 == event->value.search.anonymity); break; case GNUNET_FS_STATUS_SEARCH_RESULT_STOPPED: - FPRINTF (stderr, "%s", "Search result stopped\n"); return NULL; case GNUNET_FS_STATUS_SEARCH_STOPPED: - FPRINTF (stderr, "%s", "Search stopped\n"); return NULL; default: FPRINTF (stderr, "Unexpected event: %d\n", event->status); @@ -221,18 +165,20 @@ publish_cont (void *cls, const struct GNUNET_FS_Uri *ksk_uri, const char *emsg) char *msg; struct GNUNET_FS_Uri *sks_uri; char sbuf[1024]; - struct GNUNET_CRYPTO_HashAsciiEncoded enc; + char buf[1024]; + char *ret; if (NULL != emsg) { - FPRINTF (stderr, "Error publishing ksk: %s\n", emsg); + FPRINTF (stderr, "Error publishing: %s\n", emsg); err = 1; GNUNET_FS_stop (fs); return; } - FPRINTF (stderr, "%s", "Published ksk\n"); - GNUNET_CRYPTO_hash_to_enc (&nsid, &enc); - GNUNET_snprintf (sbuf, sizeof (sbuf), "gnunet://fs/sks/%s/this", &enc); + ret = GNUNET_STRINGS_data_to_string (&nsid, sizeof (nsid), buf, sizeof (buf)); + GNUNET_assert (NULL != ret); + ret[0] = '\0'; + GNUNET_snprintf (sbuf, sizeof (sbuf), "gnunet://fs/sks/%s/this", buf); sks_uri = GNUNET_FS_uri_parse (sbuf, &msg); if (NULL == sks_uri) { @@ -242,7 +188,6 @@ publish_cont (void *cls, const struct GNUNET_FS_Uri *ksk_uri, const char *emsg) GNUNET_free_non_null (msg); return; } - FPRINTF (stderr, "%s", "Starting searches\n"); ksk_search = GNUNET_FS_search_start (fs, ksk_uri, 1, GNUNET_FS_SEARCH_OPTION_NONE, "ksk_search"); @@ -263,12 +208,11 @@ sks_cont (void *cls, const struct GNUNET_FS_Uri *uri, const char *emsg) if (NULL == uri) { - fprintf (stderr, "Error publishing sks: %s\n", emsg); + fprintf (stderr, "Error publishing: %s\n", emsg); err = 1; GNUNET_FS_stop (fs); return; } - FPRINTF (stderr, "%s", "Published sks\n"); meta = GNUNET_CONTAINER_meta_data_create (); msg = NULL; ksk_uri = GNUNET_FS_uri_parse ("gnunet://fs/ksk/ns-search", &msg); @@ -290,66 +234,42 @@ static void adv_cont (void *cls, const struct GNUNET_FS_Uri *uri, const char *emsg) { struct GNUNET_CONTAINER_MetaData *meta; - struct GNUNET_FS_Namespace *ns; + struct GNUNET_CRYPTO_EcdsaPrivateKey *ns; struct GNUNET_FS_BlockOptions bo; if (NULL != emsg) { - FPRINTF (stderr, "Error advertising: %s\n", emsg); + FPRINTF (stderr, "Error publishing: %s\n", emsg); err = 1; GNUNET_FS_stop (fs); return; } - FPRINTF (stderr, "%s", "Created an advertising\n"); - ns = GNUNET_FS_namespace_create (fs, "testNamespace"); - GNUNET_assert (NULL != ns); + ns = GNUNET_CRYPTO_ecdsa_key_create (); meta = GNUNET_CONTAINER_meta_data_create (); - GNUNET_assert (NULL == emsg); sks_expect_uri = GNUNET_FS_uri_dup (uri); bo.content_priority = 1; bo.anonymity_level = 1; bo.replication_level = 0; bo.expiration_time = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_MINUTES); - GNUNET_FS_publish_sks (fs, ns, "this", "next", meta, uri, /* FIXME: this is non-sense (use CHK URI!?) */ + GNUNET_CRYPTO_ecdsa_key_get_public (ns, &nsid); + GNUNET_FS_publish_sks (fs, ns, "this", "next", meta, uri, &bo, GNUNET_FS_PUBLISH_OPTION_NONE, &sks_cont, NULL); GNUNET_CONTAINER_meta_data_destroy (meta); - GNUNET_FS_namespace_delete (ns, GNUNET_NO); + GNUNET_free (ns); } static void -ns_iterator (void *cls, const char *name, const struct GNUNET_HashCode * id) -{ - int *ok = cls; - - FPRINTF (stderr, "Namespace in the list: %s\n", name); - if (0 != strcmp (name, "testNamespace")) - return; - *ok = GNUNET_YES; - nsid = *id; -} - -static void -testCreatedNamespace (struct GNUNET_FS_Namespace *ns) +testNamespace () { + struct GNUNET_CRYPTO_EcdsaPrivateKey *ns; struct GNUNET_FS_BlockOptions bo; struct GNUNET_CONTAINER_MetaData *meta; struct GNUNET_FS_Uri *ksk_uri; - int ok; + struct GNUNET_FS_Uri *sks_uri; - FPRINTF (stderr, "%s", "Listing namespaces\n"); - ok = GNUNET_NO; - GNUNET_FS_namespace_list (fs, &ns_iterator, &ok); - if (GNUNET_NO == ok) - { - FPRINTF (stderr, "%s", "namespace_list failed to find namespace!\n"); - GNUNET_FS_namespace_delete (ns, GNUNET_YES); - GNUNET_FS_stop (fs); - err = 1; - return; - } - FPRINTF (stderr, "%s", "Creating an advertising\n"); + ns = GNUNET_CRYPTO_ecdsa_key_create (); meta = GNUNET_CONTAINER_meta_data_create (); ksk_uri = GNUNET_FS_uri_parse ("gnunet://fs/ksk/testnsa", NULL); bo.content_priority = 1; @@ -357,67 +277,28 @@ testCreatedNamespace (struct GNUNET_FS_Namespace *ns) bo.replication_level = 0; bo.expiration_time = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_MINUTES); - GNUNET_FS_namespace_advertise (fs, ksk_uri, ns, meta, &bo, "root", &adv_cont, - NULL); - GNUNET_FS_uri_destroy (ksk_uri); - GNUNET_FS_namespace_delete (ns, GNUNET_NO); - GNUNET_CONTAINER_meta_data_destroy (meta); -} - -static void -do_ncc_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - FPRINTF (stderr, "%s", "Asynchronous NS creation timed out\n"); - kill_ncc_task = GNUNET_SCHEDULER_NO_TASK; - if (NULL == ncc) - return; - GNUNET_FS_namespace_create_stop (ncc); - ncc = NULL; - err = 1; -} - -static void -ns_created (void *cls, struct GNUNET_FS_Namespace *ns, const char *emsg) -{ - if (GNUNET_SCHEDULER_NO_TASK != kill_ncc_task) - GNUNET_SCHEDULER_cancel (kill_ncc_task); - kill_ncc_task = GNUNET_SCHEDULER_NO_TASK; - if (NULL == ns) - { - FPRINTF (stderr, "Asynchronous NS creation failed: %s\n", emsg); - err = 1; - return; - } - - FPRINTF (stderr, "%s", "Namespace created asynchronously\n"); - testCreatedNamespace (ns); -} - -static void -testNamespace () -{ - struct GNUNET_FS_Namespace *ns; - - FPRINTF (stderr, "%s", "Testing synchronous namespace creation\n"); - ns = GNUNET_FS_namespace_create (fs, "testNamespace"); - GNUNET_assert (NULL != ns); - testCreatedNamespace (ns); - + sks_uri = GNUNET_FS_uri_sks_create (&nsid, "root"); + GNUNET_FS_publish_ksk (fs, + ksk_uri, meta, sks_uri, + &bo, GNUNET_FS_PUBLISH_OPTION_NONE, + &adv_cont, NULL); + GNUNET_FS_uri_destroy (sks_uri); kill_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MINUTES, &do_timeout, NULL); + GNUNET_FS_uri_destroy (ksk_uri); + GNUNET_CONTAINER_meta_data_destroy (meta); + GNUNET_free (ns); } static void -run (void *cls, +run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg, struct GNUNET_TESTING_Peer *peer) { - config = cfg; fs = GNUNET_FS_start (cfg, "test-fs-namespace", &progress_cb, NULL, GNUNET_FS_FLAGS_NONE, GNUNET_FS_OPTIONS_END); - phase = 0; testNamespace (); }