mirror of
https://github.com/vale981/lack
synced 2025-03-05 09:21:39 -05:00
Add lack.test.
This commit is contained in:
parent
7972565157
commit
3b402210fe
2 changed files with 67 additions and 0 deletions
13
lack-test.asd
Normal file
13
lack-test.asd
Normal 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
54
src/test.lisp
Normal 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)))
|
Loading…
Add table
Reference in a new issue