Add lack.test.

This commit is contained in:
Eitaro Fukamachi 2015-03-07 04:20:59 +09:00
parent 7972565157
commit 3b402210fe
2 changed files with 67 additions and 0 deletions

13
lack-test.asd Normal file
View file

@ -0,0 +1,13 @@
(in-package :cl-user)
(defpackage lack-test-asd
(:use :cl :asdf))
(in-package :lack-test-asd)
(defsystem lack-test
:author "Eitaro Fukamachi"
:license "LLGPL"
:depends-on (:lack
:prove
:bordeaux-threads
:usocket)
:components ((:file "src/test")))

54
src/test.lisp Normal file
View file

@ -0,0 +1,54 @@
(in-package :cl-user)
(defpackage lack.test
(:use :cl)
(:import-from :lack
:lackup
:stop)
(:import-from :prove
:subtest)
(:import-from :bordeaux-threads
:thread-alive-p
:destroy-thread)
(:import-from :usocket
:socket-listen
:socket-close
:address-in-use-error)
(:export :subtest-app
:*lack-test-handler*
:*lack-test-port*))
(in-package :lack.test)
(defvar *lack-test-handler* :hunchentoot)
(defvar *lack-test-port* 4242)
(defvar *enable-debug-p* t)
(defun port-available-p (port)
(let (socket)
(unwind-protect
(handler-case (setq socket (usocket:socket-listen "127.0.0.1" port :reuse-address t))
(usocket:address-in-use-error () nil))
(when socket
(usocket:socket-close socket)
t))))
(defun %subtest-app (desc app client)
(loop repeat 5
until (port-available-p *lack-test-port*)
do (sleep 0.1)
finally
(unless (port-available-p *lack-test-port*)
(error "Port ~D is already in use." *lack-test-port*)))
(let ((acceptor (lackup app
:server *lack-test-handler*
:use-thread t
:port *lack-test-port*
:debug *enable-debug-p*)))
(subtest desc
(sleep 0.5)
(unwind-protect
(funcall client)
(stop acceptor)))))
(defmacro subtest-app (desc app &body client)
`(%subtest-app ,desc ,app (lambda () ,@client)))