gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: implement testing_api_cmd_take_a


From: gnunet
Subject: [taler-exchange] branch master updated: implement testing_api_cmd_take_aml_decision.c
Date: Fri, 03 Feb 2023 12:57: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 f6877449 implement testing_api_cmd_take_aml_decision.c
f6877449 is described below

commit f6877449eb6aa994df6cc1a125f983ece1f6ad39
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Fri Feb 3 12:57:04 2023 +0100

    implement testing_api_cmd_take_aml_decision.c
---
 src/exchange/taler-exchange-httpd.c                |   3 +
 src/include/taler_exchange_service.h               |   1 +
 src/include/taler_testing_lib.h                    |   8 +-
 src/testing/Makefile.am                            |   1 +
 ...sion.c => testing_api_cmd_check_aml_decision.c} |  58 ++++++------
 src/testing/testing_api_cmd_revoke.c               |   2 -
 src/testing/testing_api_cmd_take_aml_decision.c    | 105 +++++++++++++++------
 7 files changed, 114 insertions(+), 64 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd.c 
b/src/exchange/taler-exchange-httpd.c
index 4bab9afa..7d83e70c 100644
--- a/src/exchange/taler-exchange-httpd.c
+++ b/src/exchange/taler-exchange-httpd.c
@@ -1578,7 +1578,10 @@ handle_mhd_request (void *cls,
           return MHD_NO;
         }
         if (cv > TALER_MHD_REQUEST_BUFFER_MAX)
+        {
+          GNUNET_break_op (0);
           return TALER_MHD_reply_request_too_large (connection);
+        }
       }
     }
   }
diff --git a/src/include/taler_exchange_service.h 
b/src/include/taler_exchange_service.h
index 7c61b7b5..7b301aec 100644
--- a/src/include/taler_exchange_service.h
+++ b/src/include/taler_exchange_service.h
@@ -433,6 +433,7 @@ struct TALER_EXCHANGE_HttpResponse
    * reply (too big, invalid JSON).
    */
   const json_t *reply;
+
   /**
    * Set to the human-readable 'hint' that is optionally
    * provided by the exchange together with errors. NULL
diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h
index 50563b9b..a54e05e5 100644
--- a/src/include/taler_testing_lib.h
+++ b/src/include/taler_testing_lib.h
@@ -2739,7 +2739,9 @@ TALER_TESTING_cmd_set_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
+ * @param justification justification given for the decision
+ * @param new_state new AML state for the account
+ * @param expected_response expected HTTP return status
  * @return the command
  */
 struct TALER_TESTING_Command
@@ -2748,7 +2750,9 @@ TALER_TESTING_cmd_take_aml_decision (
   const char *ref_officer,
   const char *ref_operation,
   const char *new_threshold,
-  bool block);
+  const char *justification,
+  enum TALER_AmlDecisionState new_state,
+  unsigned int expected_response);
 
 
 /**
diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am
index 9b636ad7..f92de42d 100644
--- a/src/testing/Makefile.am
+++ b/src/testing/Makefile.am
@@ -103,6 +103,7 @@ libtalertesting_la_SOURCES = \
   testing_api_cmd_signal.c \
   testing_api_cmd_sleep.c \
   testing_api_cmd_stat.c \
+  testing_api_cmd_take_aml_decision.c \
   testing_api_cmd_transfer_get.c \
   testing_api_cmd_wait.c \
   testing_api_cmd_wire.c \
diff --git a/src/testing/testing_api_cmd_take_aml_decision.c 
b/src/testing/testing_api_cmd_check_aml_decision.c
similarity index 71%
copy from src/testing/testing_api_cmd_take_aml_decision.c
copy to src/testing/testing_api_cmd_check_aml_decision.c
index f7c251dd..17e233c7 100644
--- a/src/testing/testing_api_cmd_take_aml_decision.c
+++ b/src/testing/testing_api_cmd_check_aml_decision.c
@@ -17,7 +17,7 @@
   <http://www.gnu.org/licenses/>
 */
 /**
- * @file testing/testing_api_cmd_take_aml_decision.c
+ * @file testing/testing_api_cmd_check_aml_decision.c
  * @brief command for testing /management/XXX
  * @author Christian Grothoff
  */
@@ -30,9 +30,9 @@
 
 
 /**
- * State for a "take_aml_decision" CMD.
+ * State for a "check_aml_decision" CMD.
  */
