(module instaweb-test mzscheme
(require (planet "test.ss" ("schematics" "schemeunit.plt" 2)))
(require (lib "url.ss" "net")
(planet "port.ss" ("schematics" "port.plt" 1))
"instaweb.ss")
(provide instaweb-tests)
(define (make-dummy)
(with-output-to-file "dummy.ss"
(lambda ()
(write
'(module dummy mzscheme
(require (lib "response-structs.ss" "web-server"))
(provide interface-version timeout start)
(define interface-version 'v1)
(define timeout +inf.0)
(define (start initial-request)
(make-response/full
200
"OK"
(current-seconds)
#"text/plain"
'()
'("foo\r\n"))))))
'replace))
(define instaweb-tests
(test-suite
"All tests for instaweb"
(test-case
"Server listens on specified port and IP"
(before
(make-dummy)
(let ((server
(thread
(lambda ()
(instaweb "dummy.ss" 4567 "127.0.0.1")))))
(sleep 1)
(let ((content
(get-pure-port
(string->url "http://127.0.0.1:4567/servlets/dummy.ss"))))
(check string=? (port->string content) "foo\r\n"))
(check-exn
exn:fail:network?
(lambda ()
(get-pure-port
(string->url "http://127.0.0.1:8123/servlets/dummy.ss"))))
(kill-thread server))))
(test-case
"Instaweb stops reading if input port returns eof"
(before
(make-dummy)
(let* ((op (open-output-string))
(server
(thread
(lambda ()
(parameterize
((current-input-port (open-input-string ""))
(current-output-port op))
(instaweb "dummy.ss" 4567 "127.0.0.1"))))))
(sleep 1)
(kill-thread server)
(let ((content (get-output-string op)))
(display content)
(check <=
(string-length content)
218)))))
))
)