gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] branch master updated: new test


From: gnunet
Subject: [taler-exchange] branch master updated: new test
Date: Tue, 15 Nov 2022 11:46:42 +0100

This is an automated email from the git hooks/post-receive script.

joseph-xu pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 656ec29d new test
656ec29d is described below

commit 656ec29d5e30f4020046b2126254dda22dd5bc25
Author: Joseph <Joseph.xu@efrei.net>
AuthorDate: Tue Nov 15 05:46:26 2022 -0500

    new test
---
 src/exchangedb/Makefile.am             |  20 +++-
 src/exchangedb/pg_reserves_in_insert.c |  24 ++--
 src/exchangedb/test_exchangedb_by_j.c  | 194 +++++++++++++++++++++++++++++++++
 3 files changed, 220 insertions(+), 18 deletions(-)

diff --git a/src/exchangedb/Makefile.am b/src/exchangedb/Makefile.am
index ac300a9c..4d892efe 100644
--- a/src/exchangedb/Makefile.am
+++ b/src/exchangedb/Makefile.am
@@ -274,12 +274,12 @@ libtalerexchangedb_la_LDFLAGS = \
 
 check_PROGRAMS = \
   test-exchangedb-postgres \
-  bench-db-postgres
-
+  bench-db-postgres\
+  test-exchangedb-by-j-postgres
 AM_TESTS_ENVIRONMENT=export TALER_PREFIX=$${TALER_PREFIX:-@libdir@};export 
PATH=$${TALER_PREFIX:-@prefix@}/bin:$$PATH;
 TESTS = \
-  test-exchangedb-postgres
-
+  test-exchangedb-postgres\
+  test-exchangedb-by-j-postgres
 test_exchangedb_postgres_SOURCES = \
   test_exchangedb.c
 test_exchangedb_postgres_LDADD = \
@@ -292,6 +292,18 @@ test_exchangedb_postgres_LDADD = \
   -lgnunetutil \
   $(XLIB)
 
+test_exchangedb_by_j_postgres_SOURCES = \
+  test_exchangedb_by_j.c
+test_exchangedb_by_j_postgres_LDADD = \
+  libtalerexchangedb.la \
+  $(top_builddir)/src/json/libtalerjson.la \
+  $(top_builddir)/src/util/libtalerutil.la \
+  $(top_builddir)/src/pq/libtalerpq.la \
+  -ljansson \
+  -lgnunetjson \
+  -lgnunetutil \
+  $(XLIB)
+
 bench_db_postgres_SOURCES = \
   bench_db.c
 bench_db_postgres_LDADD = \