-struct AmlDecisionState
+struct AmlCheckState
 {
 
   /**
@@ -77,10 +77,10 @@ struct AmlDecisionState
  * @param hr HTTP response details
  */
 static void
-take_aml_decision_cb (void *cls,
-                      const struct TALER_EXCHANGE_HttpResponse *hr)
+check_aml_decision_cb (void *cls,
+                       const struct TALER_EXCHANGE_HttpResponse *hr)
 {
-  struct AmlDecisionState *ds = cls;
+  struct AmlCheckState *ds = cls;
 
   ds->dh = NULL;
   if (MHD_HTTP_NO_CONTENT != hr->response_code)
@@ -109,22 +109,22 @@ take_aml_decision_cb (void *cls,
  * @param is the interpreter state.
  */
 static void
-take_aml_decision_run (void *cls,
-                       const struct TALER_TESTING_Command *cmd,
-                       struct TALER_TESTING_Interpreter *is)
+check_aml_decision_run (void *cls,
+                        const struct TALER_TESTING_Command *cmd,
+                        struct TALER_TESTING_Interpreter *is)
 {
-  struct AmlDecisionState *ds = cls;
+  struct AmlCheckState *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);
+  TALER_exchange_offline_check_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,
@@ -133,7 +133,7 @@ take_aml_decision_run (void *cls,
     "test-case auditor", /* human-readable auditor name */
     now,
     &master_sig,
-    &take_aml_decision_cb,
+    &check_aml_decision_cb,
     ds);
   if (NULL == ds->dh)
   {
@@ -145,17 +145,17 @@ take_aml_decision_run (void *cls,
 
 
 /**
- * Free the state of a "take_aml_decision" CMD, and possibly cancel a
+ * Free the state of a "check_aml_decision" CMD, and possibly cancel a
  * pending operation thereof.
  *
- * @param cls closure, must be a `struct AmlDecisionState`.
+ * @param cls closure, must be a `struct AmlCheckState`.
  * @param cmd the command which is being cleaned up.
  */
 static void
-take_aml_decision_cleanup (void *cls,
-                           const struct TALER_TESTING_Command *cmd)
+check_aml_decision_cleanup (void *cls,
+                            const struct TALER_TESTING_Command *cmd)
 {
-  struct AmlDecisionState *ds = cls;
+  struct AmlCheckState *ds = cls;
 
   if (NULL != ds->dh)
   {
@@ -171,16 +171,15 @@ take_aml_decision_cleanup (void *cls,
 
 
 struct TALER_TESTING_Command
-TALER_TESTING_cmd_take_aml_decision (
+TALER_TESTING_cmd_check_aml_decision (
   const char *label,
   const char *ref_officer,
   const char *ref_operation,
-  const char *new_threshold,
-  bool block)
+  unsigned int expected_http_status)
 {
-  struct AmlDecisionState *ds;
+  struct AmlCheckState *ds;
 
-  ds = GNUNET_new (struct AmlDecisionState);
+  ds = GNUNET_new (struct AmlCheckState);
   ds->ref_cmd = ref_cmd;
   ds->name = name;
   ds->is_active = is_active;
@@ -189,9 +188,8 @@ TALER_TESTING_cmd_take_aml_decision (
     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!
+      .run = &check_aml_decision_run,
+      .cleanup = &check_aml_decision_cleanup
     };
 
     return cmd;
@@ -199,4 +197,4 @@ TALER_TESTING_cmd_take_aml_decision (
 }
 
 
-/* end of testing_api_cmd_take_aml_decision.c */
+/* end of testing_api_cmd_check_aml_decision.c */
diff --git a/src/testing/testing_api_cmd_revoke.c 
b/src/testing/testing_api_cmd_revoke.c
index 4522dede..f734be1a 100644
--- a/src/testing/testing_api_cmd_revoke.c
+++ b/src/testing/testing_api_cmd_revoke.c
@@ -141,14 +141,12 @@ revoke_run (void *cls,
   /* Get denom pub from trait */
   coin_cmd = TALER_TESTING_interpreter_lookup_command (is,
                                                        rs->coin_reference);
-
   if (NULL == coin_cmd)
   {
     GNUNET_break (0);
     TALER_TESTING_interpreter_fail (is);
     return;
   }
-
   GNUNET_assert (GNUNET_OK ==
                  TALER_TESTING_get_trait_denom_pub (coin_cmd,
                                                     0,
diff --git a/src/testing/testing_api_cmd_take_aml_decision.c 
b/src/testing/testing_api_cmd_take_aml_decision.c
index f7c251dd..2fc8a664 100644
--- a/src/testing/testing_api_cmd_take_aml_decision.c
+++ b/src/testing/testing_api_cmd_take_aml_decision.c
@@ -18,7 +18,7 @@
 */
 /**
  * @file testing/testing_api_cmd_take_aml_decision.c
- * @brief command for testing /management/XXX
+ * @brief command for testing /aml/$OFFICER_PUB/decision
  * @author Christian Grothoff
  */
 #include "platform.h"
@@ -38,7 +38,7 @@ struct AmlDecisionState
   /**
    * Auditor enable handle while operation is running.
    */
-  struct TALER_EXCHANGE_ManagementAuditorEnableHandle *dh;
+  struct TALER_EXCHANGE_AddAmlDecision *dh;
 
   /**
    * Our interpreter.
@@ -46,26 +46,36 @@ struct AmlDecisionState
   struct TALER_TESTING_Interpreter *is;
 
   /**
-   * Reference to command to previous set officer
-   * to update, or NULL.
+   * Reference to command to previous set officer command that gives
+   * us an officer_priv trait.
    */
-  const char *ref_cmd;
+  const char *officer_ref_cmd;
 
   /**
-   * Name to use for the officer.
+   * Reference to command to previous AML-triggering event that gives
+   * us a payto-hash trait.
    */
-  const char *name;
+  const char *account_ref_cmd;
 
   /**
-   * Is the officer supposed to be enabled?
+   * New AML state to use.
    */
-  bool is_active;
+  enum TALER_AmlDecisionState new_state;
 
   /**
-   * Is access supposed to be read-only?
+   * Justification given.
    */
-  bool read_only;
+  const char *justification;
 
+  /**
+   * Threshold transaction amount.
+   */
+  const char *new_threshold;
+
+  /**
+   * Expected response code.
+   */
+  unsigned int expected_response;
 };
 
 
@@ -83,7 +93,7 @@ take_aml_decision_cb (void *cls,
   struct AmlDecisionState *ds = cls;
 
   ds->dh = NULL;
-  if (MHD_HTTP_NO_CONTENT != hr->response_code)
+  if (ds->expected_response != hr->http_status)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                 "Unexpected response code %u to command %s in %s:%u\n",
@@ -115,24 +125,56 @@ take_aml_decision_run (void *cls,
 {
   struct AmlDecisionState *ds = cls;
   struct GNUNET_TIME_Timestamp now;
-  struct TALER_MasterSignatureP master_sig;
+  struct TALER_Amount threshold;
+  const struct TALER_PaytoHashP *h_payto;
+  const struct TALER_AmlOfficerPrivateKeyP *officer_priv;
+  const struct TALER_TESTING_Command *ref;
 
   (void) cmd;
+  if (GNUNET_OK !=
+      TALER_string_to_amount (ds->new_threshold,
+                              &threshold))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Failed to parse amount `%s' at %s\n",
+                ds->new_threshold,
+                cmd->label);
+    GNUNET_assert (0);
+  }
   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 (
+  ref = TALER_TESTING_interpreter_lookup_command (is,
+                                                  ds->account_ref_cmd);
+  if (NULL == ref)
+  {
+    GNUNET_break (0);
+    TALER_TESTING_interpreter_fail (is);
+    return;
+  }
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_TESTING_get_trait_h_payto (ref,
+                                                  &h_payto));
+  ref = TALER_TESTING_interpreter_lookup_command (is,
+                                                  ds->officer_ref_cmd);
+  if (NULL == ref)
+  {
+    GNUNET_break (0);
+    TALER_TESTING_interpreter_fail (is);
+    return;
+  }
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_TESTING_get_trait_officer_priv (ref,
+                                                       &officer_priv));
+
+  ds->dh = TALER_EXCHANGE_add_aml_decision (
     is->ctx,
     is->exchange_url,
-    &is->auditor_pub,
-    is->auditor_url,
-    "test-case auditor", /* human-readable auditor name */
+    ds->justification,
     now,
-    &master_sig,
+    &threshold,
+    h_payto,
+    ds->new_state,
+    officer_priv,
     &take_aml_decision_cb,
     ds);
   if (NULL == ds->dh)
@@ -163,7 +205,7 @@ take_aml_decision_cleanup (void *cls,
                 "Command %u (%s) did not complete\n",
                 ds->is->ip,
                 cmd->label);
-    TALER_EXCHANGE_management_enable_auditor_cancel (ds->dh);
+    TALER_EXCHANGE_add_aml_decision_cancel (ds->dh);
     ds->dh = NULL;
   }
   GNUNET_free (ds);
@@ -176,22 +218,25 @@ TALER_TESTING_cmd_take_aml_decision (
   const char *ref_officer,
   const char *ref_operation,
   const char *new_threshold,
-  bool block)
+  const char *justification,
+  enum TALER_AmlDecisionState new_state,
+  unsigned int expected_response)
 {
   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;
+  ds->officer_ref_cmd = ref_officer;
+  ds->account_ref_cmd = ref_operation;
+  ds->new_threshold = new_threshold;
+  ds->new_state = new_state;
+  ds->justification = justification;
+  ds->expected_response = expected_response;
   {
     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;

-- 
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]