69 lines
2.1 KiB
Scheme
69 lines
2.1 KiB
Scheme
(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))
|
|
|
|
(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
|
|
#: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 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))))
|
|
|
|
(display "web-server test finished successfully\n")
|