X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ffs%2Ftest_fs_directory.c;h=95225d7c0ad59bbce0681f514eb91c711b0ba01a;hb=a900b29ddaa9ea46c731b054b5e3ef3e725b95a8;hp=d643e6ed9799a5ee04a233c60919a33b4bbd68fa;hpb=9a10e9c06a3b08c8ab73edb7d2093a6d452ecc05;p=oweals%2Fgnunet.git diff --git a/src/fs/test_fs_directory.c b/src/fs/test_fs_directory.c index d643e6ed9..95225d7c0 100644 --- a/src/fs/test_fs_directory.c +++ b/src/fs/test_fs_directory.c @@ -4,7 +4,7 @@ GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, or (at your + by the Free Software Foundation; either version 3, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but @@ -28,7 +28,7 @@ #include #include "gnunet_util_lib.h" #include "gnunet_fs_service.h" -#include "fs.h" +#include "fs_api.h" #define ABORT() { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); return 1; } @@ -41,34 +41,33 @@ struct PCLS }; static void -processor (void *cls, - const char *filename, - const struct GNUNET_FS_Uri *uri, - const struct GNUNET_CONTAINER_MetaData *md, - size_t length, - const void *data) +processor (void *cls, const char *filename, const struct GNUNET_FS_Uri *uri, + const struct GNUNET_CONTAINER_MetaData *md, size_t length, + const void *data) { struct PCLS *p = cls; int i; + if (NULL == uri) + return; /* ignore directory's meta data */ for (i = 0; i < p->max; i++) + { + if (GNUNET_CONTAINER_meta_data_test_equal (p->md[i], md) && + GNUNET_FS_uri_test_equal (p->uri[i], uri)) { - if (GNUNET_CONTAINER_meta_data_test_equal (p->md[i], - md) && - GNUNET_FS_uri_test_equal (p->uri[i], uri)) - { - p->pos++; - return; - } + p->pos++; + return; } - fprintf (stderr, "Error at %s:%d\n", __FILE__, __LINE__); + } + FPRINTF (stderr, "Error at %s:%d\n", __FILE__, __LINE__); } static int testDirectory (unsigned int i) { + struct GNUNET_FS_DirectoryBuilder *db; char *data; - unsigned long long dlen; + size_t dlen; struct GNUNET_FS_Uri **uris; struct GNUNET_CONTAINER_MetaData **mds; struct GNUNET_CONTAINER_MetaData *meta; @@ -79,86 +78,99 @@ testDirectory (unsigned int i) char uri[512]; char txt[128]; int ret = 0; + struct GNUNET_TIME_Absolute start; + const char *s; cls.max = i; - uris = GNUNET_malloc (sizeof (struct GNUNET_FS_Uri*) * i); - mds = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_MetaData*) * i); + uris = GNUNET_malloc (sizeof (struct GNUNET_FS_Uri *) * i); + mds = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_MetaData *) * i); + meta = GNUNET_CONTAINER_meta_data_create (); + GNUNET_CONTAINER_meta_data_insert (meta, "", EXTRACTOR_METATYPE_TITLE, + EXTRACTOR_METAFORMAT_UTF8, "text/plain", + "A title", strlen ("A title") + 1); + GNUNET_CONTAINER_meta_data_insert (meta, "", + EXTRACTOR_METATYPE_AUTHOR_NAME, + EXTRACTOR_METAFORMAT_UTF8, "text/plain", + "An author", strlen ("An author") + 1); for (p = 0; p < i; p++) + { + mds[p] = GNUNET_CONTAINER_meta_data_create (); + for (q = 0; q <= p; q++) { - mds[p] = GNUNET_CONTAINER_meta_data_create (); - for (q = 0; q <= p; q++) - { - GNUNET_snprintf (txt, sizeof(txt), "%u -- %u\n", p, q); - GNUNET_CONTAINER_meta_data_insert (mds[p], - q % - EXTRACTOR_getHighestKeywordTypeNumber - (), txt); - } - GNUNET_snprintf (uri, - sizeof(uri), - "gnunet://ecrs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.%u", - p); - uris[p] = GNUNET_FS_uri_parse (uri, &emsg); - if (uris[p] == NULL) - { - GNUNET_CONTAINER_meta_data_destroy (mds[p]); - while (--p > 0) - { - GNUNET_CONTAINER_meta_data_destroy (mds[p]); - GNUNET_FS_uri_destroy (uris[p]); - } - GNUNET_free (mds); - GNUNET_free (uris); - ABORT (); /* error in testcase */ - } + GNUNET_snprintf (txt, sizeof (txt), "%u -- %u\n", p, q); + GNUNET_CONTAINER_meta_data_insert (mds[p], "", + q % EXTRACTOR_metatype_get_max (), + EXTRACTOR_METAFORMAT_UTF8, + "text/plain", txt, strlen (txt) + 1); } - meta = GNUNET_CONTAINER_meta_data_create (); - GNUNET_CONTAINER_meta_data_insert (meta, EXTRACTOR_TITLE, "A title"); - GNUNET_CONTAINER_meta_data_insert (meta, EXTRACTOR_AUTHOR, "An author"); - if (GNUNET_OK != - GNUNET_FS_directory_create (&dlen, &data, i, uris, mds, meta)) + GNUNET_snprintf (uri, sizeof (uri), + "gnunet://fs/chk/C282GG70GKK41O4551011DO413KFBVTVMQG1OG30I0K4045N0G41HAPB82G680A02JRVVFO8URVRU2F159011DO41000000022RG820.RNVVVVOOLCLK065B5D04HTNVNSIB2AI022RG8200HSLK1CO1000ATQ98824DMA2032LIMG50CG0K057NVUVG200000H000004400000.%u", + p); + emsg = NULL; + uris[p] = GNUNET_FS_uri_parse (uri, &emsg); + if (uris[p] == NULL) { - GNUNET_CONTAINER_meta_data_destroy (meta); - for (p = 0; p < i; p++) - { - GNUNET_CONTAINER_meta_data_destroy (mds[p]); - GNUNET_FS_uri_destroy (uris[p]); - } - GNUNET_free (uris); + GNUNET_CONTAINER_meta_data_destroy (mds[p]); + while (--p > 0) + { + GNUNET_CONTAINER_meta_data_destroy (mds[p]); + GNUNET_FS_uri_destroy (uris[p]); + } GNUNET_free (mds); - ABORT (); + GNUNET_free (uris); + GNUNET_free (emsg); + GNUNET_CONTAINER_meta_data_destroy (meta); + ABORT (); /* error in testcase */ } - cls.pos = 0; - cls.uri = uris; - cls.md = mds; - GNUNET_FS_directory_list_contents (dlen, data, 0, - &processor, &cls); - GNUNET_assert (cls.pos == i); + GNUNET_assert (emsg == NULL); + } + start = GNUNET_TIME_absolute_get (); + db = GNUNET_FS_directory_builder_create (meta); + for (p = 0; p < i; p++) + GNUNET_FS_directory_builder_add (db, uris[p], mds[p], NULL); + GNUNET_FS_directory_builder_finish (db, &dlen, (void **) &data); + s = GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration + (start), + GNUNET_YES); + FPRINTF (stdout, + "Creating directory with %u entires and total size %llu took %s\n", + i, (unsigned long long) dlen, s); + if (i < 100) + { + cls.pos = 0; + cls.uri = uris; + cls.md = mds; + GNUNET_FS_directory_list_contents (dlen, data, 0, &processor, &cls); + GNUNET_assert (cls.pos == i); + } GNUNET_free (data); GNUNET_CONTAINER_meta_data_destroy (meta); for (p = 0; p < i; p++) - { - GNUNET_CONTAINER_meta_data_destroy (mds[p]); - GNUNET_FS_uri_destroy (uris[p]); - } + { + GNUNET_CONTAINER_meta_data_destroy (mds[p]); + GNUNET_FS_uri_destroy (uris[p]); + } GNUNET_free (uris); GNUNET_free (mds); return ret; } + int main (int argc, char *argv[]) { int failureCount = 0; int i; - for (i = 17; i < 2000; i *= 2) - { - fprintf (stderr, "."); - failureCount += testDirectory (i); - } - fprintf (stderr, "\n"); - + GNUNET_log_setup ("test_fs_directory", +#if VERBOSE + "DEBUG", +#else + "WARNING", +#endif + NULL); + for (i = 17; i < 1000; i *= 2) + failureCount += testDirectory (i); if (failureCount != 0) return 1; return 0;