guix-env: some update.
[oweals/gnunet.git] / src / datastore / test_datastore_api.c
index 43f6e9fa6a5171c1650187d9bbbeb156a074a8f7..63927a3643b094aa855002574573a69f3ac338de 100644 (file)
@@ -30,6 +30,7 @@
 #include "gnunet_util_lib.h"
 #include "gnunet_protocols.h"
 #include "gnunet_datastore_service.h"
+#include "gnunet_datastore_plugin.h"
 #include "gnunet_testing_lib.h"
 
 
@@ -129,8 +130,6 @@ enum RunPhase
   RP_PUT_MULTIPLE_NEXT = 8,
   RP_GET_MULTIPLE = 9,
   RP_GET_MULTIPLE_NEXT = 10,
-  RP_UPDATE = 11,
-  RP_UPDATE_VALIDATE = 12,
 
   /**
    * Execution failed with some kind of error.
@@ -157,8 +156,6 @@ struct CpsRunContext
   void *data;
   size_t size;
 
-  uint64_t uid;
-  uint64_t offset;
   uint64_t first_uid;
 };
 
@@ -234,6 +231,7 @@ check_value (void *cls,
              enum GNUNET_BLOCK_Type type,
              uint32_t priority,
              uint32_t anonymity,
+             uint32_t replication,
              struct GNUNET_TIME_Absolute expiration,
              uint64_t uid)
 {
@@ -268,7 +266,6 @@ check_value (void *cls,
   GNUNET_assert (priority == get_priority (i));
   GNUNET_assert (anonymity == get_anonymity (i));
   GNUNET_assert (expiration.abs_value_us == get_expiration (i).abs_value_us);
-  crc->offset++;
   if (crc->i == 0)
   {
     crc->phase = RP_DEL;
@@ -287,6 +284,7 @@ delete_value (void *cls,
               enum GNUNET_BLOCK_Type type,
               uint32_t priority,
               uint32_t anonymity,
+              uint32_t replication,
               struct GNUNET_TIME_Absolute expiration,
               uint64_t uid)
 {
@@ -312,6 +310,7 @@ check_nothing (void *cls,
                enum GNUNET_BLOCK_Type type,
                uint32_t priority,
                uint32_t anonymity,
+               uint32_t replication,
                struct GNUNET_TIME_Absolute expiration,
                uint64_t uid)
 {
@@ -333,6 +332,7 @@ check_multiple (void *cls,
                 enum GNUNET_BLOCK_Type type,
                 uint32_t priority,
                 uint32_t anonymity,
+                uint32_t replication,
                 struct GNUNET_TIME_Absolute expiration,
                 uint64_t uid)
 {
@@ -344,45 +344,16 @@ check_multiple (void *cls,
   case RP_GET_MULTIPLE:
     crc->phase = RP_GET_MULTIPLE_NEXT;
     crc->first_uid = uid;
-    crc->offset++;
     break;
   case RP_GET_MULTIPLE_NEXT:
     GNUNET_assert (uid != crc->first_uid);
-    crc->phase = RP_UPDATE;
+    crc->phase = RP_DONE;
     break;
   default:
     GNUNET_break (0);
     crc->phase = RP_ERROR;
     break;
   }
-  if (priority == get_priority (42))
-    crc->uid = uid;
-  GNUNET_SCHEDULER_add_now (&run_continuation, crc);
-}
-
-
-static void
-check_update (void *cls,
-              const struct GNUNET_HashCode *key,
-              size_t size,
-              const void *data,
-              enum GNUNET_BLOCK_Type type,
-              uint32_t priority,
-              uint32_t anonymity,
-              struct GNUNET_TIME_Absolute expiration,
-              uint64_t uid)
-{
-  struct CpsRunContext *crc = cls;
-
-  GNUNET_assert (key != NULL);
-  if ((anonymity == get_anonymity (42)) && (size == get_size (42)) &&
-      (priority == get_priority (42) + 100))
-    crc->phase = RP_DONE;
-  else
-  {
-    GNUNET_assert (size == get_size (43));
-    crc->offset++;
-  }
   GNUNET_SCHEDULER_add_now (&run_continuation, crc);
 }
 
@@ -427,7 +398,8 @@ run_continuation (void *cls)
                         sizeof (int),
                         &crc->key);
     GNUNET_DATASTORE_get_key (datastore,
-                              crc->offset,
+                              0,
+                              false,
                               &crc->key,
                               get_type (crc->i),
                               1,
@@ -444,7 +416,8 @@ run_continuation (void *cls)
     GNUNET_CRYPTO_hash (&crc->i, sizeof (int), &crc->key);
     GNUNET_assert (NULL !=
                    GNUNET_DATASTORE_get_key (datastore,
-                                             crc->offset,
+                                             0,
+                                             false,
                                              &crc->key,
                                              get_type (crc->i),
                                              1,
@@ -477,9 +450,15 @@ run_continuation (void *cls)
                 crc->i);
     GNUNET_CRYPTO_hash (&crc->i, sizeof (int), &crc->key);
     GNUNET_assert (NULL !=
-                   GNUNET_DATASTORE_get_key (datastore, crc->offset, &crc->key,
-                                             get_type (crc->i), 1, 1,
-                                             &check_nothing, crc));
+                   GNUNET_DATASTORE_get_key (datastore,
+                                             0,
+                                             false,
+                                             &crc->key,
+                                             get_type (crc->i),
+                                             1,
+                                             1,
+                                             &check_nothing,
+                                             crc));
     break;
   case RP_RESERVE:
     crc->phase = RP_PUT_MULTIPLE;
@@ -510,37 +489,26 @@ run_continuation (void *cls)
   case RP_GET_MULTIPLE:
     GNUNET_assert (NULL !=
                    GNUNET_DATASTORE_get_key (datastore,
-                                             crc->offset,
-                                             &crc->key,
-                                             get_type (42), 1, 1,
-                                             &check_multiple, crc));
-    break;
-  case RP_GET_MULTIPLE_NEXT:
-    GNUNET_assert (NULL !=
-                   GNUNET_DATASTORE_get_key (datastore,
-                                             crc->offset,
+                                             0,
+                                             false,
                                              &crc->key,
                                              get_type (42),
-                                             1, 1,
-                                             &check_multiple, crc));
-    break;
-  case RP_UPDATE:
-    GNUNET_assert (crc->uid > 0);
-    crc->phase = RP_UPDATE_VALIDATE;
-    GNUNET_DATASTORE_update (datastore,
-                             crc->uid, 100,
-                             get_expiration (42), 1,
-                             1,
-                             &check_success, crc);
+                                             1,
+                                             1,
+                                             &check_multiple,
+                                             crc));
     break;
-  case RP_UPDATE_VALIDATE:
+  case RP_GET_MULTIPLE_NEXT:
     GNUNET_assert (NULL !=
                    GNUNET_DATASTORE_get_key (datastore,
-                                             crc->offset,
+                                             crc->first_uid + 1,
+                                             false,
                                              &crc->key,
                                              get_type (42),
-                                             1, 1,
-                                             &check_update, crc));
+                                             1,
+                                             1,
+                                             &check_multiple,
+                                             crc));
     break;
   case RP_DONE:
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -650,6 +618,66 @@ run (void *cls,
 }
 
 
+/**
+ * Function invoked to notify service of disk utilization
+ * changes.
+ *
+ * @param cls closure
+ * @param delta change in disk utilization,
+ *        0 for "reset to empty"
+ */
+static void
+duc_dummy (void *cls,
+          int delta)
+{
+  /* intentionally empty */
+}
+
+
+/**
+ * check if plugin is actually working 
+ */
+static int
+test_plugin (const char *cfg_name)
+{
+  char libname[128];
+  struct GNUNET_CONFIGURATION_Handle *cfg;
+  struct GNUNET_DATASTORE_PluginFunctions *api;
+  struct GNUNET_DATASTORE_PluginEnvironment env;
+  
+  cfg = GNUNET_CONFIGURATION_create ();
+  if (GNUNET_OK !=
+      GNUNET_CONFIGURATION_load (cfg,
+                                cfg_name))
+  {
+    GNUNET_CONFIGURATION_destroy (cfg);
+    fprintf (stderr,
+            "Failed to load configuration %s\n",
+            cfg_name);
+    return 1;
+  }
+  memset (&env, 0, sizeof (env));
+  env.cfg = cfg;
+  env.duc = &duc_dummy;
+  GNUNET_snprintf (libname,
+                  sizeof (libname),
+                   "libgnunet_plugin_datastore_%s",
+                   plugin_name);
+  api = GNUNET_PLUGIN_load (libname, &env);
+  if (NULL == api)
+  {
+    GNUNET_CONFIGURATION_destroy (cfg);
+    fprintf (stderr,
+            "Failed to load plugin `%s'\n",
+            libname);
+    return 77;
+  }
+  GNUNET_PLUGIN_unload (libname, api);
+  GNUNET_CONFIGURATION_destroy (cfg);
+  return 0;
+}
+
+
 /**
  * Entry point into the test. Determines which configuration / plugin
  * we are running with based on the name of the binary and starts
@@ -664,12 +692,17 @@ main (int argc,
       char *argv[])
 {
   char cfg_name[128];
-
+  int ret;
+    
   plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]);
   GNUNET_snprintf (cfg_name,
                    sizeof (cfg_name),
                    "test_datastore_api_data_%s.conf",
                    plugin_name);
+  ret = test_plugin (cfg_name);
+  if (0 != ret)
+    return ret;
+  /* run actual test */
   if (0 !=
       GNUNET_TESTING_peer_run ("test-gnunet-datastore",
                               cfg_name,