guile-knots/tests/web-server.scm

70 lines
2.1 KiB
Scheme
Raw Normal View History

(use-modules (srfi srfi-71)
(tests)
2024-11-19 18:43:43 +00:00
(fibers)
(fibers channels)
2024-11-19 18:43:43 +00:00
(unit-test)
(web uri)
(web client)
(web request)
2024-11-19 18:43:43 +00:00
(web response)
(knots web-server)
(knots non-blocking))
(run-fibers-for-tests
(lambda ()
(let* ((web-server
(run-knots-web-server
(lambda (request)
(values '((content-type . (text/plain)))
"Hello, World!"))
#:port 0)) ;; Bind to any port
(port
(web-server-port web-server))
(uri
(build-uri 'http #:host "127.0.0.1" #:port port)))
(assert-equal
200
(response-code
(http-get
uri
2024-12-28 10:43:00 +00:00
#:port (non-blocking-open-socket-for-uri uri)))))))
2024-11-19 18:43:43 +00:00
(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 request)
(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))))
2024-11-19 18:43:43 +00:00
(display "web-server test finished successfully\n")