|
7 | 7 | [ring.adapter.jetty :as ring])
|
8 | 8 | (:import (java.io ByteArrayInputStream)
|
9 | 9 | (org.eclipse.jetty.server Server)
|
10 |
| - (org.eclipse.jetty.server.nio SelectChannelConnector))) |
| 10 | + (org.eclipse.jetty.server.nio SelectChannelConnector) |
| 11 | + (org.eclipse.jetty.server.ssl SslSelectChannelConnector))) |
11 | 12 |
|
12 | 13 | (defn handler [req]
|
13 | 14 | (condp = [(:request-method req) (:uri req)]
|
|
34 | 35 | {:status 200 :body (:body req)}))
|
35 | 36 |
|
36 | 37 | (defn make-server ^Server []
|
37 |
| - (ring/run-jetty handler {:port 0 ;; Use a free port |
38 |
| - :join? false})) |
| 38 | + (ring/run-jetty handler {:port 0 ;; Use a free port |
| 39 | + :join? false |
| 40 | + :ssl-port 0 ;; Use a free port |
| 41 | + :ssl? true |
| 42 | + :keystore "test-resources/keystore" |
| 43 | + :key-password "keykey"})) |
39 | 44 |
|
40 | 45 | (def ^:dynamic *server* nil)
|
41 | 46 |
|
42 | 47 | (defn current-port []
|
43 | 48 | (let [^Server s *server*]
|
44 |
| - (-> s .getConnectors ^SelectChannelConnector (first) .getLocalPort))) |
| 49 | + (->> s |
| 50 | + .getConnectors |
| 51 | + (filter (comp #{SelectChannelConnector} class)) |
| 52 | + ^SelectChannelConnector (first) |
| 53 | + .getLocalPort))) |
| 54 | + |
| 55 | +(defn current-https-port [] |
| 56 | + (let [^Server s *server*] |
| 57 | + (->> s |
| 58 | + .getConnectors |
| 59 | + (filter (comp #{SslSelectChannelConnector} class)) |
| 60 | + ^SslSelectChannelConnector (first) |
| 61 | + .getLocalPort))) |
45 | 62 |
|
46 | 63 | (defn with-server [t]
|
47 | 64 | (let [s (make-server)]
|
|
138 | 155 | ;; (is (= 200 (:status resp)))))
|
139 | 156 |
|
140 | 157 | (deftest ^{:integration true} self-signed-ssl-get
|
141 |
| - (let [t (doto (Thread. #(ring/run-jetty handler |
142 |
| - {:ssl? true |
143 |
| - :keystore "test-resources/keystore" |
144 |
| - :key-password "keykey"})) .start)] |
145 |
| - (Thread/sleep 1000) |
146 |
| - (try |
147 |
| - (is (thrown? javax.net.ssl.SSLException |
148 |
| - (request {:request-method :get :uri "/get" |
149 |
| - :scheme :https}))) |
150 |
| - #_(let [resp (request {:request-method :get :uri "/get" :server-port 18082 |
151 |
| - :scheme :https :insecure? true})] |
152 |
| - (is (= 200 (:status resp))) |
153 |
| - (is (= "get" (slurp-body resp)))) |
154 |
| - (finally |
155 |
| - (.stop t))))) |
| 158 | + (let [client-opts {:request-method :get |
| 159 | + :uri "/get" |
| 160 | + :scheme :https |
| 161 | + :server-name (str "localhost:" (current-https-port)) |
| 162 | + :port (current-https-port)}] |
| 163 | + (is (thrown? javax.net.ssl.SSLException |
| 164 | + (request client-opts))) |
| 165 | + (let [resp (request (assoc client-opts :insecure? true))] |
| 166 | + (is (= 200 (:status resp))) |
| 167 | + (is (= "get" (slurp-body resp)))))) |
156 | 168 |
|
157 | 169 | ;; (deftest ^{:integration true} multipart-form-uploads
|
158 | 170 | ;; (run-server)
|
|
0 commit comments