add some initial session tests
This commit is contained in:
parent
3bdf0868cf
commit
548ff7825d
|
@ -0,0 +1,135 @@
|
||||||
|
(ns net.thegeez.browserchannel.server.session-tests
|
||||||
|
(:import (net.thegeez.browserchannel.server ArrayBuffer Session))
|
||||||
|
(:use
|
||||||
|
clojure.test
|
||||||
|
net.thegeez.browserchannel.common
|
||||||
|
net.thegeez.browserchannel.server))
|
||||||
|
|
||||||
|
(def written-responses (atom []))
|
||||||
|
|
||||||
|
(def test-options
|
||||||
|
(merge
|
||||||
|
(select-keys
|
||||||
|
default-options
|
||||||
|
[:data-threshold
|
||||||
|
:session-timeout-interval])
|
||||||
|
{:heartbeat-interval (:keep-alive-interval default-options)}))
|
||||||
|
|
||||||
|
(defn mock-write
|
||||||
|
[response data]
|
||||||
|
(is (not (nil? response)))
|
||||||
|
(swap! written-responses conj [:write data]))
|
||||||
|
|
||||||
|
(defn mock-write-end
|
||||||
|
[response]
|
||||||
|
(is (not (nil? response)))
|
||||||
|
(swap! written-responses conj [:write-end]))
|
||||||
|
|
||||||
|
(defn mock-send-off
|
||||||
|
[& _])
|
||||||
|
|
||||||
|
(defn mock-session-fixture [f]
|
||||||
|
(with-redefs [write mock-write
|
||||||
|
write-end mock-write-end
|
||||||
|
send-off mock-send-off]
|
||||||
|
(f)
|
||||||
|
(reset! written-responses [])))
|
||||||
|
|
||||||
|
(use-fixtures :each mock-session-fixture)
|
||||||
|
|
||||||
|
(deftest basic-queue-test
|
||||||
|
(let [options test-options
|
||||||
|
back-channel {:respond {}
|
||||||
|
:chunk true
|
||||||
|
:bytes-sent 0}
|
||||||
|
session (-> (Session. "test-id"
|
||||||
|
options
|
||||||
|
back-channel
|
||||||
|
(ArrayBuffer. 0 0 (->queue) (->queue))
|
||||||
|
nil
|
||||||
|
nil)
|
||||||
|
(queue-string "\"one\"")
|
||||||
|
(queue-string "\"two\""))]
|
||||||
|
(is (= (type (:array-buffer session))
|
||||||
|
ArrayBuffer))
|
||||||
|
(is (= (first (to-flush (:array-buffer session)))
|
||||||
|
[[1 "\"one\""]
|
||||||
|
[2 "\"two\""]]))
|
||||||
|
(is (= (last-acknowledged-id (:array-buffer session))
|
||||||
|
0))
|
||||||
|
(is (= (outstanding-bytes (:array-buffer session))
|
||||||
|
10))))
|
||||||
|
|
||||||
|
(deftest basic-flush-test
|
||||||
|
(let [options test-options
|
||||||
|
back-channel {:respond {}
|
||||||
|
:chunk true
|
||||||
|
:bytes-sent 0}
|
||||||
|
session (-> (Session. "test-id"
|
||||||
|
options
|
||||||
|
back-channel
|
||||||
|
(ArrayBuffer. 0 0 (->queue) (->queue))
|
||||||
|
nil
|
||||||
|
nil)
|
||||||
|
(queue-string "\"one\"")
|
||||||
|
(queue-string "\"two\"")
|
||||||
|
(flush-buffer))]
|
||||||
|
(is (= (first (to-flush (:array-buffer session)))
|
||||||
|
nil))
|
||||||
|
(is (= @written-responses
|
||||||
|
[[:write "[[1,\"one\"]]"]
|
||||||
|
[:write "[[2,\"two\"]]"]]))
|
||||||
|
(is (= (get-in session [:back-channel :bytes-sent])
|
||||||
|
10))))
|
||||||
|
|
||||||
|
(deftest flush-without-back-channel-test
|
||||||
|
(let [options test-options
|
||||||
|
back-channel nil
|
||||||
|
session (-> (Session. "test-id"
|
||||||
|
options
|
||||||
|
back-channel
|
||||||
|
(ArrayBuffer. 0 0 (->queue) (->queue))
|
||||||
|
nil
|
||||||
|
nil)
|
||||||
|
(queue-string "\"one\"")
|
||||||
|
(queue-string "\"two\"")
|
||||||
|
(flush-buffer))]
|
||||||
|
(is (nil? (:back-channel session)))
|
||||||
|
(is (= (first (to-flush (:array-buffer session)))
|
||||||
|
[[1 "\"one\""]
|
||||||
|
[2 "\"two\""]]))
|
||||||
|
(is (= @written-responses
|
||||||
|
[]))))
|
||||||
|
|
||||||
|
(deftest flush-with-write-error-test
|
||||||
|
(with-redefs [write (fn [response data]
|
||||||
|
; simple way to intentionally trigger a failure when
|
||||||
|
; flush-buffer internally calls write
|
||||||
|
(if (.contains data "fail")
|
||||||
|
(throw (new Exception "intentional write failure"))
|
||||||
|
(mock-write response data)))]
|
||||||
|
(let [options test-options
|
||||||
|
back-channel {:respond {}
|
||||||
|
:chunk true
|
||||||
|
:bytes-sent 0}
|
||||||
|
session (-> (Session. "test-id"
|
||||||
|
options
|
||||||
|
back-channel
|
||||||
|
(ArrayBuffer. 0 0 (->queue) (->queue))
|
||||||
|
nil
|
||||||
|
nil)
|
||||||
|
(queue-string "\"one\"")
|
||||||
|
(queue-string "\"two\"")
|
||||||
|
(queue-string "\"fail\"")
|
||||||
|
(queue-string "\"three\"")
|
||||||
|
(flush-buffer))]
|
||||||
|
(is (= (first (to-flush (:array-buffer session)))
|
||||||
|
[[1 "\"one\""]
|
||||||
|
[2 "\"two\""]
|
||||||
|
[3 "\"fail\""]
|
||||||
|
[4 "\"three\""]]))
|
||||||
|
(is (= @written-responses
|
||||||
|
[[:write "[[1,\"one\"]]"]
|
||||||
|
[:write "[[2,\"two\"]]"]
|
||||||
|
[:write-end]]))
|
||||||
|
(is (nil? (:back-channel session))))))
|
Reference in a new issue