Very basic Leiningen serve function
This commit is contained in:
parent
5fe8ec56b9
commit
d8c8c8e52c
14
src/ring/server/leiningen.clj
Normal file
14
src/ring/server/leiningen.clj
Normal 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}))
|
12
test/ring/server/test/leiningen.clj
Normal file
12
test/ring/server/test/leiningen.clj
Normal 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))))
|
|
@ -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))))))
|
||||
|
|
23
test/ring/server/test/utils.clj
Normal file
23
test/ring/server/test/utils.clj
Normal 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))))
|
Reference in a new issue