diff --git a/src/exchangedb/pg_reserves_in_insert.c 
b/src/exchangedb/pg_reserves_in_insert.c
index 38524bd6..2fcca241 100644
--- a/src/exchangedb/pg_reserves_in_insert.c
+++ b/src/exchangedb/pg_reserves_in_insert.c
@@ -59,12 +59,12 @@ notify_on_reserve (struct PostgresClosure *pg,
 
 enum GNUNET_DB_QueryStatus
 TEH_PG_reserves_in_insert (void *cls,
-                             const struct TALER_ReservePublicKeyP *reserve_pub,
-                             const struct TALER_Amount *balance,
-                             struct GNUNET_TIME_Timestamp execution_time,
-                             const char *sender_account_details,
-                             const char *exchange_account_section,
-                             uint64_t wire_ref)
+                           const struct TALER_ReservePublicKeyP *reserve_pub,
+                           const struct TALER_Amount *balance,
+                           struct GNUNET_TIME_Timestamp execution_time,
+                           const char *sender_account_details,
+                           const char *exchange_account_section,
+                           uint64_t wire_ref)
 {
   struct PostgresClosure *pg = cls;
   enum GNUNET_DB_QueryStatus qs1;
@@ -107,9 +107,6 @@ TEH_PG_reserves_in_insert (void *cls,
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Reserve does not exist; creating a new one\n");
     /* Note: query uses 'on conflict do nothing' */
-
-
-
     PREPARE (pg,
              "reserve_create",
              "INSERT INTO reserves "
@@ -122,7 +119,6 @@ TEH_PG_reserves_in_insert (void *cls,
              "($1, $2, $3, $4, $5)"
              " ON CONFLICT DO NOTHING"
              " RETURNING reserve_uuid;");
-
     qs1 = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
                                                     "reserve_create",
                                                     params,
@@ -154,7 +150,6 @@ TEH_PG_reserves_in_insert (void *cls,
       GNUNET_PQ_query_param_end
     };
 
-
     PREPARE (pg,
              "reserves_in_add_transaction",
              "INSERT INTO reserves_in "
@@ -207,7 +202,7 @@ TEH_PG_reserves_in_insert (void *cls,
       return cs;
     if (GNUNET_OK !=
         TEH_PG_start (pg,
-                        "reserve-update-serializable"))
+                      "reserve-update-serializable"))
     {
       GNUNET_break (0);
       return GNUNET_DB_STATUS_HARD_ERROR;
@@ -217,7 +212,7 @@ TEH_PG_reserves_in_insert (void *cls,
     enum GNUNET_DB_QueryStatus reserve_exists;
 
     reserve_exists = TEH_PG_reserves_get (pg,
-                                            &reserve);
+                                          &reserve);
     switch (reserve_exists)
     {
     case GNUNET_DB_STATUS_HARD_ERROR:
@@ -287,7 +282,8 @@ TEH_PG_reserves_in_insert (void *cls,
     if (cs < 0)
       return cs;
     if (GNUNET_OK !=
-       TEH_PG_start_read_committed (pg, "reserve-insert-continued"))
+        TEH_PG_start_read_committed (pg,
+                                     "reserve-insert-continued"))
     {
       GNUNET_break (0);
       return GNUNET_DB_STATUS_HARD_ERROR;
diff --git a/src/exchangedb/test_exchangedb_by_j.c 
b/src/exchangedb/test_exchangedb_by_j.c
new file mode 100644
index 00000000..b17b51bc
--- /dev/null
+++ b/src/exchangedb/test_exchangedb_by_j.c
@@ -0,0 +1,194 @@
+/*
+  This file is part of TALER
+  Copyright (C) 2014-2022 Taler Systems SA
+
+  TALER 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 3, or (at your option) any later version.
+
+  TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+  A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License along with
+  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file exchangedb/test_exchangedb_by_j.c
+ * @brief test cases for DB interaction functions
+ * @author Joseph Xu
+ */
+#include "platform.h"
+#include "taler_exchangedb_lib.h"
+#include "taler_json_lib.h"
+#include "taler_exchangedb_plugin.h"
+
+/**
+ * Global result from the testcase.
+ */
+static int result;
+
+/**
+ * Report line of error if @a cond is true, and jump to label "drop".
+ */
+#define FAILIF(cond)                            \
+  do {                                          \
+    if (! (cond)) { break;}                     \
+    GNUNET_break (0);                           \
+    goto drop;                                  \
+  } while (0)
+
+
+/**
+ * Initializes @a ptr with random data.
+ */
+#define RND_BLK(ptr)                                                    \
+  GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, ptr, sizeof (*ptr))
+
+/**
+ * Initializes @a ptr with zeros.
+ */
+#define ZR_BLK(ptr) \
+  memset (ptr, 0, sizeof (*ptr))
+
+
+/**
+ * Currency we use.  Must match test-exchange-db-*.conf.
+ */
+#define CURRENCY "EUR"
+
+/**
+ * Database plugin under test.
+ */
+static struct TALER_EXCHANGEDB_Plugin *plugin;
+
+
+/**
+ * Main function that will be run by the scheduler.
+ *
+ * @param cls closure with config
+ */
+static void
+run (void *cls)
+{
+  struct GNUNET_CONFIGURATION_Handle *cfg = cls;
+  const uint32_t num_partitions = 10;
+
+  if (NULL ==
+      (plugin = TALER_EXCHANGEDB_plugin_load (cfg)))
+  {
+    GNUNET_break (0);
+    result = 77;
+    return;
+  }
+  (void) plugin->drop_tables (plugin->cls);
+  if (GNUNET_OK !=
+      plugin->create_tables (plugin->cls))
+  {
+    GNUNET_break (0);
+    result = 77;
+    goto cleanup;
+  }
+  if (GNUNET_OK !=
+      plugin->setup_partitions (plugin->cls,
+                                num_partitions))
+  {
+    GNUNET_break (0);
+    result = 77;
+    goto cleanup;
+  }
+
+  for (unsigned int i = 0; i< 5;i++)
+  {
+    static unsigned int batches[]={1, 2, 4, 16, 64};
+    const char *sndr = "payto://x-taler-bank/localhost:8080/1";
+    struct TALER_Amount value;
+    unsigned int batch_size = batches[i];
+    struct GNUNET_TIME_Timestamp now;
+    struct GNUNET_TIME_Relative duration;
+    struct TALER_ReservePublicKeyP reserve_pub;
+    
+    now = GNUNET_TIME_timestamp_get();
+    RND_BLK (&reserve_pub);
+    GNUNET_assert (GNUNET_OK ==
+                   TALER_string_to_amount (CURRENCY ":1.000010",
+                                           &value));
+    plugin->start (plugin->cls,
+                   "test_by_exchange_j");
+    for (unsigned int k=0;k<batch_size;k++)
+    {
+      FAILIF (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT !=
+              plugin->reserves_in_insert (plugin->cls,
+                                          &reserve_pub,
+                                          &value,
+                                          now,
+                                          sndr,
+                                          "section",
+                                          4));
+    }
+    plugin->commit (plugin->cls);
+    duration = GNUNET_TIME_absolute_get_duration(now.abs_time);
+    fprintf (stderr,
+             "for a batchsize equal to %d it took %s\n",
+             batch_size,
+             GNUNET_STRINGS_relative_time_to_string(duration,
+                                                    GNUNET_YES) );
+  }
+ drop:
+  GNUNET_break (GNUNET_OK ==
+                plugin->drop_tables (plugin->cls));
+cleanup:
+  TALER_EXCHANGEDB_plugin_unload (plugin);
+  plugin = NULL;
+}
+
+
+int
+main (int argc,
+      char *const argv[])
+{
+  const char *plugin_name;
+  char *config_filename;
+  char *testname;
+  struct GNUNET_CONFIGURATION_Handle *cfg;
+  
+  (void) argc;
+  result = -1;
+  if (NULL == (plugin_name = strrchr (argv[0], (int) '-')))
+  {
+    GNUNET_break (0);
+    return -1;
+  }
+  GNUNET_log_setup (argv[0],
+                    "DEBUG",
+                    NULL);
+  plugin_name++;
+  (void) GNUNET_asprintf (&testname,
+                          "test-exchange-db-%s",
+                          plugin_name);
+  (void) GNUNET_asprintf (&config_filename,
+                          "%s.conf",
+                          testname);
+  fprintf (stderr,
+           "Using config: %s\n",
+           config_filename);
+  cfg = GNUNET_CONFIGURATION_create ();
+  if (GNUNET_OK !=
+      GNUNET_CONFIGURATION_parse (cfg,
+                                  config_filename))
+  {
+    GNUNET_break (0);
+    GNUNET_free (config_filename);
+    GNUNET_free (testname);
+    return 2;
+  }
+  GNUNET_SCHEDULER_run (&run,
+                        cfg);
+  GNUNET_CONFIGURATION_destroy (cfg);
+  GNUNET_free (config_filename);
+  GNUNET_free (testname);
+  return result;
+}
+
+
+/* end of test_exchangedb.c */

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]