aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2025-01-23 09:34:54 +0100
committerChristopher Baines <mail@cbaines.net>2025-01-23 09:34:54 +0100
commit42d885c5539840ce63421771f8d4bb612d4446a5 (patch)
tree42cc939f4815ed0a769b6c889d052b773c93e071 /tests
parentd572f591a3c136bfc7b23160e16381c92588f8d9 (diff)
downloadknots-42d885c5539840ce63421771f8d4bb612d4446a5.tar
knots-42d885c5539840ce63421771f8d4bb612d4446a5.tar.gz
Try to better handle exceptions in the web server
Diffstat (limited to 'tests')
-rw-r--r--tests/web-server.scm41
1 files changed, 40 insertions, 1 deletions
diff --git a/tests/web-server.scm b/tests/web-server.scm
index 0254795..00cd8c3 100644
--- a/tests/web-server.scm
+++ b/tests/web-server.scm
@@ -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")