Add some helpers for handling request bodies

This commit is contained in:
Christopher Baines 2025-03-08 10:15:25 +00:00
parent 759ff87c0c
commit e3bc3c12b0
2 changed files with 143 additions and 0 deletions

View file

@ -150,6 +150,74 @@
(utf8->string
(get-bytevector-n body 3)))))))
(run-fibers-for-tests
(lambda ()
(let* ((web-server
(run-knots-web-server
(lambda (request)
(if (string=? (utf8->string
(read-request-body/knots request))
"☺")
(values (build-response #:code 200)
"")
(values (build-response #:code 500)
"")))
#:port 0)) ;; Bind to any port
(port
(web-server-port web-server))
(uri
(build-uri 'http #:host "127.0.0.1" #:port port)))
(let ((response
body
(http-post
uri
#:body "☺"
#:port (non-blocking-open-socket-for-uri uri))))
(assert-equal
200
(response-code response))))))
(run-fibers-for-tests
(lambda ()
(let* ((channel (make-channel))
(web-server
(run-knots-web-server
(lambda (request)
(with-exception-handler
(lambda (exn)
(put-message channel exn))
(lambda ()
(read-request-body/knots request))
#:unwind? #t))
#:port 0)) ;; Bind to any port
(port
(web-server-port web-server))
(uri
(build-uri 'http #:host "127.0.0.1" #:port port)))
(let* ((port (non-blocking-open-socket-for-uri uri))
(request
(build-request
uri
#:method 'POST
#:version '(1 . 1)
#:headers `((connection close)
(content-length . 20)
(Content-Type . "application/octet-stream"))
#:port port)))
(set-port-encoding! port "ISO-8859-1")
(let ((request (write-request request port)))
(display "12")
(force-output port)
(close-port port)))
(assert-true
(request-body-ended-prematurely-error?
(get-message channel))))))
;; Test hanlding of exceptions when writing the response to a client
(run-fibers-for-tests
(lambda ()