gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: -new testing APIs


From: gnunet
Subject: [taler-exchange] branch master updated: -new testing APIs
Date: Fri, 20 Jan 2023 21:30:08 +0100

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

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 5b26bd3b -new testing APIs
5b26bd3b is described below

commit 5b26bd3b83d1b24d937fb8d78135514897ddfb69
Author: Christian Grothoff <grothoff@gnunet.org>
AuthorDate: Fri Jan 20 19:11:36 2023 +0100

    -new testing APIs
---
 src/include/taler_testing_lib.h                 |  43 ++++-
 src/testing/testing_api_cmd_set_officer.c       | 204 ++++++++++++++++++++++++
 src/testing/testing_api_cmd_take_aml_decision.c | 204 ++++++++++++++++++++++++
 3 files changed, 450 insertions(+), 1 deletion(-)

diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h
index 846be418..a2df5c33 100644
--- a/src/include/taler_testing_lib.h
+++ b/src/include/taler_testing_lib.h
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2018-2022 Taler Systems SA
+  (C) 2018-2023 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
@@ -2710,6 +2710,47 @@ TALER_TESTING_cmd_purse_deposit_coins (
   ...);
 
 
+/**
+ * Setup AML officer.
+ *
+ * @param label command label
+ * @param ref_cmd command that previously created the
+ *       officer, NULL to create one this time
+ * @param name full legal name of the officer to use
+ * @param is_active true to set the officer to active
+ * @param read_only true to restrict the officer to read-only
+ * @return the command
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_set_officer (
+  const char *label,
+  const char *ref_cmd,
+  const char *name,
+  bool is_active,
+  bool read_only);
+
+
+/**
+ * Make AML decision.
+ *
+ * @param label command label
+ * @param ref_officer command that previously created an
+ *       officer
+ * @param ref_operation command that previously created an
+ *       h_payto which to make an AML decision about
+ * @param new_threshold new threshold to set
+ * @param block set to true to block the account
+ * @return the command
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_take_aml_decision (
+  const char *label,
+  const char *ref_officer,
+  const char *ref_operation,
+  const char *new_threshold,
+  bool block);
+
+
 /* *** Generic trait logic for implementing traits ********* */
 
 
