branch: externals/websocket commit 5aaf9d12068f98fb4efa772a3e5f4bb350b79a99 Author: Andrew Hyatt <ahy...@gmail.com> Commit: Andrew Hyatt <ahy...@gmail.com>
Make the localhost-based test compatible with ert. Also, change the testserver.py echo server to be a true echo server, so that it acts in the same way echo.websocket.org does. --- testserver.py | 2 +- websocket-functional-test.el | 83 +++++++++++++++++++++----------------------- 2 files changed, 40 insertions(+), 45 deletions(-) diff --git a/testserver.py b/testserver.py old mode 100644 new mode 100755 index 79cd912882..46cf62d94d --- a/testserver.py +++ b/testserver.py @@ -14,7 +14,7 @@ class EchoWebSocket(websocket.WebSocketHandler): def on_message(self, message): logging.info("ON_MESSAGE: {0}".format(message)) - self.write_message("You said: {0}".format(message)) + self.write_message(message) def on_close(self): logging.info("ON_CLOSE") diff --git a/websocket-functional-test.el b/websocket-functional-test.el index c70ebd2cb8..8a599d043d 100644 --- a/websocket-functional-test.el +++ b/websocket-functional-test.el @@ -29,29 +29,7 @@ (require 'websocket) (require 'cl) -;;;;;;;;;;;;;;;;;;;;;;; -;; Local server test ;; -;;;;;;;;;;;;;;;;;;;;;;; - -(message "Testing with local server") - -(setq websocket-debug t) - -(unless (boundp 'wstest-server-url) - (setq wstest-server-url "wss://echo.websocket.org")) - -(defvar wstest-server-buffer (get-buffer-create "*wstest-server*")) -(defvar wstest-server-name "wstest-server") -(when wstest-server-url "wss://127.0.0.1:9999" - (setq wstest-server-proc - (start-process wstest-server-name wstest-server-buffer - "python3" "testserver.py" "--log_to_stderr" "--logging=debug"))) -(sleep-for 1) - -(defvar wstest-msgs nil) -(defvar wstest-closed nil) - -(message "Opening the websocket") +;;; Code: (defmacro websocket-test-wait-with-timeout (timeout &rest body) "Run BODY until true or TIMEOUT (in seconds) is reached. @@ -65,29 +43,43 @@ written to be used widely." (sleep-for 0.5)) result)) +(defun websocket-functional-client-test (wstest-server-url) + "Run the main part of an ert test against WSTEST-SERVER-URL." + ;; the server may have an untrusted certificate, for the test to proceed, we + ;; need to disable trust checking. + (let* ((tls-checktrust nil) + (wstest-closed nil) + (wstest-msg) + (wstest-server-proc) + (wstest-ws + (websocket-open + wstest-server-url + :on-message (lambda (_websocket frame) + (setq wstest-msg (websocket-frame-text frame))) + :on-close (lambda (_websocket) (setq wstest-closed t))))) + (should (websocket-test-wait-with-timeout 2 (websocket-openp wstest-ws))) + (should (websocket-test-wait-with-timeout 2 (eq 'open (websocket-ready-state wstest-ws)))) + (should (null wstest-msg)) + (websocket-send-text wstest-ws "Hi!") + (should (websocket-test-wait-with-timeout 5 (equal wstest-msg "Hi!"))) + (websocket-close wstest-ws))) + +(ert-deftest websocket-client-with-local-server () + ;; If testserver.py cannot start, this test will fail. In general, if you + ;; don't care about avoiding outside connections, the remote server variant is + ;; usually easier to run, and tests the same things.. + (let ((proc (start-process + "websocket-testserver" "*websocket-testserver*" + "python3" "testserver.py" "--log_to_stderr" "--logging=debug"))) + (when proc + (sleep-for 1) + (websocket-functional-client-test "ws://127.0.0.1:9999")))) + (ert-deftest websocket-client-with-remote-server () ;; Emacs previous to Emacs 24 cannot handle wss. - (when (>= (string-to-number (substring emacs-version 0 2)) 24) - ;; echo.websocket.org has an untrusted certificate, for the test to - ;; proceed, we need to disable trust checking. - (let* ((tls-checktrust nil) - (wstest-closed nil) - (wstest-msg) - (wstest-ws - (websocket-open - wstest-server-url - :on-message (lambda (_websocket frame) - (setq wstest-msg (websocket-frame-text frame))) - :on-close (lambda (_websocket) (setq wstest-closed t))))) - (should (websocket-test-wait-with-timeout 2 (websocket-openp wstest-ws))) - (should (websocket-test-wait-with-timeout 2 (eq 'open (websocket-ready-state wstest-ws)))) - (should (null wstest-msg)) - (websocket-send-text wstest-ws "Hi!") - (should (websocket-test-wait-with-timeout 5 (equal wstest-msg "Hi!"))) - (websocket-close wstest-ws) - (when wstest-server-proc - (sleep-for 1) - (kill-process wstest-server-proc))))) + (if (>= (string-to-number (substring emacs-version 0 2)) 24) + (websocket-functional-client-test "wss://echo.websocket.org") + (websocket-functional-client-test "ws://echo.websocket.org"))) (ert-deftest websocket-server () (let* ((wstest-closed) @@ -109,3 +101,6 @@ written to be used widely." (should (websocket-test-wait-with-timeout 1 (equal wstest-msg "你好"))) (websocket-server-close server-conn) (should (websocket-test-wait-with-timeout 1 wstest-closed)))) + +(provide 'websocket-functional-test) +;;; websocket-functional-test.el ends here