-more file name fixes
[oweals/gnunet.git] / src / util / test_container_meta_data.c
index 17ef79161e037ad1bf33f34c1f3779784159c1c8..fe1dd79c10e4d653e088abda8c7a01d3adc4b88e 100644 (file)
@@ -1,10 +1,10 @@
 /*
      This file is part of GNUnet.
-     (C) 2003, 2004, 2006, 2009 Christian Grothoff (and other contributing authors)
+     (C) 2003, 2004, 2006, 2009, 2010 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -34,85 +34,88 @@ static int
 testMeta (int i)
 {
   struct GNUNET_CONTAINER_MetaData *m;
-  char *val;
+  char val[256];
+  char *sval;
   int j;
   unsigned int size;
 
   m = GNUNET_CONTAINER_meta_data_create ();
   if (GNUNET_OK !=
-      GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_TITLE, "TestTitle"))
+      GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE,
+                                         EXTRACTOR_METAFORMAT_UTF8,
+                                         "text/plain", "TestTitle",
+                                         strlen ("TestTitle") + 1))
     ABORT (m);
   if (GNUNET_OK !=
-      GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_AUTHOR, "TestTitle"))
+      GNUNET_CONTAINER_meta_data_insert (m, "<test>",
+                                         EXTRACTOR_METATYPE_AUTHOR_NAME,
+                                         EXTRACTOR_METAFORMAT_UTF8,
+                                         "text/plain", "TestTitle",
+                                         strlen ("TestTitle") + 1))
     ABORT (m);
-  if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_TITLE, "TestTitle")) /* dup! */
+  if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_TITLE, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1))   /* dup! */
     ABORT (m);
-  if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_AUTHOR, "TestTitle"))        /* dup! */
+  if (GNUNET_OK == GNUNET_CONTAINER_meta_data_insert (m, "<test>", EXTRACTOR_METATYPE_AUTHOR_NAME, EXTRACTOR_METAFORMAT_UTF8, "text/plain", "TestTitle", strlen ("TestTitle") + 1))     /* dup! */
     ABORT (m);
-  if (2 != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL))
+  if (2 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
     ABORT (m);
   if (GNUNET_OK !=
-      GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_AUTHOR, "TestTitle"))
+      GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME,
+                                         "TestTitle", strlen ("TestTitle") + 1))
     ABORT (m);
-  if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_AUTHOR, "TestTitle"))        /* already gone */
+  if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_AUTHOR_NAME, "TestTitle", strlen ("TestTitle") + 1))        /* already gone */
     ABORT (m);
-  if (1 != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL))
+  if (1 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
     ABORT (m);
   if (GNUNET_OK !=
-      GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_TITLE, "TestTitle"))
+      GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE,
+                                         "TestTitle", strlen ("TestTitle") + 1))
     ABORT (m);
-  if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_TITLE, "TestTitle")) /* already gone */
+  if (GNUNET_OK == GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_TITLE, "TestTitle", strlen ("TestTitle") + 1))      /* already gone */
     ABORT (m);
-  if (0 != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL))
+  if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
     ABORT (m);
-  val = GNUNET_malloc (256);
   for (j = 0; j < i; j++)
