diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-09-25 16:15:16 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-09-25 16:15:16 -0400 |
commit | 650c20f1ca4e07591a727e1cfcc74b3363d15985 (patch) | |
tree | 85d11f6437cde22f410c25e0e5f71a3131ebd07d /test/lisp/erc/erc-scenarios-misc.el | |
parent | 8869332684c2302b5ba1ead4568bbc7ba1c0183e (diff) | |
parent | 4b85ae6a24380fb67a3315eaec9233f17a872473 (diff) | |
download | emacs-650c20f1ca4e07591a727e1cfcc74b3363d15985.tar.gz emacs-650c20f1ca4e07591a727e1cfcc74b3363d15985.tar.bz2 emacs-650c20f1ca4e07591a727e1cfcc74b3363d15985.zip |
Merge 'master' into noverlay
Diffstat (limited to 'test/lisp/erc/erc-scenarios-misc.el')
-rw-r--r-- | test/lisp/erc/erc-scenarios-misc.el | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/test/lisp/erc/erc-scenarios-misc.el b/test/lisp/erc/erc-scenarios-misc.el new file mode 100644 index 00000000000..ded620ccc1d --- /dev/null +++ b/test/lisp/erc/erc-scenarios-misc.el @@ -0,0 +1,180 @@ +;;; erc-scenarios-misc.el --- Misc scenarios for ERC -*- lexical-binding: t -*- + +;; Copyright (C) 2022 Free Software Foundation, Inc. +;; +;; This file is part of GNU Emacs. +;; +;; This program is free software: you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation, either version 3 of the +;; License, or (at your option) any later version. +;; +;; This program is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see +;; <https://www.gnu.org/licenses/>. + +(require 'ert-x) +(eval-and-compile + (let ((load-path (cons (ert-resource-directory) load-path))) + (require 'erc-scenarios-common))) + +(eval-when-compile (require 'erc-join)) + +(ert-deftest erc-scenarios-base-flood () + :tags '(:expensive-test) + (erc-scenarios-common-with-cleanup + ((erc-scenarios-common-dialog "base/flood") + (dumb-server (erc-d-run "localhost" t 'soju)) + (port (process-contact dumb-server :service)) + (erc-server-flood-penalty 0.5) ; this ratio MUST match + (erc-server-flood-margin 1.5) ; the default of 3:10 + (expect (erc-d-t-make-expecter)) + erc-autojoin-channels-alist) + + (ert-info ("Connect to bouncer") + (with-current-buffer + (erc :server "127.0.0.1" + :port port + :nick "tester" + :password "changeme" + :full-name "tester") + (should (string= (buffer-name) (format "127.0.0.1:%d" port))) + (funcall expect 5 "Soju"))) + + (ert-info ("#chan@foonet exists") + (with-current-buffer (erc-d-t-wait-for 5 (get-buffer "#chan/foonet")) + (erc-d-t-search-for 2 "<bob/foonet>") + (erc-d-t-absent-for 0.1 "<joe") + (funcall expect 3 "was created on"))) + + (ert-info ("#chan@barnet exists") + (with-current-buffer (erc-d-t-wait-for 5 (get-buffer "#chan/barnet")) + (erc-d-t-search-for 2 "<joe/barnet>") + (erc-d-t-absent-for 0.1 "<bob") + (funcall expect 3 "was created on") + (funcall expect 5 "To get good guard"))) + + (ert-info ("Message not held in queue limbo") + (with-current-buffer "#chan/foonet" + ;; Without 'no-penalty param in `erc-server-send', should fail + ;; after ~10 secs with: + ;; + ;; (erc-d-timeout "Timed out awaiting request: (:name ~privmsg + ;; :pattern \\`PRIVMSG #chan/foonet :alice: hi :timeout 2 + ;; :dialog soju)") + ;; + ;; Try reversing commit and spying on queue interactively + (erc-cmd-MSG "#chan/foonet alice: hi") + (funcall expect 5 "tester: Good, very good"))) + + (ert-info ("All output sent") + (with-current-buffer "#chan/foonet" + (funcall expect 8 "Some man or other")) + (with-current-buffer "#chan/barnet" + (funcall expect 10 "That's he that was Othello"))))) + +;; Corner case demoing fallback behavior for an absent 004 RPL but a +;; present 422 or 375. If this is unlikely enough, remove or guard +;; with `ert-skip' plus some condition so it only runs when explicitly +;; named via ERT specifier + +(ert-deftest erc-scenarios-networks-announced-missing () + :tags '(:expensive-test) + (erc-scenarios-common-with-cleanup + ((erc-scenarios-common-dialog "networks/announced-missing") + (expect (erc-d-t-make-expecter)) + (dumb-server (erc-d-run "localhost" t 'foonet)) + (port (process-contact dumb-server :service))) + + (ert-info ("Connect without password") + (with-current-buffer (erc :server "127.0.0.1" + :port port + :nick "tester" + :full-name "tester") + (should (string= (buffer-name) (format "127.0.0.1:%d" port))) + (let ((err (should-error (sleep-for 1)))) + (should (string-match-p "Failed to determine" (cadr err)))) + (funcall expect 1 "Failed to determine") + (funcall expect 1 "Failed to determine") + (should-not erc-network) + (should (string= erc-server-announced-name "irc.foonet.org")))))) + +;; Targets that are host/server masks like $*, $$*, and #* are routed +;; to the server buffer: https://github.com/ircdocs/wooooms/issues/5 + +(ert-deftest erc-scenarios-base-mask-target-routing () + :tags '(:expensive-test) + (erc-scenarios-common-with-cleanup + ((erc-scenarios-common-dialog "base/mask-target-routing") + (dumb-server (erc-d-run "localhost" t 'foonet)) + (port (process-contact dumb-server :service)) + (expect (erc-d-t-make-expecter))) + + (ert-info ("Connect to foonet") + (with-current-buffer (erc :server "127.0.0.1" + :port port + :nick "tester" + :password "changeme" + :full-name "tester") + (should (string= (buffer-name) (format "127.0.0.1:%d" port))))) + + (erc-d-t-wait-for 10 (get-buffer "foonet")) + + (ert-info ("Channel buffer #foo playback received") + (with-current-buffer (erc-d-t-wait-for 3 (get-buffer "#foo")) + (funcall expect 10 "Excellent workman"))) + + (ert-info ("Global notices routed to server buffer") + (with-current-buffer "foonet" + (funcall expect 10 "going down soon") + (funcall expect 10 "this is a warning") + (funcall expect 10 "second warning") + (funcall expect 10 "final warning"))) + + (should-not (get-buffer "$*")))) + +(ert-deftest erc-scenarios-dcc-chat-accept () + :tags '(:expensive-test) + (erc-scenarios-common-with-cleanup + ((erc-scenarios-common-dialog "dcc/chat") + (dcc-server (erc-d-run "127.0.0.1" t "erc-dcc-server" 'accept-dcc + :ending "\n")) + (dcc-port (process-contact dcc-server :service)) + (dumb-server (erc-d-run "localhost" t 'accept :tmpl-vars + `((port . ,(number-to-string dcc-port))))) + (port (process-contact dumb-server :service)) + (expect (erc-d-t-make-expecter))) + + (ert-info ("Connect to foonet") + (with-current-buffer (erc :server "127.0.0.1" + :port port + :nick "tester" + :password "changeme" + :full-name "tester") + (should (string= (buffer-name) (format "127.0.0.1:%d" port))))) + + (ert-info ("Offer received") + (with-current-buffer (erc-d-t-wait-for 10 (get-buffer "foonet")) + (funcall expect 10 "DCC: chat offered by dummy") + (erc-cmd-DCC "CHAT" "dummy"))) + + ;; Regression + (erc-d-t-ensure-for 1 (not (get-buffer "tester"))) + + ;; Becomes current buffer by default (because `erc-join-buffer') + (erc-d-t-wait-for 10 (get-buffer "DCC-CHAT-dummy")) + + (with-current-buffer "foonet" + (funcall expect 10 "*** DCC: accepting chat from dummy")) + + (ert-info ("Chat with dummy") + (with-current-buffer "DCC-CHAT-dummy" + (erc-scenarios-common-say "Hi") + (funcall expect 10 "Hola"))))) + +;;; erc-scenarios-misc.el ends here |