X-Git-Url: http://git.pk910.de/?p=ircu2.10.12-pk.git;a=blobdiff_plain;f=tests%2Fglines.cmd;fp=tests%2Fglines.cmd;h=1a3b3d0ca16d21f32d58525a151512b951702c3c;hp=0000000000000000000000000000000000000000;hb=0400a5a6479398d82526785c18c0df8bc8b92dce;hpb=d17e10da972ce5776c60b4c317267c6abe0e1ead diff --git a/tests/glines.cmd b/tests/glines.cmd new file mode 100644 index 0000000..1a3b3d0 --- /dev/null +++ b/tests/glines.cmd @@ -0,0 +1,330 @@ +define srv1 localhost:7601 +define srv1-name irc.example.net +define srv2 localhost:7611 +define srv2-name irc-2.example.net +define cl1-nick Op3rm4n +define cl2-nick Monitor + +# Connect a client, oper it up and force G-line server notices on (0x8200). +connect cl1 %cl1-nick% oper %srv1% :Some IRC Operator +:cl1 oper oper oper +:cl1 mode %cl1-nick% +s +33280 + +# Do the same for the second server, for monitoring snotices. +# This is useful while debugging the remote operations in this script. +connect cl2 %cl2-nick% oper %srv2% :Some IRC Operator +:cl2 oper oper oper +:cl2 mode %cl2-nick% +s +33280 + +# For an operator, the syntax is: +# GLINE [[!][+|-|>|<] [] [ [:]]] +# By itself, that's 2 * 5 * 3 (target missing/self, other or global) +# * 3 = 90 possibilities. +# +# In each case, we would want to try it with various combinations: +# - Local gline for absent or present +# - Global gline for absent, or present but locally and/or globally activated or deactivated (5 combinations) +# So ten pre-existing states for each syntax variant. +# For sanity's sake, we don't do all 900 combinations. +# +# Perl code to generate a fairly complete list: +# foreach my $operator (split(//, ' +-><')) { +# foreach my $mask ('test@example.com') { +# foreach my $target ('', '%srv1-name%', '%srv2-name%', '*') { +# foreach my $expiration ('', '100000') { +# foreach my $reason ('', ':foo') { +# my $str = "GLINE ${operator}${mask} ${target} ${expiration} ${reason}"; +# $str =~ s/ +/ /g; +# $str =~ s/ +$//; +# print "$str\n"; +# } +# } +# } +# print "\n"; +# } +# } + +# Initial query: verify that our target G-line does not exist. +:cl1 raw :GLINE test@example.com +:cl1 expect %srv1-name% 512 test@example.com :No such gline + +# Try a bunch of operations, only one of which should generate an actual G-line. +:cl1 raw :GLINE test@example.com :foo +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE test@example.com 100000 +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE test@example.com 100000 :foo +:cl1 expect %srv1-name% 515 foo :Bad expire time +:cl1 raw :GLINE test@example.com %srv1-name% +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE test@example.com %srv1-name% :foo +:cl1 expect %srv1-name% 515 foo :Bad expire time +:cl1 raw :GLINE test@example.com %srv1-name% 100000 +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters + +# Check that we still have no G-line, and that we create it as expected. +:cl1 raw :GLINE test@example.com +:cl1 expect %srv1-name% 512 test@example.com :No such gline +:cl1 raw :GLINE test@example.com %srv1-name% 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% adding local GLINE for test@example.com, expiring at \\d+: foo +:cl1 raw :GLINE test@example.com +:cl1 expect %srv1-name% 280 test@example.com \\d+ 0 \\d+ %srv1-name% \\+ :foo +:cl1 expect %srv1-name% 281 :End of G-line List +# Now remove it (and verify removal). +:cl1 raw :GLINE -test@example.com 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% removing local GLINE for test@example.com +:cl1 raw :GLINE test@example.com +:cl1 expect %srv1-name% 512 test@example.com :No such gline + +# Try doing remote operations. +:cl1 raw :GLINE test@example.com %srv2-name% +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE test@example.com %srv2-name% :foo +:cl1 expect %srv1-name% 515 foo :Bad expire time +:cl1 raw :GLINE test@example.com %srv2-name% 100000 +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE test@example.com +:cl1 expect %srv1-name% 512 test@example.com :No such gline +:cl1 raw :GLINE test@example.com %srv2-name% 100000 :foo +# No response expected for remote commands; do a remote stats query to check. +:cl1 raw :STATS g %srv2-name% +:cl1 expect %srv2-name% 247 G test@example.com \\d+ 0 \\d+ \\+ :foo +:cl1 expect %srv2-name% 219 g :End of /STATS report +:cl1 raw :GLINE -test@example.com %srv2-name% 100000 :foo +:cl1 raw :STATS g %srv2-name% +:cl1 expect %srv2-name% 219 g :End of /STATS report + +# Try doing network-wide operations. +:cl1 raw :GLINE test@example.com * +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +# These should fail because no existing G-line matches. +:cl1 raw :GLINE test@example.com * :foo +:cl1 expect %srv1-name% 515 foo :Bad expire time +:cl1 raw :GLINE test@example.com * 100000 +:cl1 expect %srv1-name% 512 test@example.com :No such gline +:cl1 raw :GLINE test@example.com * 100000 :foo +:cl1 expect %srv1-name% 512 test@example.com :No such gline + +# Try explicit create/activate operations. +:cl1 raw :GLINE +test@example.com +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE +test@example.com :foo +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE +test@example.com 100000 +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +# This next one should create the G-line. +:cl1 raw :GLINE test@example.com +:cl1 expect %srv1-name% 512 test@example.com :No such gline +:cl1 raw :GLINE +test@example.com 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% adding local GLINE for test@example.com, expiring at \\d+: foo +:cl1 raw :GLINE test@example.com +:cl1 expect %srv1-name% 280 test@example.com \\d+ 0 \\d+ %srv1-name% \\+ :foo +:cl1 expect %srv1-name% 281 :End of G-line List +:cl1 raw :GLINE -test@example.com 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% removing local GLINE for test@example.com + +# Local create/activate operations? +:cl1 raw :GLINE +test@example.com %srv1-name% +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE +test@example.com %srv1-name% :foo +:cl1 expect %srv1-name% 515 .+ :Bad expire time +:cl1 raw :GLINE +test@example.com %srv1-name% 100000 +:cl1 expect %srv1-name% 515 .+ :Bad expire time +:cl1 raw :GLINE +test@example.com %srv1-name% 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% adding local GLINE for test@example.com, expiring at \\d+: foo +:cl1 raw :GLINE test@example.com +:cl1 expect %srv1-name% 280 test@example.com \\d+ 0 \\d+ %srv1-name% \\+ :foo +:cl1 expect %srv1-name% 281 :End of G-line List +:cl1 raw :GLINE -test@example.com 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% removing local GLINE for test@example.com +:cl1 raw :GLINE +test@example.com %srv1-name% 100000 :foo +:cl1 raw :GLINE -test@example.com 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% removing local GLINE for test@example.com +:cl1 raw :GLINE +test@example.com %srv1-name% 100000 :foo +:cl1 raw :GLINE -test@example.com %srv1-name% 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% removing local GLINE for test@example.com + +# Remote create/activate operations? +:cl1 raw :GLINE +test@example.com %srv2-name% +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE +test@example.com %srv2-name% :foo +:cl1 expect %srv1-name% 515 .+ :Bad expire time +:cl1 raw :GLINE +test@example.com %srv2-name% 100000 +:cl1 expect %srv1-name% 515 .+ :Bad expire time +:cl1 raw :GLINE +test@example.com %srv2-name% 100000 :foo +# No response expected for remote commands; do a remote stats query to check. +:cl1 raw :STATS g %srv2-name% +:cl1 expect %srv2-name% 247 G test@example.com \\d+ 0 \\d+ \\+ :foo +:cl1 expect %srv2-name% 219 g :End of /STATS report +:cl1 raw :GLINE -test@example.com %srv2-name% 100000 :foo +:cl1 raw :STATS g %srv2-name% +:cl1 expect %srv2-name% 219 g :End of /STATS report + +# Global create/activate operations? +:cl1 raw :GLINE +test@example.com * +:cl1 expect %srv1-name% 512 test@example.com :No such gline +:cl1 raw :GLINE +test@example.com * :foo +:cl1 expect %srv1-name% 515 .+ :Bad expire time +:cl1 raw :GLINE +test@example.com * 100000 +:cl1 expect %srv1-name% 515 .+ :Bad expire time + +# Local G-line deactivation? +:cl1 raw :GLINE -test@example.com +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE -test@example.com :foo +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE -test@example.com 100000 +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE -test@example.com 100000 :foo +:cl1 expect %srv1-name% 512 test@example.com :No such gline + +# .. with a specified server? +:cl1 raw :GLINE -test@example.com %srv1-name% +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE -test@example.com %srv1-name% :foo +:cl1 expect %srv1-name% 515 %srv1-name% :Bad expire time +:cl1 raw :GLINE -test@example.com %srv1-name% 100000 +:cl1 expect %srv1-name% 515 %srv1-name% :Bad expire time +:cl1 raw :GLINE -test@example.com %srv1-name% 100000 :foo +:cl1 expect %srv1-name% 512 test@example.com :No such gline +:cl1 raw :GLINE -test@example.com %srv2-name% +:cl1 expect %srv1-name% 461 GLINE :Not enough parameters +:cl1 raw :GLINE -test@example.com %srv2-name% :foo +:cl1 expect %srv1-name% 515 %srv2-name% :Bad expire time +:cl1 raw :GLINE -test@example.com %srv2-name% 100000 +:cl1 expect %srv1-name% 515 %srv2-name% :Bad expire time +:cl1 raw :GLINE -test@example.com %srv2-name% 100000 :foo +:cl1 expect %srv2-name% 512 test@example.com :No such gline + +# Global deactivations? +:cl1 raw :GLINE -test@example.com * +:cl1 expect %srv1-name% 512 test@example.com :No such gline +:cl1 raw :GLINE -test@example.com * :foo +:cl1 expect %srv1-name% 515 \\* :Bad expire time +:cl1 raw :GLINE -test@example.com * 100000 +:cl1 expect %srv1-name% 515 \\* :Bad expire time +:cl1 raw :GLINE -test2@example.com * 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% adding deactivated global GLINE for test2@example.com + +# Now start with the operations that create or need a global G-line. + +# Global activations and deactivations? +:cl1 raw :GLINE +test@example.com * 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% adding global GLINE for test@example.com +:cl1 raw :GLINE test@example.com +:cl1 expect %srv1-name% 280 test@example.com \\d+ \\d+ \\d+ \\* \\+ :foo +:cl1 raw :GLINE test@example.com * 100000 +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% modifying global GLINE for test@example.com: changing expiration time to \\d+; and extending record lifetime to \\d+ +:cl1 raw :GLINE test@example.com * 100000 :food +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% modifying global GLINE for test@example.com: changing expiration time to \\d+; extending record lifetime to \\d+; and changing reason to "food" +:cl1 raw :GLINE -test@example.com * +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% modifying global GLINE for test@example.com: globally deactivating G-line +:cl1 raw :GLINE -test@example.com * 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% modifying global GLINE for test@example.com: changing expiration time to \\d+; extending record lifetime to \\d+; and changing reason to "foo" +:cl1 raw :GLINE test@example.com +:cl1 expect %srv1-name% 280 test@example.com \\d+ \\d+ \\d+ \\* - :foo + +# Failed local activations and deactivations? +:cl1 raw :GLINE >test@example.com +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% modifying global GLINE for test@example.com: locally activating G-line +:cl1 raw :GLINE test@example.com :foo +:cl1 expect %srv1-name% 402 foo :No such server +:cl1 raw :GLINE test@example.com 100000 +:cl1 expect %srv1-name% 402 100000 :No such server +:cl1 raw :GLINE test@2.example.com +:cl1 expect %srv1-name% 512 test@2.example.com :No such gline +:cl1 raw :GLINE >test@example.com %srv1-name% + +# What about successes for the local server? +# (For simplicity, single-server activations and deactivations are not +# allowed to change any other parameters.) +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% modifying global GLINE for test@example.com: locally activating G-line +:cl1 raw :GLINE test@example.com %srv1-name% :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% modifying global GLINE for test@example.com: locally activating G-line +:cl1 raw :GLINE test@example.com %srv1-name% 100000 +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% modifying global GLINE for test@example.com: locally activating G-line +:cl1 raw :GLINE test@example.com %srv1-name% 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% modifying global GLINE for test@example.com: locally activating G-line +:cl1 raw :GLINE test@example.com %srv1-name% 100000 :foo +:cl1 expect %srv1-name% NOTICE :\\*\\*\\* Notice -- %cl1-nick% modifying global GLINE for test@example.com: locally activating G-line +:cl1 raw :GLINE test@example.com %srv2-name% +:cl1 raw :STATS g %srv2-name% +:cl1 expect %srv2-name% 247 G test@example.com \\d+ \\d+ \\d+ >\\+ :foo +:cl1 expect %srv2-name% 219 g :End of /STATS report +# Form: "GLINE test@example.com %srv2-name% :foo +:cl1 raw :STATS g %srv2-name% +:cl1 expect %srv2-name% 247 G test@example.com \\d+ \\d+ \\d+ >\\+ :foo +:cl1 expect %srv2-name% 219 g :End of /STATS report +# Form: "GLINE test@example.com %srv2-name% 100000 +:cl1 raw :STATS g %srv2-name% +:cl1 expect %srv2-name% 247 G test@example.com \\d+ \\d+ \\d+ >\\+ :foo +:cl1 expect %srv2-name% 219 g :End of /STATS report +# Form: "GLINE test@example.com %srv2-name% 100000 :foo +:cl1 raw :STATS g %srv2-name% +:cl1 expect %srv2-name% 247 G test@example.com \\d+ \\d+ \\d+ >\\+ :foo +:cl1 expect %srv2-name% 219 g :End of /STATS report + +# What about activations/deactivations that might go across the whole network? +# (These are not permitted because "global local [de]activation" does not +# make sense: just globally [de]activate the G-line.) +:cl1 raw :GLINE >test@example.com * +:cl1 expect %srv1-name% 402 \\* :No such server +:cl1 raw :GLINE test@example.com * :foo +:cl1 expect %srv1-name% 402 \\* :No such server +:cl1 raw :GLINE test@example.com * 100000 +:cl1 expect %srv1-name% 402 \\* :No such server +:cl1 raw :GLINE test@example.com * 100000 :foo +:cl1 expect %srv1-name% 402 \\* :No such server +:cl1 raw :GLINE