LRN: Fix automake deps to allow -j* builds again
[oweals/gnunet.git] / src / util / test_container_meta_data.c
index 17ef79161e037ad1bf33f34c1f3779784159c1c8..9148e73b0461fe8b0cc712b0db6d44296d3ac521 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,124 @@ 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",
+      GNUNET_snprintf (val, 
+                      sizeof(val),
+                      "%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_CONTAINER_meta_data_insert (m,
+                                            "<test>",
+                                            EXTRACTOR_METATYPE_UNKNOWN, 
+                                            EXTRACTOR_METAFORMAT_UTF8,
+                                            "text/plain",
+                                            val,
+                                            strlen(val)+1))
+       ABORT (m);        
     }
-  GNUNET_free (val);
-  if (i != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL))
+  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_get_serialized_size (m);
+  sval = NULL;
+  if (size != GNUNET_CONTAINER_meta_data_serialize (m,
+                                                   &sval, size,
                                                     GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
     {
-      GNUNET_free (val);
+      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",
+      GNUNET_snprintf (val, 
+                      sizeof(val), "%s.%d",
                        "A teststring that should compress well.", j);
       if (GNUNET_OK !=
-          GNUNET_CONTAINER_meta_data_delete (m, EXTRACTOR_UNKNOWN, val))
+          GNUNET_CONTAINER_meta_data_delete (m,
+                                            EXTRACTOR_METATYPE_UNKNOWN, 
+                                            val,
+                                            strlen(val)+1))
         {
-          GNUNET_free (val);
           ABORT (m);
         }
     }
-  GNUNET_free (val);
-  if (0 != GNUNET_CONTAINER_meta_data_get_contents (m, NULL, NULL))
-    {
-      ABORT (m);
-    }
+  if (0 != GNUNET_CONTAINER_meta_data_iterate (m, NULL, NULL))
+    ABORT (m);    
   GNUNET_CONTAINER_meta_data_destroy (m);
   return 0;
 }
@@ -131,16 +170,18 @@ testMetaMore (int i)
     {
       GNUNET_snprintf (txt, 128, "%u -- %u\n", i, q);
       GNUNET_CONTAINER_meta_data_insert (meta,
-                                         q %
-                                         EXTRACTOR_getHighestKeywordTypeNumber
-                                         (), txt);
+                                        "<test>",
+                                         q % EXTRACTOR_metatype_get_max(), 
+                                        EXTRACTOR_METAFORMAT_UTF8,
+                                        "text/plain",
+                                        txt,
+                                        strlen (txt)+1);
     }
   size =
-    GNUNET_CONTAINER_meta_data_get_serialized_size (meta,
-                                                    GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
+    GNUNET_CONTAINER_meta_data_get_serialized_size (meta);
   data = GNUNET_malloc (size * 4);
   if (size != GNUNET_CONTAINER_meta_data_serialize (meta,
-                                                    data, size * 4,
+                                                    &data, size * 4,
                                                     GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL))
     {
       GNUNET_free (data);
@@ -160,22 +201,26 @@ 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);
-  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);
-    }
+  val = NULL;
+  size = 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,58 +230,135 @@ testMetaLink ()
   return 0;
 }
 
-
-static int
-testThumbnail ()
+int
+check()
 {
-  struct GNUNET_CONTAINER_MetaData *m;
-  struct GNUNET_CONTAINER_MetaData *d;
-  EXTRACTOR_ExtractorList *ex;
-  unsigned char *thumb;
-  size_t size;
-  char *date;
+  struct GNUNET_CONTAINER_MetaData *meta;
+  struct GNUNET_CONTAINER_MetaData *meta2;
+  int q;
+  int i = 100;
+  char txt[128];
+  char *str;
+  unsigned char* thumb;
 
-  ex = EXTRACTOR_loadConfigLibraries (NULL, "libextractor_thumbnail");
-  if (ex == NULL)
+  meta = GNUNET_CONTAINER_meta_data_create ();
+  meta2 = GNUNET_CONTAINER_meta_data_create ();
+  for (q = 0; q <= i; q++)
     {
-      fprintf (stderr,
-               "Test incomplete, have no thumbnail extractor available.\n");
-      return 0;                 /* can not test, no thumbnailer */
+      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);
     }
-  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))
+  
+  //check meta_data_test_equal
+  if (GNUNET_YES != GNUNET_CONTAINER_meta_data_test_equal(meta, meta2))
     {
-      GNUNET_break (0);
-      EXTRACTOR_removeAll (ex);
-      GNUNET_CONTAINER_meta_data_destroy (m);
-      return 1;
+      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);
     }
-  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)
+  // 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_break (0);
-      GNUNET_CONTAINER_meta_data_destroy (d);
-      return 1;
+      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_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_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_break (0);
-      GNUNET_CONTAINER_meta_data_destroy (d);
-      return 1;
+      GNUNET_CONTAINER_meta_data_destroy(meta2);
+      ABORT(meta);
     }
-  GNUNET_free (date);
-  GNUNET_CONTAINER_meta_data_destroy (d);
-  return 0;
+  GNUNET_CONTAINER_meta_data_destroy(meta2);
+  GNUNET_CONTAINER_meta_data_destroy(meta);
+  return 0; 
 }
 
 
@@ -252,11 +374,14 @@ 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 */