diff options
author | Christopher Baines <mail@cbaines.net> | 2025-01-23 09:34:54 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2025-01-23 09:34:54 +0100 |
commit | 42d885c5539840ce63421771f8d4bb612d4446a5 (patch) | |
tree | 42cc939f4815ed0a769b6c889d052b773c93e071 /tests | |
parent | d572f591a3c136bfc7b23160e16381c92588f8d9 (diff) | |
download | knots-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.scm | 41 |
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") |