From: Christian Heller Date: Wed, 24 Sep 2025 10:51:27 +0000 (+0200) Subject: Re-enable testing via test.txt. X-Git-Url: https://plomlompom.com/repos/?a=commitdiff_plain;h=5f8d3417169781b798bdb27dc75cc5aba328dc57;p=ircplom Re-enable testing via test.txt. --- diff --git a/src/test.txt b/src/test.txt new file mode 100644 index 0000000..ba4f473 --- /dev/null +++ b/src/test.txt @@ -0,0 +1,444 @@ +# BASIC TUI PROMPT TESTS + +# nothing should happen on empty command input +> + +# expected complaints on wrong command inputs +> foo +0 !# invalid prompt command: not prefixed by / +> /foo +0 !# invalid prompt command: /foo unknown +> /help foo +0 !# invalid prompt command: /help given argument(s) while none expected +> /window +0 !# invalid prompt command: /window too few arguments (given 0, need 1) + +# some simple expected command successes +> /help +0 # commands available in this window: +0 # /connect HOST_PORT [NICKNAME_PW] [USERNAME_REALNAME] +0 # /help +0 # /list +0 # /prompt_enter +0 # /quit +0 # /window TOWARDS +0 # /window.history.scroll DIRECTION +0 # /window.paste +0 # /window.prompt.backspace +0 # /window.prompt.move_cursor DIRECTION +0 # /window.prompt.scroll DIRECTION +> /list +0 # windows available via /window: +0 # 0) :start + +# should probably not be available at all by explicit prompt writing, but for now this be the expected behavior … +> /prompt_enter +0 !# invalid prompt command: /prompt_enter would loop into ourselves +> /window.history.scroll foo +> /window.prompt.backspace +> /window.prompt.move_cursor foo +> /window.prompt.scroll foo +> /window.paste + +# CONNECTED INTERACTIONS + +# on /connect init databases, log in new windows +> /connect foo.bar.baz foo:bar foobarbazquux:baz +, $ DISCONNECTED +1 $ isupport cleared +1 $ isupport:CHANTYPES set to: [#&] +1 $ isupport:PREFIX set to: [(ov)@+] +1 $ isupport:USERLEN set to: [10] +1 $ caps cleared +1 $ users cleared +1 $ channels cleared + +# connect with values set by /connect, init CAP negotation +1 $ hostname set to: [foo.bar.baz] +1 $ port set to: [-1] +1 $ nick_wanted set to: [foo] +1 $ user_wanted set to: [foobarbazquux] +1 $ realname set to: [baz] +1 $ password set to: [bar] +1 $ port set to: [6697] +1 $ connection_state set to: [connecting] +1 $ connection_state set to: [connected] +, $ CONNECTED +1 > CAP LS :302 +1 > USER foobarbazquux 0 * :baz +1 > NICK :foo + +# expect some NOTICE and PING to process/reply during initiation +0:1 < :*.?.net NOTICE * :*** Looking up your ident... +2 < *** [ server] *** Looking up your ident... +0:1 < :*.?.net NOTICE * :*** Looking up your hostname... +2 < *** [ server] *** Looking up your hostname... +0:1 < :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo) +2 < *** [ server] *** Found your hostname (baz.bar.foo) +0:1 < PING :? +1 > PONG :? + +# handle 433 +0:1 < :*.?.net 433 * foo :Nickname already in use +1 !$ nickname already in use, trying increment +1 > NICK :foo0 +0:1 < :*.?.net 433 * foo0 :Nickname already in use +1 !$ nickname already in use, trying increment +1 > NICK :foo1 + +# collect server capabilities +0:1 < :*.?.net CAP * LS : foo bar sasl=PLAIN,EXTERNAL baz +1 > CAP REQ :sasl +1 > CAP :LIST +0:1 < :*.?.net CAP * ACK :sasl +0:1 < :*.?.net CAP * LIST :cap-notify sasl +1 $ caps:bar:data set to: [] +1 $ caps:baz:data set to: [] +1 $ caps:foo:data set to: [] +1 $ caps:sasl:data set to: [] +1 $ caps:sasl:data set to: [PLAIN,EXTERNAL] +1 $ caps:sasl:enabled set to: [True] + +# authenticate via SASL, collect items of user identity +1 $ sasl_auth_state set to: [attempting] +1 > AUTHENTICATE :PLAIN +0:1 < AUTHENTICATE + +1 > AUTHENTICATE :Zm9vAGZvbwBiYXI= +0:1 < :foo.bar.baz 900 foo1 foo1!foobarbazq@baz.bar.foo foo :You are now logged in as foo +1 $ users:me:nick set to: [?] +1 $ users:me:nick set to: [foo1] +1 $ users:me:user set to: [foobarbazq] +1 $ users:me:host set to: [baz.bar.foo] +1 $ sasl_account set to: [foo] +0:1 < :foo.bar.baz 903 foo1 :SASL authentication successful +1 $ sasl_auth_state set to: [SASL authentication successful] + +# finish CAP negotation, thus login procedure +1 > CAP :END + +# of all pre-MOTD greeting messages, only process isupports +0:1 < :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network +0:1 < :foo.bar.baz 002 foo1 :Your host is foo.bar.baz +0:1 < :foo.bar.baz 003 foo1 :This server was created Jan 1 2020 +0:1 < :foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi +0:1 < :foo.bar.baz 005 foo1 ABC=DEF GHI=JKL :are supported by this server +1 $ isupport:ABC set to: [DEF] +1 $ isupport:GHI set to: [JKL] +0:1 < :foo.bar.baz 005 foo1 MNO=PQR STU=VWX Y=Z :are supported by this server +1 $ isupport:MNO set to: [PQR] +1 $ isupport:STU set to: [VWX] +1 $ isupport:Y set to: [Z] +0:1 < :foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers +0:1 < :foo.bar.baz 252 foo1 7 :IRC Operators online +0:1 < :foo.bar.baz 253 foo1 4 :unknown connection(s) +0:1 < :foo.bar.baz 254 foo1 800 :channels formed +0:1 < :foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres +0:1 < :foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150 +0:1 < :foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050 +0:1 < :foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received) + +# collect MOTD into a single output (rather than line-by-line) +0:1 < :foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day - +0:1 < :foo.bar.baz 372 foo1 :- Howdy! - +0:1 < :foo.bar.baz 372 foo1 :- Welcome! - +0:1 < :foo.bar.baz 372 foo1 :- (to this server) - +0:1 < :foo.bar.baz 376 foo1 :End of /MOTD command +1 $ motd set to: +1 $ - Howdy! - +1 $ - Welcome! - +1 $ - (to this server) - + +# collect user mode +0:1 < :foo1 MODE foo1 :+Ziw +1 $ users:me:modes set to: [+Ziw] + +# handle bot query NOTICE +0:1 < :SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. +3 < *** [SaslServ] Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. + +# check difference in available commands when switching to client window +> /join #test +0 !# invalid prompt command: /join unknown +> /list +0 # windows available via /window: +0 # 0) :start +0 # 1) foo.bar.baz :DEBUG +0 # 2) foo.bar.baz server +0 # 3) foo.bar.baz SaslServ +> /window 1 +> /help +1 # commands available in this window: +1 # /connect HOST_PORT [NICKNAME_PW] [USERNAME_REALNAME] +1 # /disconnect [QUIT_MSG] +1 # /help +1 # /join CHANNEL +1 # /list +1 # /nick NEW_NICK +1 # /privmsg TARGET MSG +1 # /prompt_enter +1 # /quit +1 # /raw VERB [PARAMS_STR] +1 # /reconnect +1 # /window TOWARDS +1 # /window.disconnect [QUIT_MSG] +1 # /window.history.scroll DIRECTION +1 # /window.join CHANNEL +1 # /window.nick NEW_NICK +1 # /window.paste +1 # /window.privmsg TARGET MSG +1 # /window.prompt.backspace +1 # /window.prompt.move_cursor DIRECTION +1 # /window.prompt.scroll DIRECTION +1 # /window.raw VERB [PARAMS_STR] +1 # /window.reconnect + +# test lack of implementation +0:1 < foo bar baz +1 !$ No handler implemented for: foo bar baz + +# test recoverable 432 +> /nick @foo +1 > NICK :@foo +0:1 < :*.?.net 432 foo1 @foo :Erroneous nickname +1 !$ nickname refused for bad format + +# join channel, collect topic, residents; update me:user from JOIN message +> /join #test +1 > JOIN :#test +0:1 < :foo1!~foobarbaz@baz.bar.foo JOIN #test +1 $ users:me:user set to: [~foobarbaz] +0:1 < :foo.bar.baz 332 foo1 #test :foo bar baz +1 $ channels:#test:exits cleared +0:1 < :foo.bar.baz 333 foo1 #test bar!~bar@bar.bar 1234567890 +1 $ channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] +4 $ bar!~bar@bar.bar set topic: foo bar baz +0:1 < :foo.bar.baz 353 foo1 @ #test :foo1 @bar +1 $ users:1:nick set to: [?] +1 $ users:1:nick set to: [bar] +0:1 < :foo.bar.baz 366 foo1 #test :End of /NAMES list. +1 $ channels:#test:user_ids set to: +1 $ 1 +1 $ me +4 $ residents: bar, foo1 + +# deliver PRIVMSG to channel window, update sender's user+host from metadata +0:1 < :bar!~bar@bar.bar PRIVMSG #test :hi there +1 $ users:1:user set to: [~bar] +1 $ users:1:host set to: [bar.bar] +4 < [bar] hi there + +# check _changing_ TOPIC message is communicated to channel window +0:1 < :bar!~bar@bar.bar TOPIC #test :foo bar baz +0:1 < :bar!~bar@bar.bar TOPIC #test :abc def ghi +1 $ channels:#test:topic set to: [Topic(what='abc def ghi', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] +4 $ bar!~bar@bar.bar set topic: abc def ghi + +# process non-self channel JOIN +0:1 < :baz!~baz@baz.baz JOIN :#test +1 $ users:2:nick set to: [?] +1 $ users:2:nick set to: [baz] +1 $ users:2:user set to: [~baz] +1 $ users:2:host set to: [baz.baz] +1 $ channels:#test:user_ids set to: +1 $ 1 +1 $ 2 +1 $ me +4 $ baz!~baz@baz.baz joins + +# join second channel with partial residents identity to compare distribution of resident-specific messages +> /join #testtest +1 > JOIN :#testtest +0:1 < :foo1!~foobarbaz@baz.bar.foo JOIN #testtest +0:1 < :foo.bar.baz 353 foo1 @ #testtest :foo1 baz +1 $ channels:#testtest:exits cleared +0:1 < :foo.bar.baz 366 foo1 #testtest :End of /NAMES list. +1 $ channels:#testtest:user_ids set to: +1 $ 2 +1 $ me +5 $ residents: baz, foo1 + +# handle query window with known user +0:1 < :baz!~baz@baz.baz PRIVMSG foo1 :hi there +6 < [baz] hi there +> /privmsg baz hello, how is it going +1 > PRIVMSG baz :hello, how is it going +6 > [foo1] hello, how is it going +0:1 < :baz!~baz@baz.baz PRIVMSG foo1 :fine! +6 < [baz] fine! + +# handle failure to query absent user +> /privmsg barbar hello! +1 > PRIVMSG barbar :hello! +7 > [foo1] hello! +0:1 < :*.?.net 401 foo1 barbar :No such nick/channel +7 !$ barbar not online + +# handle non-self renaming +0:1 < :baz!~baz@baz.baz NICK :bazbaz +1 $ users:2:nick set to: [bazbaz] +4,5,6 $ baz!~baz@baz.baz renames bazbaz + +# handle non-self PART in one of two inhabited channels, preserve identity into re-JOIN +0:1 < :bazbaz!~baz@baz.baz PART :#test +1 $ channels:#test:exits:2 set to: [P] +1 $ channels:#test:user_ids set to: +1 $ 1 +1 $ me +4 $ bazbaz!~baz@baz.baz parts +1 $ channels:#test:exits:2 cleared +0:1 < :bazbaz!~baz@baz.baz JOIN :#test +1 $ channels:#test:user_ids set to: +1 $ 1 +1 $ 2 +1 $ me +4 $ bazbaz!~baz@baz.baz joins + +# handle non-self PART in only inhabited channel, lose identity, re-join as new identity +0:1 < :bar!~bar@bar.bar PART :#test +1 $ channels:#test:exits:1 set to: [P] +1 $ channels:#test:user_ids set to: +1 $ 2 +1 $ me +4 $ bar!~bar@bar.bar parts +1 $ channels:#test:exits:1 cleared +1 $ users:1 cleared +0:1 < :bar!~bar@bar.bar JOIN :#test +1 $ users:3:nick set to: [?] +1 $ users:3:nick set to: [bar] +1 $ users:3:user set to: [~bar] +1 $ users:3:host set to: [bar.bar] +1 $ channels:#test:user_ids set to: +1 $ 2 +1 $ 3 +1 $ me +4 $ bar!~bar@bar.bar joins + +# handle non-self QUIT +0:1 < :bazbaz!~baz@baz.baz QUIT :Client Quit +1 $ users:2:exit_msg set to: [QClient Quit] +6 $ bazbaz!~baz@baz.baz quits: Client Quit +1 $ channels:#test:exits:2 set to: [QClient Quit] +1 $ channels:#test:user_ids set to: +1 $ 3 +1 $ me +4 $ bazbaz!~baz@baz.baz quits: Client Quit +1 $ channels:#test:exits:2 cleared +1 $ channels:#testtest:exits:2 set to: [QClient Quit] +1 $ channels:#testtest:user_ids set to: +1 $ me +5 $ bazbaz!~baz@baz.baz quits: Client Quit +1 $ channels:#testtest:exits:2 cleared +1 $ users:2 cleared + +# handle self-PART: clear channel, and its squatters +0:1 < :foo1!~foobarbaz@baz.bar.foo PART :#test +1 $ channels:#test:exits:me set to: [P] +1 $ channels:#test:user_ids set to: +1 $ 3 +4 $ foo1!~foobarbaz@baz.bar.foo parts +1 $ channels:#test:exits:me cleared +1 $ channels:#test cleared +1 $ users:3 cleared + +# fail to reconnect while connected +> /reconnect +1 !$ not re-connecting since already connected + +# handle /disconnect, clear all +> /disconnect +1 > QUIT :ircplom says bye +0:1 < :foo1!~foobarbaz@baz.bar.foo QUIT :Client Quit +1 $ users:me:exit_msg set to: [QClient Quit] +2,3,6,7 $ foo1!~foobarbaz@baz.bar.foo quits: Client Quit +1 $ channels:#testtest:exits:me set to: [QClient Quit] +1 $ channels:#testtest:user_ids set to: +5 $ foo1!~foobarbaz@baz.bar.foo quits: Client Quit +1 $ channels:#testtest:exits:me cleared +0:1 < ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye] +1 $ connection_state set to: [Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]] +1 $ connection_state set to: [] +2,3,4,5,6,7 $ DISCONNECTED +1 $ isupport cleared +1 $ isupport:CHANTYPES set to: [#&] +1 $ isupport:PREFIX set to: [(ov)@+] +1 $ isupport:USERLEN set to: [10] +1 $ motd set to: +1 $ sasl_account set to: [] +1 $ sasl_auth_state set to: [] +1 $ caps cleared +1 $ channels cleared +1 $ users cleared + +# fail to send in disconnect, check alert window is command prompt window +> /window 6 +> /privmsg barbar test +6 !$ cannot send, connection seems closed +> /window 1 +> /privmsg barbar test +1 !$ cannot send, connection seems closed +> /privmsg #test test +1 !$ not sending, since not in channel + +# test setting up second client, but 432 irrecoverably +> /connect baz.bar.foo ?foo foo:foo +8 $ isupport cleared +8 $ isupport:CHANTYPES set to: [#&] +8 $ isupport:PREFIX set to: [(ov)@+] +8 $ isupport:USERLEN set to: [10] +8 $ hostname set to: [baz.bar.foo] +8 $ port set to: [-1] +8 $ nick_wanted set to: [?foo] +8 $ user_wanted set to: [foo] +8 $ realname set to: [foo] +8 $ port set to: [6697] +8 $ connection_state set to: [connecting] +8 $ connection_state set to: [connected] +, $ CONNECTED +1:8 > CAP LS :302 +1:8 > USER foo 0 * :foo +1:8 > NICK :?foo +1:8 < :*.?.net 432 * ?foo :Erroneous nickname +8 $ connection_state set to: [] +, $ DISCONNECTED +8 $ isupport cleared +8 $ isupport:CHANTYPES set to: [#&] +8 $ isupport:PREFIX set to: [(ov)@+] +8 $ isupport:USERLEN set to: [10] +8 !$ nickname refused for bad format, giving up + +# test failing third connection +> /connect baz.baz.baz baz baz:baz +9 $ isupport cleared +9 $ isupport:CHANTYPES set to: [#&] +9 $ isupport:PREFIX set to: [(ov)@+] +9 $ isupport:USERLEN set to: [10] +9 $ hostname set to: [baz.baz.baz] +9 $ port set to: [-1] +9 $ nick_wanted set to: [baz] +9 $ user_wanted set to: [baz] +9 $ realname set to: [baz] +9 $ port set to: [6697] +9 $ connection_state set to: [connecting] +9 $ connection_state set to: [connected] +, $ CONNECTED +2:9 > CAP LS :302 +2:9 > USER baz 0 * :baz +2:9 > NICK :baz +2: < FAKE_IRC_CONN_ABORT_EXCEPTION +9 $ connection_state set to: [broken: FAKE_IRC_CONN_ABORT_EXCEPTION] +9 $ connection_state set to: [] +, $ DISCONNECTED +9 $ isupport cleared +9 $ isupport:CHANTYPES set to: [#&] +9 $ isupport:PREFIX set to: [(ov)@+] +9 $ isupport:USERLEN set to: [10] + +# check that (save TUI tests assuming start on window 0, and no 4 yet) on reconnect, all the same effects can be expected +> /reconnect +repeat 63:65 +2,3,4,5,6,7 $ CONNECTED +repeat 66:158 +repeat 168:382 + +> /quit +0 < diff --git a/test.txt b/test.txt deleted file mode 100644 index ba4f473..0000000 --- a/test.txt +++ /dev/null @@ -1,444 +0,0 @@ -# BASIC TUI PROMPT TESTS - -# nothing should happen on empty command input -> - -# expected complaints on wrong command inputs -> foo -0 !# invalid prompt command: not prefixed by / -> /foo -0 !# invalid prompt command: /foo unknown -> /help foo -0 !# invalid prompt command: /help given argument(s) while none expected -> /window -0 !# invalid prompt command: /window too few arguments (given 0, need 1) - -# some simple expected command successes -> /help -0 # commands available in this window: -0 # /connect HOST_PORT [NICKNAME_PW] [USERNAME_REALNAME] -0 # /help -0 # /list -0 # /prompt_enter -0 # /quit -0 # /window TOWARDS -0 # /window.history.scroll DIRECTION -0 # /window.paste -0 # /window.prompt.backspace -0 # /window.prompt.move_cursor DIRECTION -0 # /window.prompt.scroll DIRECTION -> /list -0 # windows available via /window: -0 # 0) :start - -# should probably not be available at all by explicit prompt writing, but for now this be the expected behavior … -> /prompt_enter -0 !# invalid prompt command: /prompt_enter would loop into ourselves -> /window.history.scroll foo -> /window.prompt.backspace -> /window.prompt.move_cursor foo -> /window.prompt.scroll foo -> /window.paste - -# CONNECTED INTERACTIONS - -# on /connect init databases, log in new windows -> /connect foo.bar.baz foo:bar foobarbazquux:baz -, $ DISCONNECTED -1 $ isupport cleared -1 $ isupport:CHANTYPES set to: [#&] -1 $ isupport:PREFIX set to: [(ov)@+] -1 $ isupport:USERLEN set to: [10] -1 $ caps cleared -1 $ users cleared -1 $ channels cleared - -# connect with values set by /connect, init CAP negotation -1 $ hostname set to: [foo.bar.baz] -1 $ port set to: [-1] -1 $ nick_wanted set to: [foo] -1 $ user_wanted set to: [foobarbazquux] -1 $ realname set to: [baz] -1 $ password set to: [bar] -1 $ port set to: [6697] -1 $ connection_state set to: [connecting] -1 $ connection_state set to: [connected] -, $ CONNECTED -1 > CAP LS :302 -1 > USER foobarbazquux 0 * :baz -1 > NICK :foo - -# expect some NOTICE and PING to process/reply during initiation -0:1 < :*.?.net NOTICE * :*** Looking up your ident... -2 < *** [ server] *** Looking up your ident... -0:1 < :*.?.net NOTICE * :*** Looking up your hostname... -2 < *** [ server] *** Looking up your hostname... -0:1 < :*.?.net NOTICE * :*** Found your hostname (baz.bar.foo) -2 < *** [ server] *** Found your hostname (baz.bar.foo) -0:1 < PING :? -1 > PONG :? - -# handle 433 -0:1 < :*.?.net 433 * foo :Nickname already in use -1 !$ nickname already in use, trying increment -1 > NICK :foo0 -0:1 < :*.?.net 433 * foo0 :Nickname already in use -1 !$ nickname already in use, trying increment -1 > NICK :foo1 - -# collect server capabilities -0:1 < :*.?.net CAP * LS : foo bar sasl=PLAIN,EXTERNAL baz -1 > CAP REQ :sasl -1 > CAP :LIST -0:1 < :*.?.net CAP * ACK :sasl -0:1 < :*.?.net CAP * LIST :cap-notify sasl -1 $ caps:bar:data set to: [] -1 $ caps:baz:data set to: [] -1 $ caps:foo:data set to: [] -1 $ caps:sasl:data set to: [] -1 $ caps:sasl:data set to: [PLAIN,EXTERNAL] -1 $ caps:sasl:enabled set to: [True] - -# authenticate via SASL, collect items of user identity -1 $ sasl_auth_state set to: [attempting] -1 > AUTHENTICATE :PLAIN -0:1 < AUTHENTICATE + -1 > AUTHENTICATE :Zm9vAGZvbwBiYXI= -0:1 < :foo.bar.baz 900 foo1 foo1!foobarbazq@baz.bar.foo foo :You are now logged in as foo -1 $ users:me:nick set to: [?] -1 $ users:me:nick set to: [foo1] -1 $ users:me:user set to: [foobarbazq] -1 $ users:me:host set to: [baz.bar.foo] -1 $ sasl_account set to: [foo] -0:1 < :foo.bar.baz 903 foo1 :SASL authentication successful -1 $ sasl_auth_state set to: [SASL authentication successful] - -# finish CAP negotation, thus login procedure -1 > CAP :END - -# of all pre-MOTD greeting messages, only process isupports -0:1 < :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network -0:1 < :foo.bar.baz 002 foo1 :Your host is foo.bar.baz -0:1 < :foo.bar.baz 003 foo1 :This server was created Jan 1 2020 -0:1 < :foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi -0:1 < :foo.bar.baz 005 foo1 ABC=DEF GHI=JKL :are supported by this server -1 $ isupport:ABC set to: [DEF] -1 $ isupport:GHI set to: [JKL] -0:1 < :foo.bar.baz 005 foo1 MNO=PQR STU=VWX Y=Z :are supported by this server -1 $ isupport:MNO set to: [PQR] -1 $ isupport:STU set to: [VWX] -1 $ isupport:Y set to: [Z] -0:1 < :foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers -0:1 < :foo.bar.baz 252 foo1 7 :IRC Operators online -0:1 < :foo.bar.baz 253 foo1 4 :unknown connection(s) -0:1 < :foo.bar.baz 254 foo1 800 :channels formed -0:1 < :foo.bar.baz 255 foo1 :I have 100 clients and 1 serveres -0:1 < :foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150 -0:1 < :foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050 -0:1 < :foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received) - -# collect MOTD into a single output (rather than line-by-line) -0:1 < :foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day - -0:1 < :foo.bar.baz 372 foo1 :- Howdy! - -0:1 < :foo.bar.baz 372 foo1 :- Welcome! - -0:1 < :foo.bar.baz 372 foo1 :- (to this server) - -0:1 < :foo.bar.baz 376 foo1 :End of /MOTD command -1 $ motd set to: -1 $ - Howdy! - -1 $ - Welcome! - -1 $ - (to this server) - - -# collect user mode -0:1 < :foo1 MODE foo1 :+Ziw -1 $ users:me:modes set to: [+Ziw] - -# handle bot query NOTICE -0:1 < :SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. -3 < *** [SaslServ] Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000. - -# check difference in available commands when switching to client window -> /join #test -0 !# invalid prompt command: /join unknown -> /list -0 # windows available via /window: -0 # 0) :start -0 # 1) foo.bar.baz :DEBUG -0 # 2) foo.bar.baz server -0 # 3) foo.bar.baz SaslServ -> /window 1 -> /help -1 # commands available in this window: -1 # /connect HOST_PORT [NICKNAME_PW] [USERNAME_REALNAME] -1 # /disconnect [QUIT_MSG] -1 # /help -1 # /join CHANNEL -1 # /list -1 # /nick NEW_NICK -1 # /privmsg TARGET MSG -1 # /prompt_enter -1 # /quit -1 # /raw VERB [PARAMS_STR] -1 # /reconnect -1 # /window TOWARDS -1 # /window.disconnect [QUIT_MSG] -1 # /window.history.scroll DIRECTION -1 # /window.join CHANNEL -1 # /window.nick NEW_NICK -1 # /window.paste -1 # /window.privmsg TARGET MSG -1 # /window.prompt.backspace -1 # /window.prompt.move_cursor DIRECTION -1 # /window.prompt.scroll DIRECTION -1 # /window.raw VERB [PARAMS_STR] -1 # /window.reconnect - -# test lack of implementation -0:1 < foo bar baz -1 !$ No handler implemented for: foo bar baz - -# test recoverable 432 -> /nick @foo -1 > NICK :@foo -0:1 < :*.?.net 432 foo1 @foo :Erroneous nickname -1 !$ nickname refused for bad format - -# join channel, collect topic, residents; update me:user from JOIN message -> /join #test -1 > JOIN :#test -0:1 < :foo1!~foobarbaz@baz.bar.foo JOIN #test -1 $ users:me:user set to: [~foobarbaz] -0:1 < :foo.bar.baz 332 foo1 #test :foo bar baz -1 $ channels:#test:exits cleared -0:1 < :foo.bar.baz 333 foo1 #test bar!~bar@bar.bar 1234567890 -1 $ channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] -4 $ bar!~bar@bar.bar set topic: foo bar baz -0:1 < :foo.bar.baz 353 foo1 @ #test :foo1 @bar -1 $ users:1:nick set to: [?] -1 $ users:1:nick set to: [bar] -0:1 < :foo.bar.baz 366 foo1 #test :End of /NAMES list. -1 $ channels:#test:user_ids set to: -1 $ 1 -1 $ me -4 $ residents: bar, foo1 - -# deliver PRIVMSG to channel window, update sender's user+host from metadata -0:1 < :bar!~bar@bar.bar PRIVMSG #test :hi there -1 $ users:1:user set to: [~bar] -1 $ users:1:host set to: [bar.bar] -4 < [bar] hi there - -# check _changing_ TOPIC message is communicated to channel window -0:1 < :bar!~bar@bar.bar TOPIC #test :foo bar baz -0:1 < :bar!~bar@bar.bar TOPIC #test :abc def ghi -1 $ channels:#test:topic set to: [Topic(what='abc def ghi', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))] -4 $ bar!~bar@bar.bar set topic: abc def ghi - -# process non-self channel JOIN -0:1 < :baz!~baz@baz.baz JOIN :#test -1 $ users:2:nick set to: [?] -1 $ users:2:nick set to: [baz] -1 $ users:2:user set to: [~baz] -1 $ users:2:host set to: [baz.baz] -1 $ channels:#test:user_ids set to: -1 $ 1 -1 $ 2 -1 $ me -4 $ baz!~baz@baz.baz joins - -# join second channel with partial residents identity to compare distribution of resident-specific messages -> /join #testtest -1 > JOIN :#testtest -0:1 < :foo1!~foobarbaz@baz.bar.foo JOIN #testtest -0:1 < :foo.bar.baz 353 foo1 @ #testtest :foo1 baz -1 $ channels:#testtest:exits cleared -0:1 < :foo.bar.baz 366 foo1 #testtest :End of /NAMES list. -1 $ channels:#testtest:user_ids set to: -1 $ 2 -1 $ me -5 $ residents: baz, foo1 - -# handle query window with known user -0:1 < :baz!~baz@baz.baz PRIVMSG foo1 :hi there -6 < [baz] hi there -> /privmsg baz hello, how is it going -1 > PRIVMSG baz :hello, how is it going -6 > [foo1] hello, how is it going -0:1 < :baz!~baz@baz.baz PRIVMSG foo1 :fine! -6 < [baz] fine! - -# handle failure to query absent user -> /privmsg barbar hello! -1 > PRIVMSG barbar :hello! -7 > [foo1] hello! -0:1 < :*.?.net 401 foo1 barbar :No such nick/channel -7 !$ barbar not online - -# handle non-self renaming -0:1 < :baz!~baz@baz.baz NICK :bazbaz -1 $ users:2:nick set to: [bazbaz] -4,5,6 $ baz!~baz@baz.baz renames bazbaz - -# handle non-self PART in one of two inhabited channels, preserve identity into re-JOIN -0:1 < :bazbaz!~baz@baz.baz PART :#test -1 $ channels:#test:exits:2 set to: [P] -1 $ channels:#test:user_ids set to: -1 $ 1 -1 $ me -4 $ bazbaz!~baz@baz.baz parts -1 $ channels:#test:exits:2 cleared -0:1 < :bazbaz!~baz@baz.baz JOIN :#test -1 $ channels:#test:user_ids set to: -1 $ 1 -1 $ 2 -1 $ me -4 $ bazbaz!~baz@baz.baz joins - -# handle non-self PART in only inhabited channel, lose identity, re-join as new identity -0:1 < :bar!~bar@bar.bar PART :#test -1 $ channels:#test:exits:1 set to: [P] -1 $ channels:#test:user_ids set to: -1 $ 2 -1 $ me -4 $ bar!~bar@bar.bar parts -1 $ channels:#test:exits:1 cleared -1 $ users:1 cleared -0:1 < :bar!~bar@bar.bar JOIN :#test -1 $ users:3:nick set to: [?] -1 $ users:3:nick set to: [bar] -1 $ users:3:user set to: [~bar] -1 $ users:3:host set to: [bar.bar] -1 $ channels:#test:user_ids set to: -1 $ 2 -1 $ 3 -1 $ me -4 $ bar!~bar@bar.bar joins - -# handle non-self QUIT -0:1 < :bazbaz!~baz@baz.baz QUIT :Client Quit -1 $ users:2:exit_msg set to: [QClient Quit] -6 $ bazbaz!~baz@baz.baz quits: Client Quit -1 $ channels:#test:exits:2 set to: [QClient Quit] -1 $ channels:#test:user_ids set to: -1 $ 3 -1 $ me -4 $ bazbaz!~baz@baz.baz quits: Client Quit -1 $ channels:#test:exits:2 cleared -1 $ channels:#testtest:exits:2 set to: [QClient Quit] -1 $ channels:#testtest:user_ids set to: -1 $ me -5 $ bazbaz!~baz@baz.baz quits: Client Quit -1 $ channels:#testtest:exits:2 cleared -1 $ users:2 cleared - -# handle self-PART: clear channel, and its squatters -0:1 < :foo1!~foobarbaz@baz.bar.foo PART :#test -1 $ channels:#test:exits:me set to: [P] -1 $ channels:#test:user_ids set to: -1 $ 3 -4 $ foo1!~foobarbaz@baz.bar.foo parts -1 $ channels:#test:exits:me cleared -1 $ channels:#test cleared -1 $ users:3 cleared - -# fail to reconnect while connected -> /reconnect -1 !$ not re-connecting since already connected - -# handle /disconnect, clear all -> /disconnect -1 > QUIT :ircplom says bye -0:1 < :foo1!~foobarbaz@baz.bar.foo QUIT :Client Quit -1 $ users:me:exit_msg set to: [QClient Quit] -2,3,6,7 $ foo1!~foobarbaz@baz.bar.foo quits: Client Quit -1 $ channels:#testtest:exits:me set to: [QClient Quit] -1 $ channels:#testtest:user_ids set to: -5 $ foo1!~foobarbaz@baz.bar.foo quits: Client Quit -1 $ channels:#testtest:exits:me cleared -0:1 < ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye] -1 $ connection_state set to: [Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]] -1 $ connection_state set to: [] -2,3,4,5,6,7 $ DISCONNECTED -1 $ isupport cleared -1 $ isupport:CHANTYPES set to: [#&] -1 $ isupport:PREFIX set to: [(ov)@+] -1 $ isupport:USERLEN set to: [10] -1 $ motd set to: -1 $ sasl_account set to: [] -1 $ sasl_auth_state set to: [] -1 $ caps cleared -1 $ channels cleared -1 $ users cleared - -# fail to send in disconnect, check alert window is command prompt window -> /window 6 -> /privmsg barbar test -6 !$ cannot send, connection seems closed -> /window 1 -> /privmsg barbar test -1 !$ cannot send, connection seems closed -> /privmsg #test test -1 !$ not sending, since not in channel - -# test setting up second client, but 432 irrecoverably -> /connect baz.bar.foo ?foo foo:foo -8 $ isupport cleared -8 $ isupport:CHANTYPES set to: [#&] -8 $ isupport:PREFIX set to: [(ov)@+] -8 $ isupport:USERLEN set to: [10] -8 $ hostname set to: [baz.bar.foo] -8 $ port set to: [-1] -8 $ nick_wanted set to: [?foo] -8 $ user_wanted set to: [foo] -8 $ realname set to: [foo] -8 $ port set to: [6697] -8 $ connection_state set to: [connecting] -8 $ connection_state set to: [connected] -, $ CONNECTED -1:8 > CAP LS :302 -1:8 > USER foo 0 * :foo -1:8 > NICK :?foo -1:8 < :*.?.net 432 * ?foo :Erroneous nickname -8 $ connection_state set to: [] -, $ DISCONNECTED -8 $ isupport cleared -8 $ isupport:CHANTYPES set to: [#&] -8 $ isupport:PREFIX set to: [(ov)@+] -8 $ isupport:USERLEN set to: [10] -8 !$ nickname refused for bad format, giving up - -# test failing third connection -> /connect baz.baz.baz baz baz:baz -9 $ isupport cleared -9 $ isupport:CHANTYPES set to: [#&] -9 $ isupport:PREFIX set to: [(ov)@+] -9 $ isupport:USERLEN set to: [10] -9 $ hostname set to: [baz.baz.baz] -9 $ port set to: [-1] -9 $ nick_wanted set to: [baz] -9 $ user_wanted set to: [baz] -9 $ realname set to: [baz] -9 $ port set to: [6697] -9 $ connection_state set to: [connecting] -9 $ connection_state set to: [connected] -, $ CONNECTED -2:9 > CAP LS :302 -2:9 > USER baz 0 * :baz -2:9 > NICK :baz -2: < FAKE_IRC_CONN_ABORT_EXCEPTION -9 $ connection_state set to: [broken: FAKE_IRC_CONN_ABORT_EXCEPTION] -9 $ connection_state set to: [] -, $ DISCONNECTED -9 $ isupport cleared -9 $ isupport:CHANTYPES set to: [#&] -9 $ isupport:PREFIX set to: [(ov)@+] -9 $ isupport:USERLEN set to: [10] - -# check that (save TUI tests assuming start on window 0, and no 4 yet) on reconnect, all the same effects can be expected -> /reconnect -repeat 63:65 -2,3,4,5,6,7 $ CONNECTED -repeat 66:158 -repeat 168:382 - -> /quit -0 <