Very basic Leiningen serve function

This commit is contained in:
James Reeves 2012-02-12 21:25:27 +00:00
parent 5fe8ec56b9
commit d8c8c8e52c
4 changed files with 53 additions and 22 deletions

View file

@ -0,0 +1,14 @@
(ns ring.server.leiningen
"Functions to start a server from a Leiningen plugin."
(:require [ring.server.standalone :as standalone]))
(defn- load-var [sym]
(require (-> sym namespace symbol))
(find-var sym))
(defn serve
"Start a server from a Leiningen project map."
[project]
(standalone/serve
(load-var (-> project :ring :handler))
{:join? false, :open-browser? false}))

View file

@ -0,0 +1,12 @@
(ns ring.server.test.leiningen
(:use clojure.test
ring.server.leiningen
ring.server.test.utils))
(def project-clj
`{:ring {:handler default-handler}})
(deftest serve-test
(testing "basic project.clj"
(with-server (serve project-clj)
(is-server-running-on-port 3000))))

View file

@ -1,35 +1,17 @@
(ns ring.server.test.standalone
(:require [clj-http.client :as http])
(:use clojure.test
ring.server.standalone
ring.server.test.utils
ring.util.environment
ring.util.response))
(defmacro with-server [server & body]
`(let [server# ~server]
(try
~@body
(finally (.stop server#)))))
(defn default-handler [req]
(response "Hello World"))
(defn error-handler [req]
(defn exception-handler [req]
(throw (Exception. "testing")))
(defn test-server [& [{:as options}]]
(let [handler (:handler options default-handler)]
(serve handler (merge {:join? false, :open-browser? false} options))))
(defn http-get [port uri]
(http/get (str "http://localhost:" port uri)
{:conn-timeout 1000
:throw-exceptions false}))
(defn is-server-running-on-port [port]
(let [resp (http-get port "")]
(is (= (:status resp) 200))))
(deftest serve-test
(testing "default port"
(with-server (test-server)
@ -63,6 +45,6 @@
(is @ran-destroy?)))
(testing "default middleware"
(with-server (test-server {:handler error-handler})
(with-server (test-server {:handler exception-handler})
(let [body (:body (http-get 3000 ""))]
(is (re-find #"java\.lang\.Exception: testing" body))))))

View file

@ -0,0 +1,23 @@
(ns ring.server.test.utils
"Utility functions for running unit tests"
(:require [clj-http.client :as http])
(:use clojure.test
ring.util.response))
(defmacro with-server [server & body]
`(let [server# ~server]
(try
~@body
(finally (.stop server#)))))
(defn default-handler [req]
(response "Hello World"))
(defn http-get [port uri]
(http/get (str "http://localhost:" port uri)
{:conn-timeout 1000
:throw-exceptions false}))
(defn is-server-running-on-port [port]
(let [resp (http-get port "")]
(is (= (:status resp) 200))))