[#979] More java net http tests and tweaks (#996)

This commit is contained in:
Michiel Borkent 2021-09-01 11:36:24 +02:00 committed by GitHub
parent 125e227976
commit 23ba52a813
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 173 additions and 112 deletions

View file

@ -9,6 +9,7 @@
"feature-spec-alpha"
"feature-rewrite-clj"
"feature-selmer"
"feature-logging"
"pods/src"
"babashka.nrepl/src"
"depstar/src" "process/src"
@ -88,7 +89,8 @@
crispin/crispin {:mvn/version "0.3.8"}
org.clojure/data.json {:mvn/version "2.4.0"}
clj-commons/multigrep {:mvn/version "0.5.0"}
amperity/vault-clj {:mvn/version "1.0.4"}}
amperity/vault-clj {:mvn/version "1.0.4"}
java-http-clj/java-http-clj {:mvn/version "0.4.3"}}
:classpath-overrides {org.clojure/clojure nil
org.clojure/spec.alpha nil
org.clojure/core.specs.alpha nil}}

View file

@ -2,6 +2,7 @@
{:no-doc true}
(:require
[babashka.impl.features :as features]
[sci.impl.types :as t]
[cheshire.core :as json]))
(def custom-map
@ -444,7 +445,11 @@
(instance? java.nio.channels.FileChannel v)
java.nio.channels.FileChannel
(instance? java.net.CookieStore v)
java.net.CookieStore)))))
java.net.CookieStore
;; this makes interop on reified classes work
;; see java_net_http_test/interop-test
(instance? sci.impl.types.IReified v)
(first (t/getInterfaces v)))))))
(def class-map (gen-class-map))

View file

@ -250,6 +250,10 @@
#_'vault.secrets.kvv1-test
#_'vault.secrets.kvv2-test)
;; we don't really run any tests for java-http-clj yet, but we require the
;; namespaces to see if they at least load correctly
(test-namespaces 'java-http-clj.smoke-test)
;;;; final exit code
(let [{:keys [:test :fail :error] :as m} @status]

View file

@ -0,0 +1,41 @@
(ns java-http-clj.smoke-test
(:require [clojure.test :refer [deftest is] :as t]
[java-http-clj.core :as client]
[java-http-clj.websocket :as ws-client]
[org.httpkit.server :as httpkit.server]))
(deftest general-smoke-test
(is (= 200 (:status (client/get "https://www.clojure.org"))))
(is (instance? java.net.http.WebSocket$Builder (ws-client/websocket-builder))))
(defn ws-handler [{:keys [init] :as opts} req]
(when init (init req))
(httpkit.server/as-channel
req
(select-keys opts [:on-close :on-ping :on-receive])))
(def ^:dynamic *ws-port* 1234)
(defmacro with-ws-server
[opts & body]
`(let [s# (httpkit.server/run-server (partial ws-handler ~opts) {:port ~*ws-port*})]
(try ~@body (finally (s# :timeout 100)))))
(deftest websockets-smoke-test
(with-ws-server {:on-receive #(httpkit.server/send! %1 %2)}
(is (= "zomg websockets!"
(let [p (promise)
ws (ws-client/build-websocket "ws://localhost:1234"
{:on-binary (fn [_ data last?] (deliver p data))
:on-text (fn [ws data last?] (deliver p data))
:on-error (fn [ws throwable] (deliver p throwable))
:on-ping (fn [ws data] (deliver p data))
:on-pong (fn [ws data] (deliver p data))
:on-open (fn [ws] nil)
:on-close (fn [ws status-code reason] nil)})]
(-> ws
(ws-client/send "zomg websockets!"))
(try (deref p 5000 ::timeout)
(finally
(ws-client/close ws))))))))

View file

@ -6,11 +6,20 @@
[clojure.test :as test :refer [deftest is]]
[org.httpkit.server :as httpkit.server]))
(defn bb [expr]
(edn/read-string (apply test-utils/bb nil [(str expr)])))
(defn bb [& exprs]
(edn/read-string (apply test-utils/bb nil (map str exprs))))
;; HttpClient
(deftest interop-test
(is (= :hello
(bb "-e"
(binding [*print-meta* true]
'(do
(def res (atom nil))
(def x (reify java.net.http.WebSocket$Listener (onOpen [this ws] (reset! res :hello))))
(.onOpen ^java.net.http.WebSocket$Listener x nil) @res))))))
(deftest send-test
(is (= [200 true]
(bb