|
1 | 1 | (ns ring.middleware.websocket-keepalive-test
|
2 |
| - (:require [clojure.test :refer [deftest is]] |
| 2 | + (:require [clojure.test :refer [deftest is testing]] |
3 | 3 | [ring.websocket :as ws]
|
4 | 4 | [ring.websocket.protocols :as wsp]
|
5 | 5 | [ring.middleware.websocket-keepalive :as ka]))
|
6 | 6 |
|
7 | 7 | (deftest test-websocket-keepalive-request
|
8 |
| - (let [ping-count (atom 0) |
9 |
| - socket (reify wsp/Socket |
10 |
| - (-open? [_] true) |
11 |
| - (-send [_ _]) |
12 |
| - (-ping [_ _] (swap! ping-count inc)) |
13 |
| - (-pong [_ _]) |
14 |
| - (-close [_ _ _])) |
15 |
| - response {::ws/listener |
16 |
| - (reify wsp/Listener |
17 |
| - (on-open [_ _]) |
18 |
| - (on-message [_ _ _]) |
19 |
| - (on-pong [_ _ _]) |
20 |
| - (on-error [_ _ _]) |
21 |
| - (on-close [_ _ _ _]))} |
22 |
| - response' (ka/websocket-keepalive-response response {:period 10}) |
23 |
| - listener (::ws/listener response')] |
24 |
| - (wsp/on-open listener socket) |
25 |
| - (Thread/sleep 51) |
26 |
| - (wsp/on-close listener socket 1000 "") |
27 |
| - (Thread/sleep 30) |
28 |
| - (is (= @ping-count 5)))) |
| 8 | + (testing "websocket pings" |
| 9 | + (let [ping-count (atom 0) |
| 10 | + socket (reify wsp/Socket |
| 11 | + (-open? [_] true) |
| 12 | + (-send [_ _]) |
| 13 | + (-ping [_ _] (swap! ping-count inc)) |
| 14 | + (-pong [_ _]) |
| 15 | + (-close [_ _ _])) |
| 16 | + response {::ws/listener |
| 17 | + (reify wsp/Listener |
| 18 | + (on-open [_ _]) |
| 19 | + (on-message [_ _ _]) |
| 20 | + (on-pong [_ _ _]) |
| 21 | + (on-error [_ _ _]) |
| 22 | + (on-close [_ _ _ _]))} |
| 23 | + response' (ka/websocket-keepalive-response response {:period 10}) |
| 24 | + listener (::ws/listener response')] |
| 25 | + (wsp/on-open listener socket) |
| 26 | + (Thread/sleep 51) |
| 27 | + (wsp/on-close listener socket 1000 "") |
| 28 | + (Thread/sleep 20) |
| 29 | + (is (= 5 @ping-count)))) |
| 30 | + (testing "response passthrough" |
| 31 | + (let [response {:status 200 |
| 32 | + :headers {"Content-Type" "text/plain"} |
| 33 | + :body "Non-websocket response"}] |
| 34 | + (is (= response (ka/websocket-keepalive-response response)))))) |
| 35 | + |
| 36 | +(deftest test-wrap-websocket-keepalive |
| 37 | + (testing "websocket pings" |
| 38 | + (let [ping-count (atom 0) |
| 39 | + socket (reify wsp/Socket |
| 40 | + (-open? [_] true) |
| 41 | + (-send [_ _]) |
| 42 | + (-ping [_ _] (swap! ping-count inc)) |
| 43 | + (-pong [_ _]) |
| 44 | + (-close [_ _ _])) |
| 45 | + response {::ws/listener |
| 46 | + (reify wsp/Listener |
| 47 | + (on-open [_ _]) |
| 48 | + (on-message [_ _ _]) |
| 49 | + (on-pong [_ _ _]) |
| 50 | + (on-error [_ _ _]) |
| 51 | + (on-close [_ _ _ _]))} |
| 52 | + handler (fn |
| 53 | + ([_] response) |
| 54 | + ([_ respond _] (respond response))) |
| 55 | + handler' (ka/wrap-websocket-keepalive handler {:period 10})] |
| 56 | + (testing "synchronous handlers" |
| 57 | + (let [listener (::ws/listener (handler' {}))] |
| 58 | + (wsp/on-open listener socket) |
| 59 | + (Thread/sleep 41) |
| 60 | + (wsp/on-close listener socket 1000 "") |
| 61 | + (Thread/sleep 20) |
| 62 | + (is (= 4 @ping-count)))) |
| 63 | + (testing "asynchronous handlers" |
| 64 | + (let [respond (promise)] |
| 65 | + (reset! ping-count 0) |
| 66 | + (handler' {} respond (fn [_])) |
| 67 | + (let [listener (::ws/listener @respond)] |
| 68 | + (wsp/on-open listener socket) |
| 69 | + (Thread/sleep 51) |
| 70 | + (wsp/on-close listener socket 1000 "") |
| 71 | + (Thread/sleep 20) |
| 72 | + (is (= 5 @ping-count))))))) |
| 73 | + (testing "response passthrough" |
| 74 | + (testing "response passthrough" |
| 75 | + (let [response {:status 200 |
| 76 | + :headers {"Content-Type" "text/plain"} |
| 77 | + :body "Non-websocket response"} |
| 78 | + handler (fn |
| 79 | + ([_] response) |
| 80 | + ([_ respond _] (respond response))) |
| 81 | + handler' (ka/wrap-websocket-keepalive handler)] |
| 82 | + (testing "synchronous handlers" |
| 83 | + (is (= response (handler' {})))) |
| 84 | + (testing "asynchronous handlers" |
| 85 | + (let [respond (promise)] |
| 86 | + (handler' {} respond (fn [_])) |
| 87 | + (is (= response @respond)))))))) |
0 commit comments