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 it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your 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 Affero General Public License for more details.
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 * @file util/test_container_meta_data.c
21 * @brief Test for container_meta_data.c
22 * @author Christian Grothoff
26 #include "gnunet_util_lib.h"
28 #define ABORT(m) { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); if (m != NULL) GNUNET_CONTAINER_meta_data_destroy(m); return 1; }
34 struct GNUNET_CONTAINER_MetaData *m;
40 m = GNUNET_CONTAINER_meta_data_create ();
42 GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE,
43 EXTRACTOR_METAFORMAT_UTF8,
44 "text/plain", "TestTitle",
45 strlen ("TestTitle") + 1))
48 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
49 EXTRACTOR_METATYPE_AUTHOR_NAME,
50 EXTRACTOR_METAFORMAT_UTF8,
51 "text/plain", "TestTitle",
52 strlen ("TestTitle") + 1))
54 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */
56 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_AUTHOR_NAME, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */
58 if (2 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
61 GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME,
62 "TestTitle", strlen ("TestTitle") + 1))
64 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */
66 if (1 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
69 GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE,
70 "TestTitle", strlen ("TestTitle") + 1))
72 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */
74 if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
76 for (j = 0; j < i; j++)
78 GNUNET_snprintf (val, sizeof (val), "%s.%d",
79 "A teststring that should compress well.", j);
81 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
82 EXTRACTOR_METATYPE_UNKNOWN,
83 EXTRACTOR_METAFORMAT_UTF8,
84 "text/plain", val, strlen (val) + 1))
87 if (i != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
90 size = GNUNET_CONTAINER_meta_data_get_serialized_size (m);
93 GNUNET_CONTAINER_meta_data_serialize (m, &sval, size,
94 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
96 GNUNET_free_non_null (sval);
99 GNUNET_CONTAINER_meta_data_destroy (m);
100 m = GNUNET_CONTAINER_meta_data_deserialize (sval, size);
104 for (j = 0; j < i; j++)
106 GNUNET_snprintf (val,
109 "A teststring that should compress well.",
112 GNUNET_CONTAINER_meta_data_delete (m,
113 EXTRACTOR_METATYPE_UNKNOWN,
120 if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
122 GNUNET_CONTAINER_meta_data_destroy (m);
130 struct GNUNET_CONTAINER_MetaData *meta;
134 unsigned long long size;
136 meta = GNUNET_CONTAINER_meta_data_create ();
137 for (q = 0; q <= i; q++)
139 GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
140 GNUNET_CONTAINER_meta_data_insert (meta, "<test>",
141 q % 42 /* EXTRACTOR_metatype_get_max () */,
142 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
143 txt, strlen (txt) + 1);
145 size = GNUNET_CONTAINER_meta_data_get_serialized_size (meta);
146 data = GNUNET_malloc (size * 4);
148 GNUNET_CONTAINER_meta_data_serialize (meta, &data, size * 4,
149 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
154 GNUNET_CONTAINER_meta_data_destroy (meta);
163 struct GNUNET_CONTAINER_MetaData *m;
167 m = GNUNET_CONTAINER_meta_data_create ();
169 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
170 EXTRACTOR_METATYPE_UNKNOWN,
171 EXTRACTOR_METAFORMAT_UTF8,
172 "text/plain", "link",
173 strlen ("link") + 1))
176 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
177 EXTRACTOR_METATYPE_FILENAME,
178 EXTRACTOR_METAFORMAT_UTF8,
179 "text/plain", "lib-link.m4",
180 strlen ("lib-link.m4") + 1))
184 GNUNET_CONTAINER_meta_data_serialize (m, &val, (size_t) - 1,
185 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
186 GNUNET_CONTAINER_meta_data_destroy (m);
187 m = GNUNET_CONTAINER_meta_data_deserialize (val, size);
191 GNUNET_CONTAINER_meta_data_destroy (m);
199 struct GNUNET_CONTAINER_MetaData *meta;
200 struct GNUNET_CONTAINER_MetaData *meta2;
205 unsigned char *thumb;
207 meta = GNUNET_CONTAINER_meta_data_create ();
208 meta2 = GNUNET_CONTAINER_meta_data_create ();
209 for (q = 0; q <= i; q++)
211 GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
212 GNUNET_CONTAINER_meta_data_insert (meta, "<test>",
213 EXTRACTOR_METATYPE_UNKNOWN,
214 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
215 "TestTitle", strlen ("TestTitle") + 1);
216 GNUNET_CONTAINER_meta_data_insert (meta2, "<test>",
217 EXTRACTOR_METATYPE_UNKNOWN,
218 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
219 "TestTitle", strlen ("TestTitle") + 1);
222 //check meta_data_test_equal
223 if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
225 GNUNET_CONTAINER_meta_data_destroy (meta2);
229 //check meta_data_clear
230 GNUNET_CONTAINER_meta_data_clear (meta2);
231 if (0 != GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
233 GNUNET_CONTAINER_meta_data_destroy (meta2);
236 // check equal branch in meta_data_test_equal
237 if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta))
239 GNUNET_CONTAINER_meta_data_destroy (meta2);
242 // check "count" branch in meta_data_test_equal
243 if (GNUNET_NO != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
245 GNUNET_CONTAINER_meta_data_destroy (meta2);
249 // check meta_data_add_publication_date
250 GNUNET_CONTAINER_meta_data_add_publication_date (meta2);
252 // check meta_data_merge
253 GNUNET_CONTAINER_meta_data_clear (meta2);
254 GNUNET_CONTAINER_meta_data_merge (meta2, meta);
255 if (100 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
257 GNUNET_CONTAINER_meta_data_destroy (meta2);
261 // check meta_data_get_by_type
262 GNUNET_CONTAINER_meta_data_clear (meta2);
265 GNUNET_CONTAINER_meta_data_get_by_type (meta2,
266 EXTRACTOR_METATYPE_UNKNOWN)))
268 GNUNET_CONTAINER_meta_data_destroy (meta2);
274 GNUNET_CONTAINER_meta_data_get_by_type (meta, EXTRACTOR_METATYPE_UNKNOWN);
275 GNUNET_assert (NULL != str);
278 GNUNET_CONTAINER_meta_data_destroy (meta2);
287 GNUNET_CONTAINER_meta_data_get_by_type (meta,
288 EXTRACTOR_METATYPE_PUBLICATION_DATE)))
291 GNUNET_CONTAINER_meta_data_destroy (meta2);
295 //check meta_data_get_first_by_types
297 GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
298 EXTRACTOR_METATYPE_UNKNOWN,
300 GNUNET_assert (NULL != str);
303 GNUNET_CONTAINER_meta_data_destroy (meta2);
309 //check meta_data_get_thumbnail
310 if (GNUNET_CONTAINER_meta_data_get_thumbnail (meta, &thumb) != 0)
313 GNUNET_CONTAINER_meta_data_destroy (meta2);
316 GNUNET_CONTAINER_meta_data_destroy (meta2);
317 //check meta_data_duplicate
318 meta2 = GNUNET_CONTAINER_meta_data_duplicate (meta);
319 if (200 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
321 GNUNET_CONTAINER_meta_data_destroy (meta2);
324 GNUNET_CONTAINER_meta_data_destroy (meta2);
325 GNUNET_CONTAINER_meta_data_destroy (meta);
331 main (int argc, char *argv[])
333 int failureCount = 0;
336 GNUNET_log_setup ("test-container-meta-data", "WARNING", NULL);
337 for (i = 0; i < 255; i++)
338 failureCount += testMeta (i);
339 for (i = 1; i < 255; i++)
340 failureCount += testMetaMore (i);
341 failureCount += testMetaLink ();
348 if (failureCount != 0)
354 /* end of test_container_meta_data.c */