From d8c8c8e52ceefab56c82ec1c7d30a7f5c68ffed0 Mon Sep 17 00:00:00 2001 From: James Reeves Date: Sun, 12 Feb 2012 21:25:27 +0000 Subject: [PATCH] Very basic Leiningen serve function --- src/ring/server/leiningen.clj | 14 ++++++++++++++ test/ring/server/test/leiningen.clj | 12 ++++++++++++ test/ring/server/test/standalone.clj | 26 ++++---------------------- test/ring/server/test/utils.clj | 23 +++++++++++++++++++++++ 4 files changed, 53 insertions(+), 22 deletions(-) create mode 100644 src/ring/server/leiningen.clj create mode 100644 test/ring/server/test/leiningen.clj create mode 100644 test/ring/server/test/utils.clj diff --git a/src/ring/server/leiningen.clj b/src/ring/server/leiningen.clj new file mode 100644 index 0000000..4f4bb06 --- /dev/null +++ b/src/ring/server/leiningen.clj @@ -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})) diff --git a/test/ring/server/test/leiningen.clj b/test/ring/server/test/leiningen.clj new file mode 100644 index 0000000..21c65ef --- /dev/null +++ b/test/ring/server/test/leiningen.clj @@ -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)))) diff --git a/test/ring/server/test/standalone.clj b/test/ring/server/test/standalone.clj index a7a78ed..b20ad45 100644 --- a/test/ring/server/test/standalone.clj +++ b/test/ring/server/test/standalone.clj @@ -1,35 +1,17 @@ -(ns ring.server.test.standalone - (:require [clj-http.client :as http]) +(ns ring.server.test.standalone (: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)))))) diff --git a/test/ring/server/test/utils.clj b/test/ring/server/test/utils.clj new file mode 100644 index 0000000..024d4ea --- /dev/null +++ b/test/ring/server/test/utils.clj @@ -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))))