-    {
-      GNUNET_snprintf (val, 256, "%s.%d",
-                       "A teststring that should compress well.", j);
-      if (GNUNET_OK !=
-          GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_UNKNOWN, val))
-        {
-          GNUNET_free (val);
-          ABORT (m);
-        }
-    }
-  GNUNET_free (val);
-  if (i != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL))
+  {
+    GNUNET_snprintf (val, sizeof (val), "%s.%d",
+                     "A teststring that should compress well.", j);
+    if (GNUNET_OK !=
+        GNUNET_CONTAINER_meta_data_insert (m, "<test>",
+                                           EXTRACTOR_METATYPE_UNKNOWN,
+                                           EXTRACTOR_METAFORMAT_UTF8,
+                                           "text/plain", val, strlen (val) + 1))
+      ABORT (m);
+  }
+  if (i != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
     ABORT (m);
 
-  size =
-    GNUNET_CONTAINER_meta_data_get_serialized_size (m,
-                                                    GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
-  val = GNUNET_malloc (size);
-  if (size != GNUNET_CONTAINER_meta_data_serialize (m, val, size,
-                                                    GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
-    {
-      GNUNET_free (val);
-      ABORT (m);
-    }
+  size = GNUNET_CONTAINER_meta_data_get_serialized_size (m);
+  sval = NULL;
+  if (size !=
+      GNUNET_CONTAINER_meta_data_serialize (m, &sval, size,
+                                            GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
+  {
+    GNUNET_free_non_null (sval);
+    ABORT (m);
+  }
   GNUNET_CONTAINER_meta_data_destroy (m);
-  m = GNUNET_CONTAINER_meta_data_deserialize (val, size);
-  GNUNET_free (val);
+  m = GNUNET_CONTAINER_meta_data_deserialize (sval, size);
+  GNUNET_free (sval);
   if (m == NULL)
     ABORT (m);
-  val = GNUNET_malloc (256);
   for (j = 0; j < i; j++)
-    {
-      GNUNET_snprintf (val, 256, "%s.%d",
-                       "A teststring that should compress well.", j);
-      if (GNUNET_OK !=
-          GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_UNKNOWN, val))
-        {
-          GNUNET_free (val);
-          ABORT (m);
-        }
-    }
-  GNUNET_free (val);
-  if (0 != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL))
+  {
+    GNUNET_snprintf (val, sizeof (val), "%s.%d",
+                     "A teststring that should compress well.", j);
+    if (GNUNET_OK !=
+        GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_METATYPE_UNKNOWN, val,
+                                           strlen (val) + 1))
     {
       ABORT (m);
     }
+  }
+  if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
+    ABORT (m);
   GNUNET_CONTAINER_meta_data_destroy (m);
   return 0;
 }
@@ -128,24 +131,22 @@ testMetaMore (int i)
 
   meta = GNUNET_CONTAINER_meta_data_create ();
   for (q = 0; q <= i; q++)
-    {
-      GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
-      GNUNET_CONTAINER_meta_data_insert (meta,
-                                         q %
-                                         EXTRACTOR_getHighestKeywordTypeNumber
-                                         (), txt);
-    }
-  size =
-    GNUNET_CONTAINER_meta_data_get_serialized_size (meta,
-                                                    GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
+  {
+    GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
+    GNUNET_CONTAINER_meta_data_insert (meta, "<test>",
+                                       q % EXTRACTOR_metatype_get_max (),
+                                       EXTRACTOR_METAFORMAT_UTF8, "text/plain",
+                                       txt, strlen (txt) + 1);
+  }
+  size = GNUNET_CONTAINER_meta_data_get_serialized_size (meta);
   data = GNUNET_malloc (size * 4);
-  if (size != GNUNET_CONTAINER_meta_data_serialize (meta,
-                                                    data, size * 4,
-                                                    GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
-    {
-      GNUNET_free (data);
-      ABORT (meta);
-    }
+  if (size !=
+      GNUNET_CONTAINER_meta_data_serialize (meta, &data, size * 4,
+                                            GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
+  {
+    GNUNET_free (data);
+    ABORT (meta);
+  }
   GNUNET_CONTAINER_meta_data_destroy (meta);
   GNUNET_free (data);
   return 0;
@@ -160,22 +161,23 @@ testMetaLink ()
 
   m = GNUNET_CONTAINER_meta_data_create ();
   if (GNUNET_OK !=
-      GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_UNKNOWN, "link"))
+      GNUNET_CONTAINER_meta_data_insert (m, "<test>",
+                                         EXTRACTOR_METATYPE_UNKNOWN,
+                                         EXTRACTOR_METAFORMAT_UTF8,
+                                         "text/plain", "link",
+                                         strlen ("link") + 1))
     ABORT (m);
   if (GNUNET_OK !=
-      GNUNET_CONTAINER_meta_data_insert (m, EXTRACTOR_FILENAME,
-                                         "lib-link.m4"))
+      GNUNET_CONTAINER_meta_data_insert (m, "<test>",
+                                         EXTRACTOR_METATYPE_FILENAME,
+                                         EXTRACTOR_METAFORMAT_UTF8,
+                                         "text/plain", "lib-link.m4",
+                                         strlen ("lib-link.m4") + 1))
     ABORT (m);
+  val = NULL;
   size =
-    GNUNET_CONTAINER_meta_data_get_serialized_size (m,
-                                                    GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
-  val = GNUNET_malloc (size);
-  if (size != GNUNET_CONTAINER_meta_data_serialize (m, val, size,
-                                                    GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
-    {
-      GNUNET_free (val);
-      ABORT (m);
-    }
+      GNUNET_CONTAINER_meta_data_serialize (m, &val, (size_t) - 1,
+                                            GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
   GNUNET_CONTAINER_meta_data_destroy (m);
   m = GNUNET_CONTAINER_meta_data_deserialize (val, size);
   GNUNET_free (val);
@@ -185,57 +187,136 @@ testMetaLink ()
   return 0;
 }
 
-
-static int
-testThumbnail ()
+int
+check ()
 {
-  struct GNUNET_CONTAINER_MetaData *m;
-  struct GNUNET_CONTAINER_MetaData *d;
-  EXTRACTOR_ExtractorList *ex;
+  struct GNUNET_CONTAINER_MetaData *meta;
+  struct GNUNET_CONTAINER_MetaData *meta2;
+  int q;
+  int i = 100;
+  char txt[128];
+  char *str;
   unsigned char *thumb;
-  size_t size;
-  char *date;
 
-  ex = EXTRACTOR_loadConfigLibraries (NULL, "libextractor_thumbnail");
-  if (ex == NULL)
-    {
-      fprintf (stderr,
-               "Test incomplete, have no thumbnail extractor available.\n");
-      return 0;                 /* can not test, no thumbnailer */
-    }
-  ex = EXTRACTOR_loadConfigLibraries (ex, "libextractor_mime");
-  m = GNUNET_CONTAINER_meta_data_create ();
-  if (3 != GNUNET_CONTAINER_meta_data_extract_from_file (m,
-                                                         "test_container_meta_data_image.jpg",
-                                                         ex))
-    {
-      GNUNET_break (0);
-      EXTRACTOR_removeAll (ex);
-      GNUNET_CONTAINER_meta_data_destroy (m);
-      return 1;
-    }
-  EXTRACTOR_removeAll (ex);
-  d = GNUNET_CONTAINER_meta_data_duplicate (m);
-  GNUNET_CONTAINER_meta_data_destroy (m);
-  size = GNUNET_CONTAINER_meta_data_get_thumbnail (d, &thumb);
-  if (size == 0)
-    {
-      GNUNET_break (0);
-      GNUNET_CONTAINER_meta_data_destroy (d);
-      return 1;
-    }
-  GNUNET_free (thumb);
-  GNUNET_CONTAINER_meta_data_add_publication_date (d);
-  date = GNUNET_CONTAINER_meta_data_get_by_type (d,
-                                                 EXTRACTOR_PUBLICATION_DATE);
-  if (date == NULL)
-    {
-      GNUNET_break (0);
-      GNUNET_CONTAINER_meta_data_destroy (d);
-      return 1;
-    }
-  GNUNET_free (date);
-  GNUNET_CONTAINER_meta_data_destroy (d);
+  meta = GNUNET_CONTAINER_meta_data_create ();
+  meta2 = GNUNET_CONTAINER_meta_data_create ();
+  for (q = 0; q <= i; q++)
+  {
+    GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
+    GNUNET_CONTAINER_meta_data_insert (meta, "<test>",
+                                       EXTRACTOR_METATYPE_UNKNOWN,
+                                       EXTRACTOR_METAFORMAT_UTF8, "text/plain",
+                                       "TestTitle", strlen ("TestTitle") + 1);
+    GNUNET_CONTAINER_meta_data_insert (meta2, "<test>",
+                                       EXTRACTOR_METATYPE_UNKNOWN,
+                                       EXTRACTOR_METAFORMAT_UTF8, "text/plain",
+                                       "TestTitle", strlen ("TestTitle") + 1);
+  }
+
+  //check meta_data_test_equal
+  if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
+  {
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    ABORT (meta);
+  }
+
+  //check meta_data_clear
+  GNUNET_CONTAINER_meta_data_clear (meta2);
+  if (0 != GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
+  {
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    ABORT (meta);
+  }
+  // check equal branch in meta_data_test_equal
+  if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal (meta, meta))
+  {
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    ABORT (meta);
+  }
+  // check "count" branch in meta_data_test_equal
+  if (GNUNET_NO != GNUNET_CONTAINER_meta_data_test_equal (meta, meta2))
+  {
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    ABORT (meta);
+  }
+
+  // check meta_data_add_publication_date
+  GNUNET_CONTAINER_meta_data_add_publication_date (meta2);
+
+  // check meta_data_merge
+  GNUNET_CONTAINER_meta_data_clear (meta2);
+  GNUNET_CONTAINER_meta_data_merge (meta2, meta);
+  if (100 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
+  {
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    ABORT (meta);
+  }
+
+  // check meta_data_get_by_type
+  GNUNET_CONTAINER_meta_data_clear (meta2);
+  if (NULL !=
+      (str =
+       GNUNET_CONTAINER_meta_data_get_by_type (meta2,
+                                               EXTRACTOR_METATYPE_UNKNOWN)))
+  {
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    GNUNET_free (str);
+    ABORT (meta);
+  }
+
+  str =
+      GNUNET_CONTAINER_meta_data_get_by_type (meta, EXTRACTOR_METATYPE_UNKNOWN);
+  GNUNET_assert (NULL != str);
+  if (str[0] != 'T')
+  {
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    GNUNET_free (str);
+    ABORT (meta);
+  }
+  GNUNET_free (str);
+
+  // check branch
+  if (NULL !=
+      (str =
+       GNUNET_CONTAINER_meta_data_get_by_type (meta,
+                                               EXTRACTOR_METATYPE_PUBLICATION_DATE)))
+  {
+    GNUNET_free (str);
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    ABORT (meta);
+  }
+
+  //check meta_data_get_first_by_types
+  str =
+      GNUNET_CONTAINER_meta_data_get_first_by_types (meta,
+                                                     EXTRACTOR_METATYPE_UNKNOWN,
+                                                     -1);
+  GNUNET_assert (NULL != str);
+  if (str[0] != 'T')
+  {
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    GNUNET_free (str);
+    ABORT (meta);
+  }
+  GNUNET_free (str);
+
+  //check meta_data_get_thumbnail
+  if (GNUNET_CONTAINER_meta_data_get_thumbnail (meta, &thumb) != 0)
+  {
+    GNUNET_free (thumb);
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    ABORT (meta);
+  }
+  GNUNET_CONTAINER_meta_data_destroy (meta2);
+  //check meta_data_duplicate
+  meta2 = GNUNET_CONTAINER_meta_data_duplicate (meta);
+  if (200 == GNUNET_CONTAINER_meta_data_iterate (meta2, NULL, NULL))
+  {
+    GNUNET_CONTAINER_meta_data_destroy (meta2);
+    ABORT (meta);
+  }
+  GNUNET_CONTAINER_meta_data_destroy (meta2);
+  GNUNET_CONTAINER_meta_data_destroy (meta);
   return 0;
 }
 
@@ -252,11 +333,15 @@ main (int argc, char *argv[])
   for (i = 1; i < 255; i++)
     failureCount += testMetaMore (i);
   failureCount += testMetaLink ();
-  failureCount += testThumbnail ();
+
+  int ret = check ();
+
+  if (ret == 1)
+    return 1;
 
   if (failureCount != 0)
     return 1;
   return 0;
 }
 
-/* end of metatest.c */
+/* end of test_container_meta_data.c */