/*
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
*/
#include "platform.h"
-#include "gnunet_common.h"
-#include "gnunet_container_lib.h"
+#include "gnunet_util_lib.h"
#define ABORT(m) { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); if (m != NULL) GNUNET_CONTAINER_meta_data_destroy(m); return 1; }
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, "<test>", 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, "<test>",
+ 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, "<test>", 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, "<test>", 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, "<test>",
+ 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;
}
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, "<test>",
+ 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;
m = GNUNET_CONTAINER_meta_data_create ();
if (GNUNET_OK !=
- GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_UNKNOWN, "link"))
+ GNUNET_CONTAINER_meta_data_insert (m, "<test>",
+ 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, "<test>",
+ 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);
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, "<test>",
+ EXTRACTOR_METATYPE_UNKNOWN,
+ EXTRACTOR_METAFORMAT_UTF8, "text/plain",
+ "TestTitle", strlen ("TestTitle") + 1);
+ GNUNET_CONTAINER_meta_data_insert (meta2, "<test>",
+ 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;
}
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 */