From: Christian Heller Date: Sun, 9 Nov 2025 19:19:10 +0000 (+0100) Subject: Add CAPS negotiation test, refactor tests. X-Git-Url: https://plomlompom.com/repos/task?a=commitdiff_plain;h=0fc8c228108a70649e43092fc849cea8e1664fd0;p=ircplom Add CAPS negotiation test, refactor tests. --- diff --git a/src/tests/__attempting.lib b/src/tests/__attempting.lib new file mode 100644 index 0000000..86cf235 --- /dev/null +++ b/src/tests/__attempting.lib @@ -0,0 +1,6 @@ +× attempting +log 1 $ connection_state set to: [connecting] +log 2 $ attempting connection to HOSTNAME:§§ identifying with … + +× attempting-foobarbaz +insert attempting : +1 HOSTNAME foo.bar.baz diff --git a/src/tests/__connected.lib b/src/tests/__connected.lib new file mode 100644 index 0000000..53c5613 --- /dev/null +++ b/src/tests/__connected.lib @@ -0,0 +1,4 @@ +× connected +log 1 $ connection_state set to: [connected] +log 2 $ CONNECTED +log 1 > CAP LS :302 diff --git a/src/tests/__connected_w_pw_listing.lib b/src/tests/__connected_w_pw_listing.lib new file mode 100644 index 0000000..769114d --- /dev/null +++ b/src/tests/__connected_w_pw_listing.lib @@ -0,0 +1,5 @@ +insert ./__connected.lib + +× connected_w_pw_listing +log 2 $ - PW_LISTING +insert connected : +1 diff --git a/src/tests/_timeout_retries.test b/src/tests/_timeout_retries.test index f45c193..8cd00ad 100644 --- a/src/tests/_timeout_retries.test +++ b/src/tests/_timeout_retries.test @@ -1,3 +1,5 @@ +insert ./__attempting.lib +insert ./__connected.lib insert ./__init_clear_hostname.lib × identifiers @@ -6,21 +8,11 @@ log 2 $ - realname: baz log 2 $ - username: foobarbazquux log 2 $ - password: bar -× connection_state -log 1 $ connection_state set to: [?] - -× attempting -insert connection_state : +1 ? connecting -log 2 $ attempting connection to HOSTNAME:§§ identifying with … - -× attempting-foobarbaz -insert attempting : +1 HOSTNAME foo.bar.baz - × attempting-bazbarfoo insert attempting : +3 HOSTNAME baz.bar.foo × fake-testing-timeout -insert connection_state : +1 ? failed to connect: FAKE TESTING TIMEOUT +log 1 $ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT] insert retry-in : +1 ? §§ × port @@ -42,9 +34,7 @@ log 1 $ password set to: [bar] × conn insert identifiers : +2 -insert connection_state : +1 ? connected -log 2 $ CONNECTED -log 1 > CAP LS :302 +insert connected log 1 > USER foobarbazquux 0 * :baz log 1 > NICK :foo @@ -79,9 +69,9 @@ servermsg 0 timeout log 1 > PING :what's up? servermsg 0 timeout servermsg 0 no timely PONG from server -insert connection_state : +1 ? broken: no timely PONG from server +log 1 $ connection_state set to: [broken: no timely PONG from server] insert isupport-clear -insert connection_state : +1 ? +log 1 $ connection_state set to: [] log 2 $ DISCONNECTED insert retry-in : +1 ? 1 diff --git a/src/tests/caps.test b/src/tests/caps.test new file mode 100644 index 0000000..a451db2 --- /dev/null +++ b/src/tests/caps.test @@ -0,0 +1,114 @@ +insert ./__attempting.lib +insert ./__connected_w_pw_listing.lib +insert ./__init_clear_hostname.lib +insert ./__servermsglogged.lib + +× connecting +insert attempting-foobarbaz : +1 §§ 6697 +log 2 $ - nickname: foo +log 2 $ - realname: bar +log 2 $ - username: baz +insert connected_w_pw_listing : +1 PW_LISTING no password +log 1 > USER baz 0 * :bar +log 1 > NICK :foo + +× disconnect-init +> /disconnect +log 1 > QUIT :ircplom says bye +insert servermsglogged : +0 MSG ERROR :Closing link: ircplom says bye +log 1 $ connection_state set to: [Closing link: ircplom says bye] +insert isupport-clear + +× later-disconnect-to-reconnect +log 1 $ connection_state set to: [] +log 2 $ DISCONNECTED +> /reconnect +insert connecting + +× disconnect-to-reconnect-clear-caps +insert disconnect-init +log 1 $ caps cleared +insert later-disconnect-to-reconnect + +× cap_msg +insert servermsglogged : +0 MSG :*.?.net CAP ??? + +× ×-------------------------- + +> /connect foo.bar.baz:6697 foo bar:baz +insert init-clear-hostname : +1 HOSTNAME foo.bar.baz +log 1 $ port set to: [6697] +log 1 $ nick_wanted set to: [foo] +log 1 $ user_wanted set to: [baz] +log 1 $ realname set to: [bar] +insert connecting + +# check handling of empty caps list +insert cap_msg : +0 ??? * LS : +log 1 > CAP :LIST +insert cap_msg : +0 ??? * LIST : +log 1 > CAP :END + +> /window 2 +insert disconnect-init +insert later-disconnect-to-reconnect + +# check full, alphabetical processing of multi-line responses +insert cap_msg : +0 ??? * LS * :foo bar baz +insert cap_msg : +0 ??? * LS * :oof rab zab +insert cap_msg : +0 ??? * LS :ofo rba zba +log 1 $ caps:bar:data set to: [] +log 1 $ caps:baz:data set to: [] +log 1 $ caps:foo:data set to: [] +log 1 $ caps:ofo:data set to: [] +log 1 $ caps:oof:data set to: [] +log 1 $ caps:rab:data set to: [] +log 1 $ caps:rba:data set to: [] +log 1 $ caps:zab:data set to: [] +log 1 $ caps:zba:data set to: [] +log 1 > CAP :LIST +insert cap_msg : +0 ??? * LIST * :foo rab oof +insert cap_msg : +0 ??? * LIST :zab rba +log 1 $ caps:foo:enabled set to: [True] +log 1 $ caps:oof:enabled set to: [True] +log 1 $ caps:rab:enabled set to: [True] +log 1 $ caps:rba:enabled set to: [True] +log 1 $ caps:zab:enabled set to: [True] +log 1 > CAP :END + +insert disconnect-to-reconnect-clear-caps + +# check REQ for "sasl" (even if no PLAIN), denied +insert servermsglogged : +0 MSG :*.?.net CAP * LS :foo bar sasl +log 1 $ caps:bar:data set to: [] +log 1 $ caps:foo:data set to: [] +log 1 $ caps:sasl:data set to: [] +log 1 > CAP REQ :sasl +log 1 > CAP :LIST +insert cap_msg : +0 ??? * NAK :sasl +insert cap_msg : +0 ??? * LIST : +log 1 > CAP :END + +insert disconnect-to-reconnect-clear-caps + +# check REQ for "sasl" with PLAIN successful (but for lack of password, negotiation still ending instantly) +insert cap_msg : +0 ??? * LS :sasl=PLAIN +log 1 $ caps:sasl:data set to: [] +log 1 $ caps:sasl:data set to: [PLAIN] +log 1 > CAP REQ :sasl +log 1 > CAP :LIST +insert cap_msg : +0 ??? * ACK :sasl +insert cap_msg : +0 ??? * LIST :sasl +log 1 $ caps:sasl:enabled set to: [True] +log 1 > CAP :END + +# check NEW, DEL working after CAP :END +insert cap_msg : +0 ??? foo NEW :foo bar=baz +log 1 $ users:me:nick set to: [?] +log 1 $ users:me:nick set to: [foo] +log 1 $ caps:bar:data set to: [] +log 1 $ caps:bar:data set to: [baz] +log 1 $ caps:foo:data set to: [] +insert cap_msg : +0 ??? foo DEL :sasl foo +log 1 $ caps:foo cleared +log 1 $ caps:sasl cleared diff --git a/src/tests/config.test b/src/tests/config.test index 9780590..0f0ca10 100644 --- a/src/tests/config.test +++ b/src/tests/config.test @@ -1,23 +1,21 @@ +insert ./__attempting.lib +insert ./__connected_w_pw_listing.lib insert ./__init_clear_hostname.lib × ×--------------------------------------------------- log 0 # Found config at tests/config.toml, reading … -log 0 # Connecting: {'hostname': 'irc.test0.net', 'nickname': 'foo', 'password': 'bar', 'username': 'baz', 'realname': 'quux', 'port': 1234, 'channels': ['#test', '##testtest']} -insert init-clear-hostname : +1 HOSTNAME irc.test0.net +log 0 # Connecting: {'hostname': 'foo.bar.baz', 'nickname': 'foo', 'password': 'supersecret', 'username': 'baz', 'realname': 'bar', 'port': 1234, 'channels': ['#test', '##testtest']} +insert init-clear-hostname : +1 HOSTNAME foo.bar.baz log 1 $ port set to: [1234] log 1 $ nick_wanted set to: [foo] log 1 $ user_wanted set to: [baz] -log 1 $ realname set to: [quux] -log 1 $ password set to: [bar] -log 1 $ connection_state set to: [connecting] -log 2 $ attempting connection to irc.test0.net:1234 identifying with … +log 1 $ realname set to: [bar] +log 1 $ password set to: [supersecret] +insert attempting-foobarbaz : +1 §§ 1234 log 2 $ - nickname: foo -log 2 $ - realname: quux +log 2 $ - realname: bar log 2 $ - username: baz -log 2 $ - password: bar -log 1 $ connection_state set to: [connected] -log 2 $ CONNECTED -log 1 > CAP LS :302 -log 1 > USER baz 0 * :quux +insert connected_w_pw_listing : +1 PW_LISTING password: supersecret +log 1 > USER baz 0 * :bar log 1 > NICK :foo diff --git a/src/tests/config.toml b/src/tests/config.toml index 6dff7f2..362c1a3 100644 --- a/src/tests/config.toml +++ b/src/tests/config.toml @@ -1,11 +1,11 @@ to_highlight = ['quux'] [[server]] -hostname = 'irc.test0.net' +hostname = 'foo.bar.baz' nickname = 'foo' -password = 'bar' +password = 'supersecret' username = 'baz' -realname = 'quux' +realname = 'bar' port = 1234 channels = [ '#test', diff --git a/src/tests/connect_disconnect_legalities.test b/src/tests/connect_disconnect_legalities.test index 7d7cc7d..520fc89 100644 --- a/src/tests/connect_disconnect_legalities.test +++ b/src/tests/connect_disconnect_legalities.test @@ -1,3 +1,5 @@ +insert ./__attempting.lib +insert ./__connected_w_pw_listing.lib insert ./__init_clear_hostname.lib insert ./__servermsglogged.lib @@ -9,15 +11,11 @@ log 1 $ connection_state set to: [] log 2 $ DISCONNECTED × connecting -log 1 $ connection_state set to: [connecting] -log 2 $ attempting connection to foo.bar.baz:6697 identifying with … +insert attempting-foobarbaz : +1 §§ 6697 log 2 $ - nickname: foo log 2 $ - realname: bar log 2 $ - username: baz -log 2 $ - no password -log 1 $ connection_state set to: [connected] -log 2 $ CONNECTED -log 1 > CAP LS :302 +insert connected_w_pw_listing : +1 PW_LISTING no password log 1 > USER baz 0 * :bar log 1 > NICK :foo diff --git a/src/tests/error_disconnects.test b/src/tests/error_disconnects.test index f24cb79..3f028ef 100644 --- a/src/tests/error_disconnects.test +++ b/src/tests/error_disconnects.test @@ -1,16 +1,14 @@ +insert ./__attempting.lib +insert ./__connected_w_pw_listing.lib insert ./__init_clear_hostname.lib insert ./__servermsglogged.lib × connecting -log 1 $ connection_state set to: [connecting] -log 2 $ attempting connection to foo.bar.baz:6697 identifying with … +insert attempting-foobarbaz : +1 §§ 6697 log 2 $ - nickname: foo log 2 $ - realname: bar log 2 $ - username: baz -log 2 $ - no password -log 1 $ connection_state set to: [connected] -log 2 $ CONNECTED -log 1 > CAP LS :302 +insert connected_w_pw_listing : +1 PW_LISTING no password log 1 > USER baz 0 * :bar log 1 > NICK :foo diff --git a/src/tests/pingpong.test b/src/tests/pingpong.test index 5cabfa7..90934ee 100644 --- a/src/tests/pingpong.test +++ b/src/tests/pingpong.test @@ -1,16 +1,14 @@ +insert ./__attempting.lib +insert ./__connected_w_pw_listing.lib insert ./__init_clear_hostname.lib insert ./__servermsglogged.lib × conn -log 1 $ connection_state set to: [connecting] -log 2 $ attempting connection to foo.bar.baz:6697 identifying with … +insert attempting-foobarbaz : +1 §§ 6697 log 2 $ - nickname: foo log 2 $ - realname: baz log 2 $ - username: foobarbazquux -log 2 $ - password: bar -log 1 $ connection_state set to: [connected] -log 2 $ CONNECTED -log 1 > CAP LS :302 +insert connected_w_pw_listing : +1 PW_LISTING password: bar log 1 > USER foobarbazquux 0 * :baz log 1 > NICK :foo diff --git a/src/tests/test.test b/src/tests/test.test index 78b1ca7..a33beb1 100644 --- a/src/tests/test.test +++ b/src/tests/test.test @@ -1,26 +1,26 @@ +insert ./__attempting.lib +insert ./__connected_w_pw_listing.lib insert ./__init_clear_hostname.lib insert ./__servermsglogged.lib insert ./__enter_list.lib +× attempting-6697 +insert attempting : +1 §§ 6697 + × servernotice insert servermsglogged : +0 MSG :*.?.net NOTICE * :XXX log 2 < (server) XXX × conn_init_0 -log 1 $ port set to: [6697] -log 1 $ connection_state set to: [connecting] -log 2 $ attempting connection to foo.bar.baz:6697 identifying with … +insert attempting-foobarbaz : +1 §§ 6697 log 2 $ - nickname: foo log 2 $ - realname: baz log 2 $ - username: foobarbazquux -log 2 $ - password: bar -log 1 $ connection_state set to: [connected] -log 2 $ CONNECTED -log 1 > CAP LS :302 + +× conn_init_1 log 1 > USER foobarbazquux 0 * :baz log 1 > NICK :foo -× conn_init_1 # expect some NOTICE and PING to process/reply during initiation insert servernotice : +0 XXX *** Looking up your ident... insert servernotice : +0 XXX *** Looking up your hostname... @@ -272,7 +272,9 @@ log 1 $ nick_wanted set to: [foo] log 1 $ user_wanted set to: [foobarbazquux] log 1 $ realname set to: [baz] log 1 $ password set to: [bar] +log 1 $ port set to: [6697] insert conn_init_0 +insert connected_w_pw_listing : +1 PW_LISTING password: bar insert conn_init_1 insert conn_init_2 @@ -320,13 +322,12 @@ log 8 $ port set to: [-1] log 8 $ nick_wanted set to: [?foo] log 8 $ user_wanted set to: [foo] log 8 $ realname set to: [foo] -insert conn_init_0 :2 +8 -log 9 $ attempting connection to baz.bar.foo:6697 identifying with … +log 8 $ port set to: [6697] +insert attempting-6697 : +8 HOSTNAME baz.bar.foo log 9 $ - nickname: ?foo log 9 $ - realname: foo log 9 $ - username: foo -log 9 $ - no password -insert conn_init_0 7:10 +8 +insert connected_w_pw_listing : +8 PW_LISTING no password log 8 > USER foo 0 * :foo log 8 > NICK :?foo servermsg 1 :*.?.net 432 * ?foo :Erroneous nickname @@ -353,13 +354,12 @@ log 10 $ port set to: [-1] log 10 $ nick_wanted set to: [baz] log 10 $ user_wanted set to: [baz] log 10 $ realname set to: [baz] -insert conn_init_0 :2 +10 -log 11 $ attempting connection to baz.baz.baz:6697 identifying with … +log 10 $ port set to: [6697] +insert attempting-6697 : +10 HOSTNAME baz.baz.baz log 11 $ - nickname: baz log 11 $ - realname: baz log 11 $ - username: baz -log 11 $ - no password -insert conn_init_0 7:10 +10 +insert connected_w_pw_listing : +10 PW_LISTING no password log 10 > USER baz 0 * :baz log 10 > NICK :baz servermsg 2 FAKE_IRC_CONN_ABORT_EXCEPTION @@ -386,9 +386,11 @@ log 10 $ already disconnected, stopped connecting attempts # check that (save TUI tests assuming start on window 0, and no 4 yet) on reconnect, all the same effects can be expected > /reconnect -insert conn_init_0 1:8 +insert conn_init_0 +log 2 $ - password: bar +log 1 $ connection_state set to: [connected] log 2,3,4,5,6,7 $ CONNECTED -insert conn_init_0 9: +log 1 > CAP LS :302 insert conn_init_1 insert conn_init_2 :2 log 1 > JOIN :#testtest diff --git a/src/tests/tui_draw.test b/src/tests/tui_draw.test index 1dcb21d..e62cd90 100644 --- a/src/tests/tui_draw.test +++ b/src/tests/tui_draw.test @@ -1,3 +1,5 @@ +insert ./__attempting.lib +insert ./__connected_w_pw_listing.lib insert ./__init_clear_hostname.lib insert ./__servermsglogged.lib insert ./__tui.lib @@ -356,15 +358,11 @@ log 1 $ nick_wanted set to: [foo] log 1 $ user_wanted set to: [baz] log 1 $ realname set to: [bar] log 1 $ port set to: [6697] -log 1 $ connection_state set to: [connecting] -log 2 $ attempting connection to foo.bar.baz:6697 identifying with … +insert attempting-foobarbaz : +1 §§ 6697 log 2 $ - nickname: foo log 2 $ - realname: bar log 2 $ - username: baz -log 2 $ - no password -log 1 $ connection_state set to: [connected] -log 2 $ CONNECTED -log 1 > CAP LS :302 +insert connected_w_pw_listing : +1 PW_LISTING no password log 1 > USER baz 0 * :bar log 1 > NICK :foo insert lines-empty :20 diff --git a/src/tests/tui_line_formattings.test b/src/tests/tui_line_formattings.test index 69217a5..3b03280 100644 --- a/src/tests/tui_line_formattings.test +++ b/src/tests/tui_line_formattings.test @@ -1,3 +1,5 @@ +insert ./__attempting.lib +insert ./__connected_w_pw_listing.lib insert ./__servermsglogged.lib insert ./__init_clear_hostname.lib @@ -14,15 +16,11 @@ log 1 $ nick_wanted set to: [foo] log 1 $ user_wanted set to: [baz] log 1 $ realname set to: [bar] log 1 $ port set to: [6697] -log 1 $ connection_state set to: [connecting] -log 2 $ attempting connection to foo.bar.baz:6697 identifying with … +insert attempting-foobarbaz : +1 §§ 6697 log 2 $ - nickname: foo log 2 $ - realname: bar log 2 $ - username: baz -log 2 $ - no password -log 1 $ connection_state set to: [connected] -log 2 $ CONNECTED -log 1 > CAP LS :302 +insert connected_w_pw_listing : +1 PW_LISTING no password log 1 > USER baz 0 * :bar log 1 > NICK :foo > /window 1