diff options
-rw-r--r-- | tests/test-routes.lisp | 31 |
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))))))) |