Refactored to make testable.

Added tests.
This commit is contained in:
2020-12-03 21:12:12 -08:00
parent f3a148f13c
commit 24e16f8ac4
4 changed files with 228 additions and 17 deletions
+21 -15
View File
@@ -14,7 +14,8 @@
:reader request)))
(defclass result ()
((message :initarg :message)
((message :initarg :message
:reader message)
(msg-id :initarg :msg-id
:reader msg-id)))
@@ -70,9 +71,9 @@
(defun dispatch-parse-message (message sender)
(if-let ((api-version (cdr (assoc :VERSION message)))
(service (symbolize (cdr (assoc :SERVICE message))))
(service (cdr (assoc :SERVICE message)))
(msg-id (cdr (assoc :MSGID message))))
(parse-message sender service api-version (cdr (assoc :PAYLOAD message)) msg-id)
(parse-message sender (symbolize service) api-version (cdr (assoc :PAYLOAD message)) msg-id)
(make-error :msg (format nil "missing api_version, msgid, or service name in request in message")
:msg-id msg-id)))
@@ -98,22 +99,27 @@
forms
:initial-value init)))))
(defun handle-xmpp-message (sender body)
(render-result
(handler-case
(success-> body
(decode-message)
(dispatch-parse-message sender)
(handle-message))
(error (e)
(format *error-output* "failed handling message from ~A: ~A"
sender e)
(make-error :msg "an unknown error occurred handling request")))))
(defmethod xmpp:handle ((conn xmpp:connection) (message xmpp:message))
(let ((sender (xmpp:from message)))
(format *standard-output* "message received from ~A" sender)
(xmpp:message conn
(xmpp:from message)
(render-result
(handler-case
(success-> message
(xmpp:body)
(decode-message)
(dispatch-parse-message sender)
(handle-message))
(error (e)
(format *error-output* "failed handling message from ~A: ~A"
sender e)
(make-error :msg "an unknown error occurred handling request")))))))
sender
(handle-xmpp-message sender (xmpp:body message)))))
(defun start-listening (backplane)
(xmpp:receive-stanza-loop backplane))
(let ((backplane nil))
(defun backplane-connect (xmpp-host xmpp-username xmpp-password)