2 This file is part of GNUnet.
3 Copyright (C) 2003, 2004, 2006, 2009, 2010 GNUnet e.V.
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
22 * @file util/test_container_meta_data.c
23 * @brief Test for container_meta_data.c
24 * @author Christian Grothoff
28 #include "gnunet_util_lib.h"
32 #define ABORT(m) { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); if (m != NULL) GNUNET_CONTAINER_meta_data_destroy(m); return 1; }
37 struct GNUNET_CONTAINER_MetaData *m;
43 m = GNUNET_CONTAINER_meta_data_create ();
45 GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE,
46 EXTRACTOR_METAFORMAT_UTF8,
47 "text/plain", "TestTitle",
48 strlen ("TestTitle") + 1))
51 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
52 EXTRACTOR_METATYPE_AUTHOR_NAME,
53 EXTRACTOR_METAFORMAT_UTF8,
54 "text/plain", "TestTitle",
55 strlen ("TestTitle") + 1))
57 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */
59 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_AUTHOR_NAME, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */
61 if (2 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
64 GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME,
65 "TestTitle", strlen ("TestTitle") + 1))
67 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */
69 if (1 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
72 GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE,
73 "TestTitle", strlen ("TestTitle") + 1))
75 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */
77 if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
79 for (j = 0; j < i; j++)
81 GNUNET_snprintf (val, sizeof (val), "%s.%d",
82 "A teststring that should compress well.", j);
84 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
85 EXTRACTOR_METATYPE_UNKNOWN,
86 EXTRACTOR_METAFORMAT_UTF8,
87 "text/plain", val, strlen (val) + 1))
90 if (i != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
93 size = GNUNET_CONTAINER_meta_data_get_serialized_size (m);
96 GNUNET_CONTAINER_meta_data_serialize (m, &sval, size,
97 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
99 GNUNET_free_non_null (sval);
102 GNUNET_CONTAINER_meta_data_destroy (m);
103 m = GNUNET_CONTAINER_meta_data_deserialize (sval, size);
107 for (j = 0; j < i; j++)
109 GNUNET_snprintf (val, sizeof (val), "%s.%d",
110 "A teststring that should compress well.", j);
112 GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_UNKNOWN, val,
118 if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
120 GNUNET_CONTAINER_meta_data_destroy (m);
127 struct GNUNET_CONTAINER_MetaData *meta;
131 unsigned long long size;
133 meta = GNUNET_CONTAINER_meta_data_create ();
134 for (q = 0; q <= i; q++)
136 GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
137 GNUNET_CONTAINER_meta_data_insert (meta, "<test>",
138 q % EXTRACTOR_metatype_get_max (),
139 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
140 txt, strlen (txt) + 1);
142 size = GNUNET_CONTAINER_meta_data_get_serialized_size (meta);
143 data = GNUNET_malloc (size * 4);
145 GNUNET_CONTAINER_meta_data_serialize (meta, &data, size * 4,
146 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
151 GNUNET_CONTAINER_meta_data_destroy (meta);
159 struct GNUNET_CONTAINER_MetaData *m;
163 m = GNUNET_CONTAINER_meta_data_create ();
165 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
166 EXTRACTOR_METATYPE_UNKNOWN,
167 EXTRACTOR_METAFORMAT_UTF8,
168 "text/plain", "link",
169 strlen ("link") + 1))
172 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
173 EXTRACTOR_METATYPE_FILENAME,
174 EXTRACTOR_METAFORMAT_UTF8,
175 "text/plain", "lib-link.m4",
176 strlen ("lib-link.m4") + 1))
180 GNUNET_CONTAINER_meta_data_serialize (m, &val, (size_t) - 1,
181 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
182 GNUNET_CONTAINER_meta_data_destroy (m);
183 m = GNUNET_CONTAINER_meta_data_deserialize (val, size);
187 GNUNET_CONTAINER_meta_data_destroy (m);
194 struct GNUNET_CONTAINER_MetaData *meta;
195 struct GNUNET_CONTAINER_MetaData *meta2;
200 unsigned char *thumb;
202 meta = GNUNET_CONTAINER_meta_data_create ();
203 meta2 = GNUNET_CONTAINER_meta_data_create ();
204 for (q = 0; q <= i; q++)
206 GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
207 GNUNET_CONTAINER_meta_data_insert (meta, "<test>",
208 EXTRACTOR_METATYPE_UNKNOWN,
209 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
210 "TestTitle", strlen ("TestTitle") + 1);
211 GNUNET_CONTAINER_meta_data_insert (meta2, "<test>",
212 EXTRACTOR_METATYPE_UNKNOWN,
213 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
214 "TestTitle", strlen ("TestTitle") + 1);
217 //check meta_data_test_equal
218 if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
220 GNUNET_CONTAINER_meta_data_destroy (meta2);
224 //check meta_data_clear
225 GNUNET_CONTAINER_meta_data_clear (meta2);
226 if (0 != GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
228 GNUNET_CONTAINER_meta_data_destroy (meta2);
231 // check equal branch in meta_data_test_equal
232 if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta))
234 GNUNET_CONTAINER_meta_data_destroy (meta2);
237 // check "count" branch in meta_data_test_equal
238 if (GNUNET_NO != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
240 GNUNET_CONTAINER_meta_data_destroy (meta2);
244 // check meta_data_add_publication_date
245 GNUNET_CONTAINER_meta_data_add_publication_date (meta2);
247 // check meta_data_merge
248 GNUNET_CONTAINER_meta_data_clear (meta2);
249 GNUNET_CONTAINER_meta_data_merge (meta2, meta);
250 if (100 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
252 GNUNET_CONTAINER_meta_data_destroy (meta2);
256 // check meta_data_get_by_type
257 GNUNET_CONTAINER_meta_data_clear (meta2);
260 GNUNET_CONTAINER_meta_data_get_by_type (meta2,
261 EXTRACTOR_METATYPE_UNKNOWN)))
263 GNUNET_CONTAINER_meta_data_destroy (meta2);
269 GNUNET_CONTAINER_meta_data_get_by_type (meta, EXTRACTOR_METATYPE_UNKNOWN);
270 GNUNET_assert (NULL != str);
273 GNUNET_CONTAINER_meta_data_destroy (meta2);
282 GNUNET_CONTAINER_meta_data_get_by_type (meta,
283 EXTRACTOR_METATYPE_PUBLICATION_DATE)))
286 GNUNET_CONTAINER_meta_data_destroy (meta2);
290 //check meta_data_get_first_by_types
292 GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
293 EXTRACTOR_METATYPE_UNKNOWN,
295 GNUNET_assert (NULL != str);
298 GNUNET_CONTAINER_meta_data_destroy (meta2);
304 //check meta_data_get_thumbnail
305 if (GNUNET_CONTAINER_meta_data_get_thumbnail (meta, &thumb) != 0)
308 GNUNET_CONTAINER_meta_data_destroy (meta2);
311 GNUNET_CONTAINER_meta_data_destroy (meta2);
312 //check meta_data_duplicate
313 meta2 = GNUNET_CONTAINER_meta_data_duplicate (meta);
314 if (200 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
316 GNUNET_CONTAINER_meta_data_destroy (meta2);
319 GNUNET_CONTAINER_meta_data_destroy (meta2);
320 GNUNET_CONTAINER_meta_data_destroy (meta);
326 main (int argc, char *argv[])
328 int failureCount = 0;
331 GNUNET_log_setup ("test-container-meta-data", "WARNING", NULL);
332 for (i = 0; i < 255; i++)
333 failureCount += testMeta (i);
334 for (i = 1; i < 255; i++)
335 failureCount += testMetaMore (i);
336 failureCount += testMetaLink ();
343 if (failureCount != 0)
351 main (int argc, char *argv[])
354 "GNU libextractor not found, skipping test.\n");
360 /* end of test_container_meta_data.c */