2 This file is part of GNUnet.
3 (C) 2003, 2004, 2006, 2009, 2010 Christian Grothoff (and other contributing authors)
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., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
22 * @file util/test_container_meta_data.c
23 * @brief Test for container_meta_data.c
24 * @author Christian Grothoff
28 #include "gnunet_common.h"
29 #include "gnunet_container_lib.h"
31 #define ABORT(m) { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); if (m != NULL) GNUNET_CONTAINER_meta_data_destroy(m); return 1; }
36 struct GNUNET_CONTAINER_MetaData *m;
42 m = GNUNET_CONTAINER_meta_data_create ();
44 GNUNET_CONTAINER_meta_data_insert (m,
46 EXTRACTOR_METATYPE_TITLE,
47 EXTRACTOR_METAFORMAT_UTF8,
49 "TestTitle", strlen ("TestTitle") + 1))
52 GNUNET_CONTAINER_meta_data_insert (m,
54 EXTRACTOR_METATYPE_AUTHOR_NAME,
55 EXTRACTOR_METAFORMAT_UTF8,
57 "TestTitle", strlen ("TestTitle") + 1))
59 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */
61 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_AUTHOR_NAME, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */
63 if (2 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
66 GNUNET_CONTAINER_meta_data_delete (m,
67 EXTRACTOR_METATYPE_AUTHOR_NAME,
68 "TestTitle", strlen ("TestTitle") + 1))
70 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */
72 if (1 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
75 GNUNET_CONTAINER_meta_data_delete (m,
76 EXTRACTOR_METATYPE_TITLE,
77 "TestTitle", strlen ("TestTitle") + 1))
79 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */
81 if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
83 for (j = 0; j < i; j++)
87 "%s.%d", "A teststring that should compress well.", j);
89 GNUNET_CONTAINER_meta_data_insert (m,
91 EXTRACTOR_METATYPE_UNKNOWN,
92 EXTRACTOR_METAFORMAT_UTF8,
93 "text/plain", val, strlen (val) + 1))
96 if (i != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
99 size = GNUNET_CONTAINER_meta_data_get_serialized_size (m);
101 if (size != GNUNET_CONTAINER_meta_data_serialize (m,
103 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
105 GNUNET_free_non_null (sval);
108 GNUNET_CONTAINER_meta_data_destroy (m);
109 m = GNUNET_CONTAINER_meta_data_deserialize (sval, size);
113 for (j = 0; j < i; j++)
115 GNUNET_snprintf (val,
116 sizeof (val), "%s.%d",
117 "A teststring that should compress well.", j);
119 GNUNET_CONTAINER_meta_data_delete (m,
120 EXTRACTOR_METATYPE_UNKNOWN,
121 val, strlen (val) + 1))
126 if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
128 GNUNET_CONTAINER_meta_data_destroy (m);
135 struct GNUNET_CONTAINER_MetaData *meta;
139 unsigned long long size;
141 meta = GNUNET_CONTAINER_meta_data_create ();
142 for (q = 0; q <= i; q++)
144 GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
145 GNUNET_CONTAINER_meta_data_insert (meta,
147 q % EXTRACTOR_metatype_get_max (),
148 EXTRACTOR_METAFORMAT_UTF8,
149 "text/plain", txt, strlen (txt) + 1);
151 size = GNUNET_CONTAINER_meta_data_get_serialized_size (meta);
152 data = GNUNET_malloc (size * 4);
153 if (size != GNUNET_CONTAINER_meta_data_serialize (meta,
155 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
160 GNUNET_CONTAINER_meta_data_destroy (meta);
168 struct GNUNET_CONTAINER_MetaData *m;
172 m = GNUNET_CONTAINER_meta_data_create ();
174 GNUNET_CONTAINER_meta_data_insert (m,
176 EXTRACTOR_METATYPE_UNKNOWN,
177 EXTRACTOR_METAFORMAT_UTF8,
179 "link", strlen ("link") + 1))
182 GNUNET_CONTAINER_meta_data_insert (m,
184 EXTRACTOR_METATYPE_FILENAME,
185 EXTRACTOR_METAFORMAT_UTF8,
188 strlen ("lib-link.m4") + 1))
191 size = GNUNET_CONTAINER_meta_data_serialize (m, &val, (size_t) - 1,
192 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
193 GNUNET_CONTAINER_meta_data_destroy (m);
194 m = GNUNET_CONTAINER_meta_data_deserialize (val, size);
198 GNUNET_CONTAINER_meta_data_destroy (m);
205 struct GNUNET_CONTAINER_MetaData *meta;
206 struct GNUNET_CONTAINER_MetaData *meta2;
211 unsigned char *thumb;
213 meta = GNUNET_CONTAINER_meta_data_create ();
214 meta2 = GNUNET_CONTAINER_meta_data_create ();
215 for (q = 0; q <= i; q++)
217 GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
218 GNUNET_CONTAINER_meta_data_insert (meta,
220 EXTRACTOR_METATYPE_UNKNOWN,
221 EXTRACTOR_METAFORMAT_UTF8,
223 "TestTitle", strlen ("TestTitle") + 1);
224 GNUNET_CONTAINER_meta_data_insert (meta2,
226 EXTRACTOR_METATYPE_UNKNOWN,
227 EXTRACTOR_METAFORMAT_UTF8,
229 "TestTitle", strlen ("TestTitle") + 1);
232 //check meta_data_test_equal
233 if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
235 GNUNET_CONTAINER_meta_data_destroy (meta2);
239 //check meta_data_clear
240 GNUNET_CONTAINER_meta_data_clear (meta2);
241 if (0 != GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
243 GNUNET_CONTAINER_meta_data_destroy (meta2);
246 // check equal branch in meta_data_test_equal
247 if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta))
249 GNUNET_CONTAINER_meta_data_destroy (meta2);
252 // check "count" branch in meta_data_test_equal
253 if (GNUNET_NO != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
255 GNUNET_CONTAINER_meta_data_destroy (meta2);
259 // check meta_data_add_publication_date
260 GNUNET_CONTAINER_meta_data_add_publication_date (meta2);
262 // check meta_data_merge
263 GNUNET_CONTAINER_meta_data_clear (meta2);
264 GNUNET_CONTAINER_meta_data_merge (meta2, meta);
265 if (100 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
267 GNUNET_CONTAINER_meta_data_destroy (meta2);
271 // check meta_data_get_by_type
272 GNUNET_CONTAINER_meta_data_clear (meta2);
275 GNUNET_CONTAINER_meta_data_get_by_type (meta2,
276 EXTRACTOR_METATYPE_UNKNOWN)))
278 GNUNET_CONTAINER_meta_data_destroy (meta2);
284 GNUNET_CONTAINER_meta_data_get_by_type (meta, EXTRACTOR_METATYPE_UNKNOWN);
285 GNUNET_assert (NULL != str);
288 GNUNET_CONTAINER_meta_data_destroy (meta2);
297 GNUNET_CONTAINER_meta_data_get_by_type (meta,
298 EXTRACTOR_METATYPE_PUBLICATION_DATE)))
301 GNUNET_CONTAINER_meta_data_destroy (meta2);
305 //check meta_data_get_first_by_types
306 str = GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
307 EXTRACTOR_METATYPE_UNKNOWN,
309 GNUNET_assert (NULL != str);
312 GNUNET_CONTAINER_meta_data_destroy (meta2);
318 //check meta_data_get_thumbnail
319 if (GNUNET_CONTAINER_meta_data_get_thumbnail (meta, &thumb) != 0)
322 GNUNET_CONTAINER_meta_data_destroy (meta2);
325 GNUNET_CONTAINER_meta_data_destroy (meta2);
326 //check meta_data_duplicate
327 meta2 = GNUNET_CONTAINER_meta_data_duplicate (meta);
328 if (200 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
330 GNUNET_CONTAINER_meta_data_destroy (meta2);
333 GNUNET_CONTAINER_meta_data_destroy (meta2);
334 GNUNET_CONTAINER_meta_data_destroy (meta);
340 main (int argc, char *argv[])
342 int failureCount = 0;
345 GNUNET_log_setup ("test-container-meta-data", "WARNING", NULL);
346 for (i = 0; i < 255; i++)
347 failureCount += testMeta (i);
348 for (i = 1; i < 255; i++)
349 failureCount += testMetaMore (i);
350 failureCount += testMetaLink ();
357 if (failureCount != 0)
362 /* end of test_container_meta_data.c */