Skip to content

Commit ec47e74

Browse files
committed
Add more tests
1 parent 7e08f7c commit ec47e74

File tree

1 file changed

+81
-22
lines changed

1 file changed

+81
-22
lines changed
Lines changed: 81 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,87 @@
11
(ns ring.middleware.websocket-keepalive-test
2-
(:require [clojure.test :refer [deftest is]]
2+
(:require [clojure.test :refer [deftest is testing]]
33
[ring.websocket :as ws]
44
[ring.websocket.protocols :as wsp]
55
[ring.middleware.websocket-keepalive :as ka]))
66

77
(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

Comments
 (0)