diff --git a/src/testing/testing_api_cmd_set_officer.c 
b/src/testing/testing_api_cmd_set_officer.c
new file mode 100644
index 00000000..2606a6e4
--- /dev/null
+++ b/src/testing/testing_api_cmd_set_officer.c
@@ -0,0 +1,204 @@
+/*
+  This file is part of TALER
+  Copyright (C) 2023 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 testing/testing_api_cmd_set_officer.c
+ * @brief command for testing /management/XXX
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include "taler_json_lib.h"
+#include <gnunet/gnunet_curl_lib.h>
+#include "taler_testing_lib.h"
+#include "taler_signatures.h"
+#include "backoff.h"
+
+
+/**
+ * State for a "set_officer" CMD.
+ */
+struct SetOfficerState
+{
+
+  /**
+   * Auditor enable handle while operation is running.
+   */
+  struct TALER_EXCHANGE_ManagementAuditorEnableHandle *dh;
+
+  /**
+   * Our interpreter.
+   */
+  struct TALER_TESTING_Interpreter *is;
+
+  /**
+   * Reference to command to previous set officer
+   * to update, or NULL.
+   */
+  const char *ref_cmd;
+
+  /**
+   * Name to use for the officer.
+   */
+  const char *name;
+
+  // FIXME: add trait with officer-priv here!
+
+  /**
+   * Is the officer supposed to be enabled?
+   */
+  bool is_active;
+
+  /**
+   * Is access supposed to be read-only?
+   */
+  bool read_only;
+
+};
+
+
+/**
+ * Callback to analyze the /management/XXX response, just used to check
+ * if the response code is acceptable.
+ *
+ * @param cls closure.
+ * @param hr HTTP response details
+ */
+static void
+set_officer_cb (void *cls,
+                const struct TALER_EXCHANGE_HttpResponse *hr)
+{
+  struct SetOfficerState *ds = cls;
+
+  ds->dh = NULL;
+  if (MHD_HTTP_NO_CONTENT != hr->response_code)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Unexpected response code %u to command %s in %s:%u\n",
+                hr->http_status,
+                ds->is->commands[ds->is->ip].label,
+                __FILE__,
+                __LINE__);
+    json_dumpf (hr->reply,
+                stderr,
+                0);
+    TALER_TESTING_interpreter_fail (ds->is);
+    return;
+  }
+  TALER_TESTING_interpreter_next (ds->is);
+}
+
+
+/**
+ * Run the command.
+ *
+ * @param cls closure.
+ * @param cmd the command to execute.
+ * @param is the interpreter state.
+ */
+static void
+set_officer_run (void *cls,
+                 const struct TALER_TESTING_Command *cmd,
+                 struct TALER_TESTING_Interpreter *is)
+{
+  struct SetOfficerState *ds = cls;
+  struct GNUNET_TIME_Timestamp now;
+  struct TALER_MasterSignatureP master_sig;
+
+  (void) cmd;
+  now = GNUNET_TIME_timestamp_get ();
+  ds->is = is;
+  TALER_exchange_offline_set_officer_sign (&is->auditor_pub,
+                                           is->auditor_url,
+                                           now,
+                                           &is->master_priv,
+                                           &master_sig);
+  ds->dh = TALER_EXCHANGE_management_enable_auditor (
+    is->ctx,
+    is->exchange_url,
+    &is->auditor_pub,
+    is->auditor_url,
+    "test-case auditor", /* human-readable auditor name */
+    now,
+    &master_sig,
+    &set_officer_cb,
+    ds);
+  if (NULL == ds->dh)
+  {
+    GNUNET_break (0);
+    TALER_TESTING_interpreter_fail (is);
+    return;
+  }
+}
+
+
+/**
+ * Free the state of a "set_officer" CMD, and possibly cancel a
+ * pending operation thereof.
+ *
+ * @param cls closure, must be a `struct SetOfficerState`.
+ * @param cmd the command which is being cleaned up.
+ */
+static void
+set_officer_cleanup (void *cls,
+                     const struct TALER_TESTING_Command *cmd)
+{
+  struct SetOfficerState *ds = cls;
+
+  if (NULL != ds->dh)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Command %u (%s) did not complete\n",
+                ds->is->ip,
+                cmd->label);
+    TALER_EXCHANGE_management_enable_auditor_cancel (ds->dh);
+    ds->dh = NULL;
+  }
+  GNUNET_free (ds);
+}
+
+
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_set_officer (
+  const char *label,
+  const char *ref_cmd,
+  const char *name,
+  bool is_active,
+  bool read_only)
+{
+  struct SetOfficerState *ds;
+
+  ds = GNUNET_new (struct SetOfficerState);
+  ds->ref_cmd = ref_cmd;
+  ds->name = name;
+  ds->is_active = is_active;
+  ds->read_only = read_only;
+  {
+    struct TALER_TESTING_Command cmd = {
+      .cls = ds,
+      .label = label,
+      .run = &set_officer_run,
+      .cleanup = &set_officer_cleanup
+                 // FIXME: expose trait with officer-priv here!
+    };
+
+    return cmd;
+  }
+}
+
+
+/* end of testing_api_cmd_set_officer.c */
diff --git a/src/testing/testing_api_cmd_take_aml_decision.c 
b/src/testing/testing_api_cmd_take_aml_decision.c
new file mode 100644
index 00000000..4abb585e
--- /dev/null
+++ b/src/testing/testing_api_cmd_take_aml_decision.c
@@ -0,0 +1,204 @@
+/*
+  This file is part of TALER
+  Copyright (C) 2023 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 testing/testing_api_cmd_take_aml_decision.c
+ * @brief command for testing /management/XXX
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include "taler_json_lib.h"
+#include <gnunet/gnunet_curl_lib.h>
+#include "taler_testing_lib.h"
+#include "taler_signatures.h"
+#include "backoff.h"
+
+
+/**
+ * State for a "take_aml_decision" CMD.
+ */
+struct AmlDecisionState
+{
+
+  /**
+   * Auditor enable handle while operation is running.
+   */
+  struct TALER_EXCHANGE_ManagementAuditorEnableHandle *dh;
+
+  /**
+   * Our interpreter.
+   */
+  struct TALER_TESTING_Interpreter *is;
+
+  /**
+   * Reference to command to previous set officer
+   * to update, or NULL.
+   */
+  const char *ref_cmd;
+
+  /**
+   * Name to use for the officer.
+   */
+  const char *name;
+
+  // FIXME: add trait with officer-priv here!
+
+  /**
+   * Is the officer supposed to be enabled?
+   */
+  bool is_active;
+
+  /**
+   * Is access supposed to be read-only?
+   */
+  bool read_only;
+
+};
+
+
+/**
+ * Callback to analyze the /management/XXX response, just used to check
+ * if the response code is acceptable.
+ *
+ * @param cls closure.
+ * @param hr HTTP response details
+ */
+static void
+take_aml_decision_cb (void *cls,
+                      const struct TALER_EXCHANGE_HttpResponse *hr)
+{
+  struct AmlDecisionState *ds = cls;
+
+  ds->dh = NULL;
+  if (MHD_HTTP_NO_CONTENT != hr->response_code)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Unexpected response code %u to command %s in %s:%u\n",
+                hr->http_status,
+                ds->is->commands[ds->is->ip].label,
+                __FILE__,
+                __LINE__);
+    json_dumpf (hr->reply,
+                stderr,
+                0);
+    TALER_TESTING_interpreter_fail (ds->is);
+    return;
+  }
+  TALER_TESTING_interpreter_next (ds->is);
+}
+
+
+/**
+ * Run the command.
+ *
+ * @param cls closure.
+ * @param cmd the command to execute.
+ * @param is the interpreter state.
+ */
+static void
+take_aml_decision_run (void *cls,
+                       const struct TALER_TESTING_Command *cmd,
+                       struct TALER_TESTING_Interpreter *is)
+{
+  struct AmlDecisionState *ds = cls;
+  struct GNUNET_TIME_Timestamp now;
+  struct TALER_MasterSignatureP master_sig;
+
+  (void) cmd;
+  now = GNUNET_TIME_timestamp_get ();
+  ds->is = is;
+  TALER_exchange_offline_take_aml_decision_sign (&is->auditor_pub,
+                                                 is->auditor_url,
+                                                 now,
+                                                 &is->master_priv,
+                                                 &master_sig);
+  ds->dh = TALER_EXCHANGE_management_enable_auditor (
+    is->ctx,
+    is->exchange_url,
+    &is->auditor_pub,
+    is->auditor_url,
+    "test-case auditor", /* human-readable auditor name */
+    now,
+    &master_sig,
+    &take_aml_decision_cb,
+    ds);
+  if (NULL == ds->dh)
+  {
+    GNUNET_break (0);
+    TALER_TESTING_interpreter_fail (is);
+    return;
+  }
+}
+
+
+/**
+ * Free the state of a "take_aml_decision" CMD, and possibly cancel a
+ * pending operation thereof.
+ *
+ * @param cls closure, must be a `struct AmlDecisionState`.
+ * @param cmd the command which is being cleaned up.
+ */
+static void
+take_aml_decision_cleanup (void *cls,
+                           const struct TALER_TESTING_Command *cmd)
+{
+  struct AmlDecisionState *ds = cls;
+
+  if (NULL != ds->dh)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Command %u (%s) did not complete\n",
+                ds->is->ip,
+                cmd->label);
+    TALER_EXCHANGE_management_enable_auditor_cancel (ds->dh);
+    ds->dh = NULL;
+  }
+  GNUNET_free (ds);
+}
+
+
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_take_aml_decision (
+  const char *label,
+  const char *ref_officer,
+  const char *ref_operation,
+  const char *new_threshold,
+  bool block)
+{
+  struct AmlDecisionState *ds;
+
+  ds = GNUNET_new (struct AmlDecisionState);
+  ds->ref_cmd = ref_cmd;
+  ds->name = name;
+  ds->is_active = is_active;
+  ds->read_only = read_only;
+  {
+    struct TALER_TESTING_Command cmd = {
+      .cls = ds,
+      .label = label,
+      .run = &take_aml_decision_run,
+      .cleanup = &take_aml_decision_cleanup
+                 // FIXME: expose trait with officer-priv here!
+    };
+
+    return cmd;
+  }
+}
+
+
+/* end of testing_api_cmd_take_aml_decision.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]