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.
17 * @file util/test_container_meta_data.c
18 * @brief Test for container_meta_data.c
19 * @author Christian Grothoff
23 #include "gnunet_util_lib.h"
25 #define ABORT(m) { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); if (m != NULL) GNUNET_CONTAINER_meta_data_destroy(m); return 1; }
31 struct GNUNET_CONTAINER_MetaData *m;
37 m = GNUNET_CONTAINER_meta_data_create ();
39 GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE,
40 EXTRACTOR_METAFORMAT_UTF8,
41 "text/plain", "TestTitle",
42 strlen ("TestTitle") + 1))
45 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
46 EXTRACTOR_METATYPE_AUTHOR_NAME,
47 EXTRACTOR_METAFORMAT_UTF8,
48 "text/plain", "TestTitle",
49 strlen ("TestTitle") + 1))
51 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */
53 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_AUTHOR_NAME, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1)) /* dup! */
55 if (2 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
58 GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME,
59 "TestTitle", strlen ("TestTitle") + 1))
61 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */
63 if (1 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
66 GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE,
67 "TestTitle", strlen ("TestTitle") + 1))
69 if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE, "TestTitle", strlen ("TestTitle") + 1)) /* already gone */
71 if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
73 for (j = 0; j < i; j++)
75 GNUNET_snprintf (val, sizeof (val), "%s.%d",
76 "A teststring that should compress well.", j);
78 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
79 EXTRACTOR_METATYPE_UNKNOWN,
80 EXTRACTOR_METAFORMAT_UTF8,
81 "text/plain", val, strlen (val) + 1))
84 if (i != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
87 size = GNUNET_CONTAINER_meta_data_get_serialized_size (m);
90 GNUNET_CONTAINER_meta_data_serialize (m, &sval, size,
91 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
93 GNUNET_free_non_null (sval);
96 GNUNET_CONTAINER_meta_data_destroy (m);
97 m = GNUNET_CONTAINER_meta_data_deserialize (sval, size);
101 for (j = 0; j < i; j++)
103 GNUNET_snprintf (val,
106 "A teststring that should compress well.",
109 GNUNET_CONTAINER_meta_data_delete (m,
110 EXTRACTOR_METATYPE_UNKNOWN,
117 if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
119 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 % 42 /* 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);
160 struct GNUNET_CONTAINER_MetaData *m;
164 m = GNUNET_CONTAINER_meta_data_create ();
166 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
167 EXTRACTOR_METATYPE_UNKNOWN,
168 EXTRACTOR_METAFORMAT_UTF8,
169 "text/plain", "link",
170 strlen ("link") + 1))
173 GNUNET_CONTAINER_meta_data_insert (m, "<test>",
174 EXTRACTOR_METATYPE_FILENAME,
175 EXTRACTOR_METAFORMAT_UTF8,
176 "text/plain", "lib-link.m4",
177 strlen ("lib-link.m4") + 1))
181 GNUNET_CONTAINER_meta_data_serialize (m, &val, (size_t) - 1,
182 GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
183 GNUNET_CONTAINER_meta_data_destroy (m);
184 m = GNUNET_CONTAINER_meta_data_deserialize (val, size);
188 GNUNET_CONTAINER_meta_data_destroy (m);
196 struct GNUNET_CONTAINER_MetaData *meta;
197 struct GNUNET_CONTAINER_MetaData *meta2;
202 unsigned char *thumb;
204 meta = GNUNET_CONTAINER_meta_data_create ();
205 meta2 = GNUNET_CONTAINER_meta_data_create ();
206 for (q = 0; q <= i; q++)
208 GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
209 GNUNET_CONTAINER_meta_data_insert (meta, "<test>",
210 EXTRACTOR_METATYPE_UNKNOWN,
211 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
212 "TestTitle", strlen ("TestTitle") + 1);
213 GNUNET_CONTAINER_meta_data_insert (meta2, "<test>",
214 EXTRACTOR_METATYPE_UNKNOWN,
215 EXTRACTOR_METAFORMAT_UTF8, "text/plain",
216 "TestTitle", strlen ("TestTitle") + 1);
219 //check meta_data_test_equal
220 if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
222 GNUNET_CONTAINER_meta_data_destroy (meta2);
226 //check meta_data_clear
227 GNUNET_CONTAINER_meta_data_clear (meta2);
228 if (0 != GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
230 GNUNET_CONTAINER_meta_data_destroy (meta2);
233 // check equal branch in meta_data_test_equal
234 if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta))
236 GNUNET_CONTAINER_meta_data_destroy (meta2);
239 // check "count" branch in meta_data_test_equal
240 if (GNUNET_NO != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
242 GNUNET_CONTAINER_meta_data_destroy (meta2);
246 // check meta_data_add_publication_date
247 GNUNET_CONTAINER_meta_data_add_publication_date (meta2);
249 // check meta_data_merge
250 GNUNET_CONTAINER_meta_data_clear (meta2);
251 GNUNET_CONTAINER_meta_data_merge (meta2, meta);
252 if (100 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
254 GNUNET_CONTAINER_meta_data_destroy (meta2);
258 // check meta_data_get_by_type
259 GNUNET_CONTAINER_meta_data_clear (meta2);
262 GNUNET_CONTAINER_meta_data_get_by_type (meta2,
263 EXTRACTOR_METATYPE_UNKNOWN)))
265 GNUNET_CONTAINER_meta_data_destroy (meta2);
271 GNUNET_CONTAINER_meta_data_get_by_type (meta, EXTRACTOR_METATYPE_UNKNOWN);
272 GNUNET_assert (NULL != str);
275 GNUNET_CONTAINER_meta_data_destroy (meta2);
284 GNUNET_CONTAINER_meta_data_get_by_type (meta,
285 EXTRACTOR_METATYPE_PUBLICATION_DATE)))
288 GNUNET_CONTAINER_meta_data_destroy (meta2);
292 //check meta_data_get_first_by_types
294 GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
295 EXTRACTOR_METATYPE_UNKNOWN,
297 GNUNET_assert (NULL != str);
300 GNUNET_CONTAINER_meta_data_destroy (meta2);
306 //check meta_data_get_thumbnail
307 if (GNUNET_CONTAINER_meta_data_get_thumbnail (meta, &thumb) != 0)
310 GNUNET_CONTAINER_meta_data_destroy (meta2);
313 GNUNET_CONTAINER_meta_data_destroy (meta2);
314 //check meta_data_duplicate
315 meta2 = GNUNET_CONTAINER_meta_data_duplicate (meta);
316 if (200 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
318 GNUNET_CONTAINER_meta_data_destroy (meta2);
321 GNUNET_CONTAINER_meta_data_destroy (meta2);
322 GNUNET_CONTAINER_meta_data_destroy (meta);
328 main (int argc, char *argv[])
330 int failureCount = 0;
333 GNUNET_log_setup ("test-container-meta-data", "WARNING", NULL);
334 for (i = 0; i < 255; i++)
335 failureCount += testMeta (i);
336 for (i = 1; i < 255; i++)
337 failureCount += testMetaMore (i);
338 failureCount += testMetaLink ();
345 if (failureCount != 0)
351 /* end of test_container_meta_data.c */