X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Ftest_container_meta_data.c;h=fe1dd79c10e4d653e088abda8c7a01d3adc4b88e;hb=705966df17b43ca8f1481834a80d19cd7cad874b;hp=17ef79161e037ad1bf33f34c1f3779784159c1c8;hpb=0a217a8df1657b4334b55b0e4a6c7837a8dbcfd9;p=oweals%2Fgnunet.git diff --git a/src/util/test_container_meta_data.c b/src/util/test_container_meta_data.c index 17ef79161..fe1dd79c1 100644 --- a/src/util/test_container_meta_data.c +++ b/src/util/test_container_meta_data.c @@ -1,10 +1,10 @@ /* This file is part of GNUnet. - (C) 2003, 2004, 2006, 2009 Christian Grothoff (and other contributing authors) + (C) 2003, 2004, 2006, 2009, 2010 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 - 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 @@ -34,85 +34,88 @@ static int testMeta (int i) { struct GNUNET_CONTAINER_MetaData *m; - char *val; + char val[256]; + char *sval; int j; unsigned int size; m = GNUNET_CONTAINER_meta_data_create (); if (GNUNET_OK != - GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_TITLE, "TestTitle")) + GNUNET_CONTAINER_meta_data_insert (m, "", EXTRACTOR_METATYPE_TITLE, + EXTRACTOR_METAFORMAT_UTF8, + "text/plain", "TestTitle", + strlen ("TestTitle") + 1)) ABORT (m); if (GNUNET_OK != - GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_AUTHOR, "TestTitle")) + GNUNET_CONTAINER_meta_data_insert (m, "", + EXTRACTOR_METATYPE_AUTHOR_NAME, + EXTRACTOR_METAFORMAT_UTF8, + "text/plain", "TestTitle", + strlen ("TestTitle") + 1)) ABORT (m); - if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_TITLE, "TestTitle")) /* dup! */ + if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "", EXTRACTOR_METATYPE_TITLE, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */ ABORT (m); - if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_AUTHOR, "TestTitle")) /* dup! */ + if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "", EXTRACTOR_METATYPE_AUTHOR_NAME, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */ ABORT (m); - if (2 != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL)) + if (2 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL)) ABORT (m); if (GNUNET_OK != - GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_AUTHOR, "TestTitle")) + GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME, + "TestTitle", strlen ("TestTitle") + 1)) ABORT (m); - if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_AUTHOR, "TestTitle")) /* already gone */ + if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */ ABORT (m); - if (1 != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL)) + if (1 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL)) ABORT (m); if (GNUNET_OK != - GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_TITLE, "TestTitle")) + GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE, + "TestTitle", strlen ("TestTitle") + 1)) ABORT (m); - if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_TITLE, "TestTitle")) /* already gone */ + if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */ ABORT (m); - if (0 != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL)) + if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL)) ABORT (m); - val = GNUNET_malloc (256); for (j = 0; j < i; j++) - { - GNUNET_snprintf (val, 256, "%s.%d", - "A teststring that should compress well.", j); - if (GNUNET_OK != - GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_UNKNOWN, val)) - { - GNUNET_free (val); - ABORT (m); - } - } - GNUNET_free (val); - if (i != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL)) + { + GNUNET_snprintf (val, sizeof (val), "%s.%d", + "A teststring that should compress well.", j); + if (GNUNET_OK != + GNUNET_CONTAINER_meta_data_insert (m, "", + EXTRACTOR_METATYPE_UNKNOWN, + EXTRACTOR_METAFORMAT_UTF8, + "text/plain", val, strlen (val) + 1)) + ABORT (m); + } + if (i != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL)) ABORT (m); - size = - GNUNET_CONTAINER_meta_data_get_serialized_size (m, - GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL); - val = GNUNET_malloc (size); - if (size != GNUNET_CONTAINER_meta_data_serialize (m, val, size, - GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL)) - { - GNUNET_free (val); - ABORT (m); - } + size = GNUNET_CONTAINER_meta_data_get_serialized_size (m); + sval = NULL; + if (size != + GNUNET_CONTAINER_meta_data_serialize (m, &sval, size, + GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL)) + { + GNUNET_free_non_null (sval); + ABORT (m); + } GNUNET_CONTAINER_meta_data_destroy (m); - m = GNUNET_CONTAINER_meta_data_deserialize (val, size); - GNUNET_free (val); + m = GNUNET_CONTAINER_meta_data_deserialize (sval, size); + GNUNET_free (sval); if (m == NULL) ABORT (m); - val = GNUNET_malloc (256); for (j = 0; j < i; j++) - { - GNUNET_snprintf (val, 256, "%s.%d", - "A teststring that should compress well.", j); - if (GNUNET_OK != - GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_UNKNOWN, val)) - { - GNUNET_free (val); - ABORT (m); - } - } - GNUNET_free (val); - if (0 != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL)) + { + GNUNET_snprintf (val, sizeof (val), "%s.%d", + "A teststring that should compress well.", j); + if (GNUNET_OK != + GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_UNKNOWN, val, + strlen (val) + 1)) { ABORT (m); } + } + if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL)) + ABORT (m); GNUNET_CONTAINER_meta_data_destroy (m); return 0; } @@ -128,24 +131,22 @@ testMetaMore (int i) meta = GNUNET_CONTAINER_meta_data_create (); for (q = 0; q <= i; q++) - { - GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q); - GNUNET_CONTAINER_meta_data_insert (meta, - q % - EXTRACTOR_getHighestKeywordTypeNumber - (), txt); - } - size = - GNUNET_CONTAINER_meta_data_get_serialized_size (meta, - GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL); + { + GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q); + GNUNET_CONTAINER_meta_data_insert (meta, "", + q % EXTRACTOR_metatype_get_max (), + EXTRACTOR_METAFORMAT_UTF8, "text/plain", + txt, strlen (txt) + 1); + } + size = GNUNET_CONTAINER_meta_data_get_serialized_size (meta); data = GNUNET_malloc (size * 4); - if (size != GNUNET_CONTAINER_meta_data_serialize (meta, - data, size * 4, - GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL)) - { - GNUNET_free (data); - ABORT (meta); - } + if (size != + GNUNET_CONTAINER_meta_data_serialize (meta, &data, size * 4, + GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL)) + { + GNUNET_free (data); + ABORT (meta); + } GNUNET_CONTAINER_meta_data_destroy (meta); GNUNET_free (data); return 0; @@ -160,22 +161,23 @@ testMetaLink () m = GNUNET_CONTAINER_meta_data_create (); if (GNUNET_OK != - GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_UNKNOWN, "link")) + GNUNET_CONTAINER_meta_data_insert (m, "", + EXTRACTOR_METATYPE_UNKNOWN, + EXTRACTOR_METAFORMAT_UTF8, + "text/plain", "link", + strlen ("link") + 1)) ABORT (m); if (GNUNET_OK != - GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_FILENAME, - "lib-link.m4")) + GNUNET_CONTAINER_meta_data_insert (m, "", + EXTRACTOR_METATYPE_FILENAME, + EXTRACTOR_METAFORMAT_UTF8, + "text/plain", "lib-link.m4", + strlen ("lib-link.m4") + 1)) ABORT (m); + val = NULL; size = - GNUNET_CONTAINER_meta_data_get_serialized_size (m, - GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL); - val = GNUNET_malloc (size); - if (size != GNUNET_CONTAINER_meta_data_serialize (m, val, size, - GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL)) - { - GNUNET_free (val); - ABORT (m); - } + GNUNET_CONTAINER_meta_data_serialize (m, &val, (size_t) - 1, + GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL); GNUNET_CONTAINER_meta_data_destroy (m); m = GNUNET_CONTAINER_meta_data_deserialize (val, size); GNUNET_free (val); @@ -185,57 +187,136 @@ testMetaLink () return 0; } - -static int -testThumbnail () +int +check () { - struct GNUNET_CONTAINER_MetaData *m; - struct GNUNET_CONTAINER_MetaData *d; - EXTRACTOR_ExtractorList *ex; + struct GNUNET_CONTAINER_MetaData *meta; + struct GNUNET_CONTAINER_MetaData *meta2; + int q; + int i = 100; + char txt[128]; + char *str; unsigned char *thumb; - size_t size; - char *date; - ex = EXTRACTOR_loadConfigLibraries (NULL, "libextractor_thumbnail"); - if (ex == NULL) - { - fprintf (stderr, - "Test incomplete, have no thumbnail extractor available.\n"); - return 0; /* can not test, no thumbnailer */ - } - ex = EXTRACTOR_loadConfigLibraries (ex, "libextractor_mime"); - m = GNUNET_CONTAINER_meta_data_create (); - if (3 != GNUNET_CONTAINER_meta_data_extract_from_file (m, - "test_container_meta_data_image.jpg", - ex)) - { - GNUNET_break (0); - EXTRACTOR_removeAll (ex); - GNUNET_CONTAINER_meta_data_destroy (m); - return 1; - } - EXTRACTOR_removeAll (ex); - d = GNUNET_CONTAINER_meta_data_duplicate (m); - GNUNET_CONTAINER_meta_data_destroy (m); - size = GNUNET_CONTAINER_meta_data_get_thumbnail (d, &thumb); - if (size == 0) - { - GNUNET_break (0); - GNUNET_CONTAINER_meta_data_destroy (d); - return 1; - } - GNUNET_free (thumb); - GNUNET_CONTAINER_meta_data_add_publication_date (d); - date = GNUNET_CONTAINER_meta_data_get_by_type (d, - EXTRACTOR_PUBLICATION_DATE); - if (date == NULL) - { - GNUNET_break (0); - GNUNET_CONTAINER_meta_data_destroy (d); - return 1; - } - GNUNET_free (date); - GNUNET_CONTAINER_meta_data_destroy (d); + meta = GNUNET_CONTAINER_meta_data_create (); + meta2 = GNUNET_CONTAINER_meta_data_create (); + for (q = 0; q <= i; q++) + { + GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q); + GNUNET_CONTAINER_meta_data_insert (meta, "", + EXTRACTOR_METATYPE_UNKNOWN, + EXTRACTOR_METAFORMAT_UTF8, "text/plain", + "TestTitle", strlen ("TestTitle") + 1); + GNUNET_CONTAINER_meta_data_insert (meta2, "", + EXTRACTOR_METATYPE_UNKNOWN, + EXTRACTOR_METAFORMAT_UTF8, "text/plain", + "TestTitle", strlen ("TestTitle") + 1); + } + + //check meta_data_test_equal + if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2)) + { + GNUNET_CONTAINER_meta_data_destroy (meta2); + ABORT (meta); + } + + //check meta_data_clear + GNUNET_CONTAINER_meta_data_clear (meta2); + if (0 != GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL)) + { + GNUNET_CONTAINER_meta_data_destroy (meta2); + ABORT (meta); + } + // check equal branch in meta_data_test_equal + if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta)) + { + GNUNET_CONTAINER_meta_data_destroy (meta2); + ABORT (meta); + } + // check "count" branch in meta_data_test_equal + if (GNUNET_NO != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2)) + { + GNUNET_CONTAINER_meta_data_destroy (meta2); + ABORT (meta); + } + + // check meta_data_add_publication_date + GNUNET_CONTAINER_meta_data_add_publication_date (meta2); + + // check meta_data_merge + GNUNET_CONTAINER_meta_data_clear (meta2); + GNUNET_CONTAINER_meta_data_merge (meta2, meta); + if (100 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL)) + { + GNUNET_CONTAINER_meta_data_destroy (meta2); + ABORT (meta); + } + + // check meta_data_get_by_type + GNUNET_CONTAINER_meta_data_clear (meta2); + if (NULL != + (str = + GNUNET_CONTAINER_meta_data_get_by_type (meta2, + EXTRACTOR_METATYPE_UNKNOWN))) + { + GNUNET_CONTAINER_meta_data_destroy (meta2); + GNUNET_free (str); + ABORT (meta); + } + + str = + GNUNET_CONTAINER_meta_data_get_by_type (meta, EXTRACTOR_METATYPE_UNKNOWN); + GNUNET_assert (NULL != str); + if (str[0] != 'T') + { + GNUNET_CONTAINER_meta_data_destroy (meta2); + GNUNET_free (str); + ABORT (meta); + } + GNUNET_free (str); + + // check branch + if (NULL != + (str = + GNUNET_CONTAINER_meta_data_get_by_type (meta, + EXTRACTOR_METATYPE_PUBLICATION_DATE))) + { + GNUNET_free (str); + GNUNET_CONTAINER_meta_data_destroy (meta2); + ABORT (meta); + } + + //check meta_data_get_first_by_types + str = + GNUNET_CONTAINER_meta_data_get_first_by_types (meta, + EXTRACTOR_METATYPE_UNKNOWN, + -1); + GNUNET_assert (NULL != str); + if (str[0] != 'T') + { + GNUNET_CONTAINER_meta_data_destroy (meta2); + GNUNET_free (str); + ABORT (meta); + } + GNUNET_free (str); + + //check meta_data_get_thumbnail + if (GNUNET_CONTAINER_meta_data_get_thumbnail (meta, &thumb) != 0) + { + GNUNET_free (thumb); + GNUNET_CONTAINER_meta_data_destroy (meta2); + ABORT (meta); + } + GNUNET_CONTAINER_meta_data_destroy (meta2); + //check meta_data_duplicate + meta2 = GNUNET_CONTAINER_meta_data_duplicate (meta); + if (200 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL)) + { + GNUNET_CONTAINER_meta_data_destroy (meta2); + ABORT (meta); + } + GNUNET_CONTAINER_meta_data_destroy (meta2); + GNUNET_CONTAINER_meta_data_destroy (meta); return 0; } @@ -252,11 +333,15 @@ main (int argc, char *argv[]) for (i = 1; i < 255; i++) failureCount += testMetaMore (i); failureCount += testMetaLink (); - failureCount += testThumbnail (); + + int ret = check (); + + if (ret == 1) + return 1; if (failureCount != 0) return 1; return 0; } -/* end of metatest.c */ +/* end of test_container_meta_data.c */