From a6148e742090e1c0ec965fb5f91abf6c7fc2a29c Mon Sep 17 00:00:00 2001
From: Olivier Dion <olivier.dion@savoirfairelinux.com>
Date: Fri, 16 Sep 2022 09:34:09 -0400
Subject: [PATCH] agent: Remove AGENT_ASSERT in favor of Guile exception

Instead of crashing the agent every time there's an error, just throw an
exception that can be handled by the user.

Change-Id: I18ac929e54b9cda6485754ccd52325db7dff66d9
---
 test/agent/src/bindings/bindings.cpp |  4 ----
 test/agent/src/bindings/signal.cpp   |  4 +++-
 test/agent/src/main.cpp              |  4 +++-
 test/agent/src/utils.h               | 26 +++++---------------------
 4 files changed, 11 insertions(+), 27 deletions(-)

diff --git a/test/agent/src/bindings/bindings.cpp b/test/agent/src/bindings/bindings.cpp
index 6fc36ee44e..6ba1e926fa 100644
--- a/test/agent/src/bindings/bindings.cpp
+++ b/test/agent/src/bindings/bindings.cpp
@@ -68,10 +68,6 @@ install_scheme_primitives()
 void
 define_primitive(const char* name, int req, int opt, int rst, void* func)
 {
-        AGENT_ASSERT(req + opt + rst <= 10, "Primitive binding `%s` has too many argument", name);
-
-        AGENT_ASSERT(0 == rst or 1 == rst, "Rest argument for binding `%s` must be 0 or 1", name);
-
         scm_c_define_gsubr(name, req, opt, rst, func);
         scm_c_export(name, NULL);
 }
diff --git a/test/agent/src/bindings/signal.cpp b/test/agent/src/bindings/signal.cpp
index 50557fb0c5..d71bb0efca 100644
--- a/test/agent/src/bindings/signal.cpp
+++ b/test/agent/src/bindings/signal.cpp
@@ -128,7 +128,9 @@ on_signal_binding(SCM signal_sym, SCM handler_proc)
     std::vector<SCM>* callbacks;
     std::mutex* mutex;
 
-    AGENT_ASSERT(scm_is_true(scm_procedure_p(handler_proc)), "handler_proc must be a procedure");
+    if (scm_is_false(scm_procedure_p(handler_proc))) {
+        scm_wrong_type_arg_msg("on_signal_binding", 0, handler_proc, "procedure");
+    }
 
     handler_pair = scm_assq_ref(signal_alist, signal_sym);
 
diff --git a/test/agent/src/main.cpp b/test/agent/src/main.cpp
index 74984a221b..adf4c63124 100644
--- a/test/agent/src/main.cpp
+++ b/test/agent/src/main.cpp
@@ -86,7 +86,9 @@ main(int argc, char* argv[])
         /* NOTE!  It's very important to initialize the daemon before entering Guile!!! */
         DRing::init(DRing::InitFlag(DRing::DRING_FLAG_DEBUG));
 
-        AGENT_ASSERT(DRing::start(""), "Failed to start daemon");
+        if (not DRing::start("")) {
+            scm_misc_error("Dring::start", NULL, 0);
+        }
 
         /* Entering guile context - This never returns */
         scm_with_guile(main_in_guile, (void*)&args);
diff --git a/test/agent/src/utils.h b/test/agent/src/utils.h
index ebcbec36c7..c7db34651a 100644
--- a/test/agent/src/utils.h
+++ b/test/agent/src/utils.h
@@ -22,15 +22,6 @@
 
 #include "logger.h"
 
-#define AGENT_ERR(FMT, ARGS...)  JAMI_ERR("AGENT: " FMT, ##ARGS)
-#define AGENT_INFO(FMT, ARGS...) JAMI_INFO("AGENT: " FMT, ##ARGS)
-#define AGENT_DBG(FMT, ARGS...)  JAMI_DBG("AGENT: " FMT, ##ARGS)
-#define AGENT_ASSERT(COND, MSG, ARGS...) \
-        if (not(COND)) {                 \
-                AGENT_ERR(MSG, ##ARGS);  \
-                exit(1);                 \
-        }
-
 static inline SCM
 to_guile(bool b)
 {
@@ -93,8 +84,9 @@ template<typename... Args>
 static inline SCM
 apply_to_guile(SCM body_proc, Args... args)
 {
-    AGENT_ASSERT(scm_is_true(scm_procedure_p(body_proc)),
-                 "body_proc must be a procedure");
+    if (scm_is_false(scm_procedure_p(body_proc))) {
+        scm_wrong_type_arg_msg("apply_to_guile", 0, body_proc, "procedure");
+    }
 
     SCM arglst = pack_to_guile(args...);
 
@@ -118,16 +110,8 @@ struct from_guile
     template<typename Pred>
     void ensure_type(const char* msg, Pred&& pred)
     {
-        if (!pred(value)) {
-            jami::Logger::log(LOG_ERR,
-                              file,
-                              line,
-                              false,
-                              "[GUILE] For expression `%s`: "
-                              "Scheme value must be of type %s\n",
-                              expr,
-                              msg);
-            exit(EXIT_FAILURE);
+        if (not pred(value)) {
+            scm_wrong_type_arg_msg("from_guile", 0, value, msg);
         }
     }
 
-- 
GitLab