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
|
(ns ring.server.test.standalone
|
||||||
(:require [clj-http.client :as http])
|
|
||||||
(:use clojure.test
|
(:use clojure.test
|
||||||
ring.server.standalone
|
ring.server.standalone
|
||||||
|
ring.server.test.utils
|
||||||
ring.util.environment
|
ring.util.environment
|
||||||
ring.util.response))
|
ring.util.response))
|
||||||
|
|
||||||
(defmacro with-server [server & body]
|
(defn exception-handler [req]
|
||||||
`(let [server# ~server]
|
|
||||||
(try
|
|
||||||
~@body
|
|
||||||
(finally (.stop server#)))))
|
|
||||||
|
|
||||||
(defn default-handler [req]
|
|
||||||
(response "Hello World"))
|
|
||||||
|
|
||||||
(defn error-handler [req]
|
|
||||||
(throw (Exception. "testing")))
|
(throw (Exception. "testing")))
|
||||||
|
|
||||||
(defn test-server [& [{:as options}]]
|
(defn test-server [& [{:as options}]]
|
||||||
(let [handler (:handler options default-handler)]
|
(let [handler (:handler options default-handler)]
|
||||||
(serve handler (merge {:join? false, :open-browser? false} options))))
|
(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
|
(deftest serve-test
|
||||||
(testing "default port"
|
(testing "default port"
|
||||||
(with-server (test-server)
|
(with-server (test-server)
|
||||||
|
@ -63,6 +45,6 @@
|
||||||
(is @ran-destroy?)))
|
(is @ran-destroy?)))
|
||||||
|
|
||||||
(testing "default middleware"
|
(testing "default middleware"
|
||||||
(with-server (test-server {:handler error-handler})
|
(with-server (test-server {:handler exception-handler})
|
||||||
(let [body (:body (http-get 3000 ""))]
|
(let [body (:body (http-get 3000 ""))]
|
||||||
(is (re-find #"java\.lang\.Exception: testing" body))))))
|
(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