diff --git a/test/babashka/main_test.clj b/test/babashka/main_test.clj index da304cbb..7370cc72 100644 --- a/test/babashka/main_test.clj +++ b/test/babashka/main_test.clj @@ -7,7 +7,8 @@ [clojure.java.shell :refer [sh]] [clojure.string :as str] [clojure.test :as test :refer [deftest is testing]] - [sci.core :as sci])) + [sci.core :as sci] + [babashka.test-utils :as tu])) (defn bb [input & args] (edn/read-string (apply test-utils/bb (when (some? input) (str input)) (map str args)))) @@ -170,7 +171,7 @@ (is (str/includes? (bb nil " (def ls (-> (ProcessBuilder. [\"ls\"]) (.start))) (def output (.getInputStream ls)) -(.waitFor ls) +(assert (int? (.waitFor ls))) (slurp output)") "LICENSE"))) @@ -185,19 +186,10 @@ temp-dir-path)))))) (deftest wait-for-port-test - (is (= :timed-out - (bb nil "(def ws (-> (ProcessBuilder. [\"python\" \"-m\" \"SimpleHTTPServer\" \"1777\"]) (.start))) - (wait/wait-for-port \"127.0.0.1\" 1777) - (.destroy ws) - (.waitFor ws) - (wait/wait-for-port \"localhost\" 1777 {:default :timed-out :timeout 50})"))) - (is (int? (bb nil " -(require '[babashka.wait :as wait]) -(def ws (-> (ProcessBuilder. [\"python\" \"-m\" \"SimpleHTTPServer\" \"1777\"]) (.start))) -(wait/wait-for-port \"localhost\" 1777) -(slurp \"http://localhost:1777\") -(.destroy ws) -(.waitFor ws)")))) + (let [server (tu/start-server! 1777)] + (is (= 1777 (:port (bb nil "(wait/wait-for-port \"127.0.0.1\" 1777)")))) + (tu/stop-server! server) + (is (= :timed-out (bb nil "(wait/wait-for-port \"127.0.0.1\" 1777 {:default :timed-out :timeout 50})"))))) (deftest wait-for-path-test (let [temp-dir-path (System/getProperty "java.io.tmpdir")] diff --git a/test/babashka/test_utils.clj b/test/babashka/test_utils.clj index 167737c8..071e263c 100644 --- a/test/babashka/test_utils.clj +++ b/test/babashka/test_utils.clj @@ -58,3 +58,20 @@ (if jvm? (println "==== Testing JVM version") (println "==== Testing native version")) + +(defn socket-loop [^java.net.ServerSocket server] + (with-open [listener server] + (loop [] + (with-open [socket (.accept listener)] + (let [input-stream (.getInputStream socket)] + (print (slurp input-stream)) + (flush))) + (recur)))) + +(defn start-server! [port] + (let [server (java.net.ServerSocket. port)] + (future (socket-loop server)) + server)) + +(defn stop-server! [^java.net.ServerSocket server] + (.close server))