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_util_lib.h"
30 #define ABORT(m) { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); if (m != NULL) GNUNET_CONTAINER_meta_data_destroy(m); return 1; }
35 struct GNUNET_CONTAINER_MetaData *m;
41 m = GNUNET_CONTAINER_meta_data_create ();
43 GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE,
44 EXTRACTOR_METAFORMAT_UTF8,
45 "text/plain", "TestTitle",
46 strlen ("TestTitle") + 1))
49 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
50 EXTRACTOR_METATYPE_AUTHOR_NAME,
51 EXTRACTOR_METAFORMAT_UTF8,
52 "text/plain", "TestTitle",
53 strlen ("TestTitle") + 1))
55 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */
57 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_AUTHOR_NAME, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */
59 if (2 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
62 GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME,
63 "TestTitle", strlen ("TestTitle") + 1))
65 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */
67 if (1 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
70 GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE,
71 "TestTitle", strlen ("TestTitle") + 1))
73 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */
75 if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
77 for (j = 0; j < i; j++)
79 GNUNET_snprintf (val, sizeof (val), "%s.%d",
80 "A teststring that should compress well.", j);
82 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
83 EXTRACTOR_METATYPE_UNKNOWN,
84 EXTRACTOR_METAFORMAT_UTF8,
85 "text/plain", val, strlen (val) + 1))
88 if (i != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
91 size = GNUNET_CONTAINER_meta_data_get_serialized_size (m);
94 GNUNET_CONTAINER_meta_data_serialize (m, &sval, size,
95 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
97 GNUNET_free_non_null (sval);
100 GNUNET_CONTAINER_meta_data_destroy (m);
101 m = GNUNET_CONTAINER_meta_data_deserialize (sval, size);
105 for (j = 0; j < i; j++)
107 GNUNET_snprintf (val, sizeof (val), "%s.%d",
108 "A teststring that should compress well.", j);
110 GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_UNKNOWN, val,
116 if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
118 GNUNET_CONTAINER_meta_data_destroy (m);
125 struct GNUNET_CONTAINER_MetaData *meta;
129 unsigned long long size;
131 meta = GNUNET_CONTAINER_meta_data_create ();
132 for (q = 0; q <= i; q++)
134 GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
135 GNUNET_CONTAINER_meta_data_insert (meta, "<test>",
136 q % EXTRACTOR_metatype_get_max (),
137 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
138 txt, strlen (txt) + 1);
140 size = GNUNET_CONTAINER_meta_data_get_serialized_size (meta);
141 data = GNUNET_malloc (size * 4);
143 GNUNET_CONTAINER_meta_data_serialize (meta, &data, size * 4,
144 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
149 GNUNET_CONTAINER_meta_data_destroy (meta);
157 struct GNUNET_CONTAINER_MetaData *m;
161 m = GNUNET_CONTAINER_meta_data_create ();
163 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
164 EXTRACTOR_METATYPE_UNKNOWN,
165 EXTRACTOR_METAFORMAT_UTF8,
166 "text/plain", "link",
167 strlen ("link") + 1))
170 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
171 EXTRACTOR_METATYPE_FILENAME,
172 EXTRACTOR_METAFORMAT_UTF8,
173 "text/plain", "lib-link.m4",
174 strlen ("lib-link.m4") + 1))
178 GNUNET_CONTAINER_meta_data_serialize (m, &val, (size_t) - 1,
179 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
180 GNUNET_CONTAINER_meta_data_destroy (m);
181 m = GNUNET_CONTAINER_meta_data_deserialize (val, size);
185 GNUNET_CONTAINER_meta_data_destroy (m);
192 struct GNUNET_CONTAINER_MetaData *meta;
193 struct GNUNET_CONTAINER_MetaData *meta2;
198 unsigned char *thumb;
200 meta = GNUNET_CONTAINER_meta_data_create ();
201 meta2 = GNUNET_CONTAINER_meta_data_create ();
202 for (q = 0; q <= i; q++)
204 GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
205 GNUNET_CONTAINER_meta_data_insert (meta, "<test>",
206 EXTRACTOR_METATYPE_UNKNOWN,
207 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
208 "TestTitle", strlen ("TestTitle") + 1);
209 GNUNET_CONTAINER_meta_data_insert (meta2, "<test>",
210 EXTRACTOR_METATYPE_UNKNOWN,
211 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
212 "TestTitle", strlen ("TestTitle") + 1);
215 //check meta_data_test_equal
216 if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
218 GNUNET_CONTAINER_meta_data_destroy (meta2);
222 //check meta_data_clear
223 GNUNET_CONTAINER_meta_data_clear (meta2);
224 if (0 != GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
226 GNUNET_CONTAINER_meta_data_destroy (meta2);
229 // check equal branch in meta_data_test_equal
230 if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta))
232 GNUNET_CONTAINER_meta_data_destroy (meta2);
235 // check "count" branch in meta_data_test_equal
236 if (GNUNET_NO != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
238 GNUNET_CONTAINER_meta_data_destroy (meta2);
242 // check meta_data_add_publication_date
243 GNUNET_CONTAINER_meta_data_add_publication_date (meta2);
245 // check meta_data_merge
246 GNUNET_CONTAINER_meta_data_clear (meta2);
247 GNUNET_CONTAINER_meta_data_merge (meta2, meta);
248 if (100 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
250 GNUNET_CONTAINER_meta_data_destroy (meta2);
254 // check meta_data_get_by_type
255 GNUNET_CONTAINER_meta_data_clear (meta2);
258 GNUNET_CONTAINER_meta_data_get_by_type (meta2,
259 EXTRACTOR_METATYPE_UNKNOWN)))
261 GNUNET_CONTAINER_meta_data_destroy (meta2);
267 GNUNET_CONTAINER_meta_data_get_by_type (meta, EXTRACTOR_METATYPE_UNKNOWN);
268 GNUNET_assert (NULL != str);
271 GNUNET_CONTAINER_meta_data_destroy (meta2);
280 GNUNET_CONTAINER_meta_data_get_by_type (meta,
281 EXTRACTOR_METATYPE_PUBLICATION_DATE)))
284 GNUNET_CONTAINER_meta_data_destroy (meta2);
288 //check meta_data_get_first_by_types
290 GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
291 EXTRACTOR_METATYPE_UNKNOWN,
293 GNUNET_assert (NULL != str);
296 GNUNET_CONTAINER_meta_data_destroy (meta2);
302 //check meta_data_get_thumbnail
303 if (GNUNET_CONTAINER_meta_data_get_thumbnail (meta, &thumb) != 0)
306 GNUNET_CONTAINER_meta_data_destroy (meta2);
309 GNUNET_CONTAINER_meta_data_destroy (meta2);
310 //check meta_data_duplicate
311 meta2 = GNUNET_CONTAINER_meta_data_duplicate (meta);
312 if (200 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
314 GNUNET_CONTAINER_meta_data_destroy (meta2);
317 GNUNET_CONTAINER_meta_data_destroy (meta2);
318 GNUNET_CONTAINER_meta_data_destroy (meta);
324 main (int argc, char *argv[])
326 int failureCount = 0;
329 GNUNET_log_setup ("test-container-meta-data", "WARNING", NULL);
330 for (i = 0; i < 255; i++)
331 failureCount += testMeta (i);
332 for (i = 1; i < 255; i++)
333 failureCount += testMetaMore (i);
334 failureCount += testMetaLink ();
341 if (failureCount != 0)
346 /* end of test_container_meta_data.c */