Try to better handle exceptions in the web server
This commit is contained in:
parent
d572f591a3
commit
42d885c553
2 changed files with 166 additions and 36 deletions
|
@ -1,8 +1,11 @@
|
|||
(use-modules (tests)
|
||||
(use-modules (srfi srfi-71)
|
||||
(tests)
|
||||
(fibers)
|
||||
(fibers channels)
|
||||
(unit-test)
|
||||
(web uri)
|
||||
(web client)
|
||||
(web request)
|
||||
(web response)
|
||||
(knots web-server)
|
||||
(knots non-blocking))
|
||||
|
@ -27,4 +30,40 @@
|
|||
uri
|
||||
#:port (non-blocking-open-socket-for-uri uri)))))))
|
||||
|
||||
(run-fibers-for-tests
|
||||
(lambda ()
|
||||
(let* ((exception-handled-sucecssfully-channel
|
||||
(make-channel))
|
||||
(port-closed-channel (make-channel))
|
||||
(web-server
|
||||
(run-knots-web-server
|
||||
(lambda (request)
|
||||
;; TODO Not sure why buffering makes a difference here
|
||||
(setvbuf (request-port request) 'none)
|
||||
(get-message port-closed-channel)
|
||||
(values '((content-type . (text/plain)))
|
||||
"Hello, World!"))
|
||||
#:write-response-exception-handler
|
||||
(lambda (exn)
|
||||
(spawn-fiber
|
||||
(lambda ()
|
||||
(put-message exception-handled-sucecssfully-channel
|
||||
#t)))
|
||||
#f)
|
||||
#:port 0)) ;; Bind to any port
|
||||
(port
|
||||
(web-server-port web-server))
|
||||
(uri
|
||||
(build-uri 'http #:host "127.0.0.1" #:port port)))
|
||||
|
||||
(let ((request-port (non-blocking-open-socket-for-uri uri)))
|
||||
(write-request
|
||||
(build-request uri)
|
||||
request-port)
|
||||
(close-port request-port))
|
||||
(put-message port-closed-channel #t)
|
||||
|
||||
(assert-equal (get-message exception-handled-sucecssfully-channel)
|
||||
#t))))
|
||||
|
||||
(display "web-server test finished successfully\n")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue