Refactored to make testable.
Added tests.
This commit is contained in:
185
test/backplane-server-test.lisp
Normal file
185
test/backplane-server-test.lisp
Normal file
@@ -0,0 +1,185 @@
|
||||
;;;; backplane-server-test.lisp
|
||||
|
||||
(defpackage #:backplane-server/test
|
||||
(:use #:cl
|
||||
#:backplane-server
|
||||
#:prove)
|
||||
(:import-from #:arrows
|
||||
#:->
|
||||
#:some->)
|
||||
(:import-from #:cl-json
|
||||
#:decode-json-from-string
|
||||
#:encode-json-to-string))
|
||||
|
||||
(in-package #:backplane-server/test)
|
||||
|
||||
(plan 21)
|
||||
|
||||
(ok (error-p (make-error :msg-id 1
|
||||
:msg "oops")))
|
||||
|
||||
(ok (error-p (make-error :msg "oops")))
|
||||
|
||||
(ok (success-p (make-success :msg-id 1
|
||||
:msg "ok")))
|
||||
|
||||
(ok (success-p (make-success :msg "ok")))
|
||||
|
||||
(ok (not (success-p (make-error :msg-id 1
|
||||
:msg "oops"))))
|
||||
|
||||
(ok (not (error-p (make-success :msg-id 1
|
||||
:msg "ok"))))
|
||||
|
||||
(defun make-request (&key
|
||||
(service :TEST)
|
||||
(msgid 1)
|
||||
(version 1)
|
||||
(payload '()))
|
||||
(encode-json-to-string
|
||||
`((VERSION . ,version)
|
||||
(SERVICE . ,service)
|
||||
(MSGID . ,msgid)
|
||||
(PAYLOAD . ,payload))))
|
||||
|
||||
(defun get-key (obj key)
|
||||
(cdr (assoc key obj)))
|
||||
|
||||
(defun handle (body)
|
||||
(handle-xmpp-message "me" body))
|
||||
|
||||
(defun decode (body)
|
||||
(cl-json:decode-json-from-string body))
|
||||
|
||||
(is (-> "}{"
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :STATUS))
|
||||
"ERROR")
|
||||
|
||||
(is (-> "}{"
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :MESSAGE))
|
||||
"invalid json string: }{")
|
||||
|
||||
(is (-> (make-request :service :NONEXISTENT)
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :STATUS))
|
||||
"ERROR")
|
||||
|
||||
(is (-> (make-request :service :NONEXISTENT)
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :MESSAGE))
|
||||
"unsupported service: NONEXISTENT")
|
||||
|
||||
(is (-> (make-request :service nil)
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :MESSAGE))
|
||||
"missing api_version, msgid, or service name in request in message")
|
||||
|
||||
(is (-> (make-request :version nil)
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :MESSAGE))
|
||||
"missing api_version, msgid, or service name in request in message")
|
||||
|
||||
(is (-> (make-request :msgid nil)
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :MESSAGE))
|
||||
"missing api_version, msgid, or service name in request in message")
|
||||
|
||||
(defmethod parse-message (sender (service (eql :TEST0)) api-version message msg-id)
|
||||
:TEST-SIMPLE-MESSAGE)
|
||||
|
||||
(defmethod handle-message ((message (eql :TEST-SIMPLE-MESSAGE)))
|
||||
(make-success :msg "successful-test0"))
|
||||
|
||||
(is (-> (make-request :service :TEST0)
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :STATUS))
|
||||
"OK")
|
||||
|
||||
(is (-> (make-request :service :TEST0)
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :MESSAGE))
|
||||
"successful-test0")
|
||||
|
||||
(defclass my-req-type ()
|
||||
((msg :initarg :msg)
|
||||
(msgid :initarg :msgid)))
|
||||
|
||||
(defclass my-succeeder (my-req-type) ())
|
||||
|
||||
(defclass my-failer (my-req-type) ())
|
||||
|
||||
(defmethod parse-message (sender (service (eql :TEST1)) api-version message msg-id)
|
||||
(if (equalp message "succeed")
|
||||
(make-instance 'my-succeeder
|
||||
:msg "successful-test1"
|
||||
:msgid msg-id)
|
||||
(make-instance 'my-failer
|
||||
:msg "failed-test1"
|
||||
:msgid msg-id)))
|
||||
|
||||
(defmethod handle-message ((req my-succeeder))
|
||||
(with-slots (msg msgid) req
|
||||
(make-success :msg msg :msg-id msgid)))
|
||||
|
||||
(defmethod handle-message ((req my-failer))
|
||||
(with-slots (msg msgid) req
|
||||
(make-error :msg msg :msg-id msgid)))
|
||||
|
||||
(is (-> (make-request :service :TEST1
|
||||
:payload "succeed")
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :STATUS))
|
||||
"OK")
|
||||
|
||||
(is (-> (make-request :service :TEST1
|
||||
:payload "succeed")
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :MESSAGE))
|
||||
"successful-test1")
|
||||
|
||||
(is (-> (make-request :service :TEST1
|
||||
:payload "fail plz")
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :STATUS))
|
||||
"ERROR")
|
||||
|
||||
(is (-> (make-request :service :TEST1
|
||||
:payload "fail plz")
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :MESSAGE))
|
||||
"failed-test1")
|
||||
|
||||
(let ((msg-id "testid0"))
|
||||
(is (-> (make-request :service :TEST1
|
||||
:msgid msg-id
|
||||
:payload "succeed")
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :MSGID))
|
||||
msg-id))
|
||||
|
||||
(let ((msg-id "testid1"))
|
||||
(is (-> (make-request :service :TEST1
|
||||
:msgid msg-id
|
||||
:payload "fail pl'")
|
||||
(handle)
|
||||
(decode)
|
||||
(get-key :MSGID))
|
||||
msg-id))
|
||||
|
||||
(finalize)
|
||||
Reference in New Issue
Block a user