aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/test-routes.lisp31
1 files changed, 30 insertions, 1 deletions
diff --git a/tests/test-routes.lisp b/tests/test-routes.lisp
index 45f75cc..21cc687 100644
--- a/tests/test-routes.lisp
+++ b/tests/test-routes.lisp
@@ -2,7 +2,8 @@
(5am:def-suite* scgi-routes-tests)
-(5am:test test1
+;;; Check variable binding
+(5am:test variable-binding
(5am:finishes
(routes:define-route index (:path (p1 p2 "index.cgi")
:method :get
@@ -23,3 +24,31 @@
(setf ret (test-route :get uri)))
ret)
(list "foo" "blah" nil "2" nil "4" t nil t nil))))
+
+
+(defun scgi-header (field-alist)
+ (let ((headers
+ (with-output-to-string (*standard-output*)
+ (dolist (entry field-alist)
+ (format t "~A~C~A~C" (car entry) #\Nul (cdr entry) #\Nul)))))
+ (concatenate 'string
+ (format nil "~D:" (length headers))
+ headers
+ (string #\Nul))))
+
+;;; Check that unhandled exceptions don't crash the server
+(5am:test condition-handling
+ (5am:finishes
+ (routes:define-route route-test2 (:path ("index.cgi")
+ :method :get)
+ (error "error-route-test2")))
+ (5am:finishes
+ (let ((header (scgi-header '(("SCGI" . "1")
+ ("REQUEST_METHOD" . "GET")
+ ("REQUEST_URI" . "/index.cgi")))))
+ (with-input-from-string (input header)
+ (with-output-to-string (output)
+ (let ((*error-output* output))
+ (routes::socket-function (make-two-way-stream input output)
+ #'routes::default-error-handler
+ #'routes::default-internal-error-handler)))))))