- fixes
[oweals/gnunet.git] / src / namestore / test_namestore_api.c
index a72530d13f6dd11ee509c19d05aa461a25dd2bbe..a69f276656e1deac90fcdd1e2b286679bd1e311a 100644 (file)
@@ -25,7 +25,7 @@
 #include "gnunet_common.h"
 #include "gnunet_namestore_service.h"
 
-#define VERBOSE GNUNET_EXTRA_LOGGING
+#define VERBOSE GNUNET_NO
 
 #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10)
 
@@ -34,13 +34,21 @@ static struct GNUNET_NAMESTORE_Handle * nsh;
 static GNUNET_SCHEDULER_TaskIdentifier endbadly_task;
 static struct GNUNET_OS_Process *arm;
 
+static struct GNUNET_CRYPTO_RsaPrivateKey * privkey;
+static struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded pubkey;
+static GNUNET_HashCode zone;
+
 static int res;
 
+#define TEST_RECORD_TYPE 1234
+#define TEST_RECORD_DATALEN 123
+#define TEST_RECORD_DATA 'a'
+
 
 static void
 start_arm (const char *cfgname)
 {
-  arm = GNUNET_OS_start_process (NULL, NULL, "gnunet-service-arm",
+  arm = GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm",
                                "gnunet-service-arm", "-c", cfgname,
 #if VERBOSE_PEERS
                                "-L", "DEBUG",
@@ -76,6 +84,10 @@ endbadly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
     GNUNET_NAMESTORE_disconnect (nsh, GNUNET_YES);
   nsh = NULL;
 
+  if (privkey != NULL)
+    GNUNET_CRYPTO_rsa_key_free (privkey);
+  privkey = NULL;
+
   if (NULL != arm)
     stop_arm();
 
@@ -92,6 +104,10 @@ end (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
     endbadly_task = GNUNET_SCHEDULER_NO_TASK;
   }
 
+  if (privkey != NULL)
+    GNUNET_CRYPTO_rsa_key_free (privkey);
+  privkey = NULL;
+
   if (nsh != NULL)
     GNUNET_NAMESTORE_disconnect (nsh, GNUNET_YES);
   nsh = NULL;
@@ -112,19 +128,60 @@ void name_lookup_proc (void *cls,
                             const struct GNUNET_NAMESTORE_RecordData *rd,
                             const struct GNUNET_CRYPTO_RsaSignature *signature)
 {
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "name_lookup_proc %p `%s' %i %p %p\n", zone_key, name, rd_count, rd, signature);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Namestore lookup result %p `%s' %i %p %p\n", zone_key, name, rd_count, rd, signature);
   res = 0;
   GNUNET_SCHEDULER_add_now(&end, NULL);
 }
 
+void put_cont (void *cls, int32_t success, const char *emsg)
+{
+  char * name = cls;
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Name store added record for `%s': %s\n", name, (success == GNUNET_OK) ? "SUCCESS" : "FAIL");
+
+  GNUNET_NAMESTORE_lookup_record (nsh, &zone, name, 0, &name_lookup_proc, NULL);
+}
+
+void
+delete_existing_db (const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+  char *afsdir;
+
+  if (GNUNET_OK ==
+      GNUNET_CONFIGURATION_get_value_filename (cfg, "namestore-sqlite",
+                                               "FILENAME", &afsdir))
+  {
+    if (GNUNET_OK == GNUNET_DISK_file_test (afsdir))
+      if (GNUNET_OK == GNUNET_DISK_file_test (afsdir))
+        if (GNUNET_OK == GNUNET_DISK_directory_remove(afsdir))
+          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Deleted existing database `%s' \n", afsdir);
+   GNUNET_free (afsdir);
+  }
+
+}
+
 static void
 run (void *cls, char *const *args, const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
+  delete_existing_db(cfg);
   endbadly_task = GNUNET_SCHEDULER_add_delayed(TIMEOUT,endbadly, NULL);
 
-  GNUNET_HashCode zone;
-  GNUNET_CRYPTO_hash_create_random(GNUNET_CRYPTO_QUALITY_WEAK, &zone);
+  privkey = GNUNET_CRYPTO_rsa_key_create_from_file("hostkey");
+  GNUNET_assert (privkey != NULL);
+  GNUNET_CRYPTO_rsa_key_get_public(privkey, &pubkey);
+
+  GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, &zone);
+
+
+  struct GNUNET_CRYPTO_RsaSignature signature;
+  struct GNUNET_NAMESTORE_RecordData rd;
+
+  rd.expiration = GNUNET_TIME_absolute_get();
+  rd.record_type = TEST_RECORD_TYPE;
+  rd.data_size = TEST_RECORD_DATALEN;
+  rd.data = GNUNET_malloc(TEST_RECORD_DATALEN);
+  memset ((char *) rd.data, 'a', TEST_RECORD_DATALEN);
   char * name = "dummy.dummy.gnunet";
 
   start_arm (cfgfile);
@@ -133,7 +190,12 @@ run (void *cls, char *const *args, const char *cfgfile,
   nsh = GNUNET_NAMESTORE_connect (cfg);
   GNUNET_break (NULL != nsh);
 
-  GNUNET_NAMESTORE_lookup_record (nsh, &zone, name, 0, &name_lookup_proc, NULL);
+  GNUNET_NAMESTORE_record_put (nsh, &pubkey, name,
+                              GNUNET_TIME_absolute_get_forever(),
+                              1, &rd, &signature, put_cont, name);
+
+  GNUNET_free ((void *)rd.data);
+
 }
 
 static int