instaweb-test.ss
;;;
;;; Time-stamp: <06/05/17 16:17:53 noel>
;;;
;;; Copyright (C) by Noel Welsh.
;;;

;;; This library is free software; you can redistribute it
;;; and/or modify it under the terms of the GNU Lesser
;;; General Public License as published by the Free Software
;;; Foundation; either version 2.1 of the License, or (at
;;; your option) any later version.

;;; This library is distributed in the hope that it will be
;;; useful, but WITHOUT ANY WARRANTY; without even the
;;; implied warranty of MERCHANTABILITY or FITNESS FOR A
;;; PARTICULAR PURPOSE.  See the GNU Lesser General Public
;;; License for more details.

;;; You should have received a copy of the GNU Lesser
;;; General Public License along with this library; if not,
;;; write to the Free Software Foundation, Inc., 59 Temple
;;; Place, Suite 330, Boston, MA 02111-1307 USA

;;; Author: Noel Welsh <noelwelsh@yahoo.com>
;;
;;
;; Commentary:

(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 instaweb-tests
    (test-suite
     "All tests for instaweb"

     (test-case
      "Server listens on specified port and IP"
      (before
       (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)
       (thread
        (lambda ()
          (instaweb "dummy.ss" 8000 "127.0.0.1")))
       (sleep 1)
       (let ((content
              (get-pure-port
               (string->url "http://127.0.0.1:8000/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"))))))
     ))
  )