From 2a32086a2adbc63ac69cded385d276e36dac23c8 Mon Sep 17 00:00:00 2001 From: Toby Crawley Date: Fri, 20 Feb 2015 12:03:06 -0500 Subject: [PATCH] Use WunderBoss that allows WS onClose to work in-WF [IMMUTANT-529] This also includes tests to confirm. --- project.clj | 6 ++--- web/src/immutant/web/internal/servlet.clj | 3 ++- .../immutant/web/integ_test.clj | 24 +++++++++++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/project.clj b/project.clj index 2f3a2385..2fd2e72c 100644 --- a/project.clj +++ b/project.clj @@ -90,8 +90,8 @@ potemkin "0.3.11" clj-http "1.0.1" - org.projectodd.wunderboss "0.4.1" - ;; org.projectodd.wunderboss "1.x.incremental.193" + ;; org.projectodd.wunderboss "0.4.1" + org.projectodd.wunderboss "1.x.incremental.195" ;; org.projectodd.wunderboss "0.5.0-SNAPSHOT" org.immutant :version}} @@ -100,7 +100,7 @@ ["change" "version" "set" "\"2.0.0-beta2\""] ["modules" "change" "version" "set" "\"2.0.0-beta2\""] - ["modules" ":dirs" ".,web,messaging,transactions,scheduling,caching" + ["modules" ":dirs" ".,web,messaging,transactions,scheduling,caching" "file-replace" "README.md" "(| \")" "(\"]|)" "version"] ["vcs" "commit"] diff --git a/web/src/immutant/web/internal/servlet.clj b/web/src/immutant/web/internal/servlet.clj index c5c0249c..900e5ea9 100644 --- a/web/src/immutant/web/internal/servlet.clj +++ b/web/src/immutant/web/internal/servlet.clj @@ -125,7 +125,8 @@ (when (instance? WebsocketChannel body) (-> config .getUserProperties - (.put "Endpoint" (.endpoint ^WebsocketChannel body))))))) + (.put DelegatingJavaxEndpoint/ENDPOINT_KEY + (.endpoint ^WebsocketChannel body))))))) (defn ^Servlet create-servlet "Encapsulate a ring handler within a servlet" diff --git a/web/test-integration/immutant/web/integ_test.clj b/web/test-integration/immutant/web/integ_test.clj index 3772e754..b7989eaf 100644 --- a/web/test-integration/immutant/web/integ_test.clj +++ b/web/test-integration/immutant/web/integ_test.clj @@ -212,6 +212,30 @@ (ws/send-msg socket "hello") (is (= 1000 (:code (read-string (get-body (str (cdef-url) "state")))))))) +(deftest ws-on-close-should-be-invoked-when-closing-on-client + (replace-handler + '(do + (reset! client-state (promise)) + (fn [request] + (async/as-channel request + :on-close (fn [_ r] (deliver @client-state r)))))) + (let [socket (ws/connect (cdef-url "ws"))] + (ws/close socket) + (is (= 1000 (:code (read-string (get-body (str (cdef-url) "state")))))))) + +(deftest ws-on-close-should-be-invoked-for-every-connection + (replace-handler + '(do + (reset! client-state #{}) + (fn [request] + (async/as-channel request + :on-close (fn [ch r] (swap! client-state conj (str ch))))))) + (let [socket1 (ws/connect (cdef-url "ws")) + socket2 (ws/connect (cdef-url "ws"))] + (ws/close socket1) + (ws/close socket2) + (is (= 2 (-> (str (cdef-url) "state") get-body read-string count))))) + (deftest ws-on-complete-should-be-called-after-send (replace-handler '(do