diff --git a/irctest/cases.py b/irctest/cases.py index 7319a70..600d27b 100644 --- a/irctest/cases.py +++ b/irctest/cases.py @@ -373,6 +373,17 @@ class BaseServerTestCase(_IrcTestCase): 'received responses: {list}', extra_format=(channel,)) + def joinChannel(self, client, channel): + self.sendLine(client, 'JOIN {}'.format(channel)) + # wait until we see them join the channel + joined = False + while not joined: + for msg in self.getMessages(1): + # todo: also respond to cannot join channel numeric + if msg.command.upper() == 'JOIN' and 0 < len(msg.params) and msg.params[0].lower() == channel.lower(): + joined = True + break + class OptionalityHelper: def checkSaslSupport(self): if self.controller.supported_sasl_mechanisms: diff --git a/irctest/server_tests/test_channel_operations.py b/irctest/server_tests/test_channel_operations.py index 1e4b53e..f98abc2 100644 --- a/irctest/server_tests/test_channel_operations.py +++ b/irctest/server_tests/test_channel_operations.py @@ -146,15 +146,16 @@ class JoinTestCase(cases.BaseServerTestCase): and """ self.connectClient('foo') + self.joinChannel(1, '#chan') + self.connectClient('bar') - self.sendLine(1, 'JOIN #chan') - self.getMessages(1) - self.sendLine(2, 'JOIN #chan') - self.getMessages(2) - # TODO: check foo is opped OR +t is unset + self.joinChannel(2, '#chan') # clear waiting msgs about cli 2 joining the channel self.getMessages(1) + self.getMessages(2) + + # TODO: check foo is opped OR +t is unset self.sendLine(1, 'TOPIC #chan :T0P1C') try: @@ -180,14 +181,15 @@ class JoinTestCase(cases.BaseServerTestCase): and """ self.connectClient('foo') + self.joinChannel(1, '#chan') + self.connectClient('bar') - self.sendLine(1, 'JOIN #chan') - self.sendLine(2, 'JOIN #chan') - # TODO: check foo is opped + self.joinChannel(2, '#chan') self.getMessages(1) self.getMessages(2) - self.getMessages(1) + + # TODO: check foo is opped self.sendLine(1, 'MODE #chan +t') self.getMessages(1) @@ -272,12 +274,15 @@ class JoinTestCase(cases.BaseServerTestCase): and """ self.connectClient('foo') + self.joinChannel(1, '#chan') + self.connectClient('bar') + self.joinChannel(2, '#chan') + self.connectClient('baz') - self.sendLine(1, 'JOIN #chan') + self.joinChannel(3, '#chan') + # TODO: check foo is an operator - self.sendLine(2, 'JOIN #chan') - self.sendLine(3, 'JOIN #chan') import time time.sleep(0.1) @@ -309,25 +314,24 @@ class JoinTestCase(cases.BaseServerTestCase): -- https://tools.ietf.org/html/rfc2812#section-3.2.8 """ self.connectClient('foo') + self.joinChannel(1, '#chan') + self.connectClient('bar') + self.joinChannel(2, '#chan') + self.connectClient('baz') + self.joinChannel(3, '#chan') + self.connectClient('qux') - self.sendLine(1, 'JOIN #chan') - self.getMessages(1) + self.joinChannel(4, '#chan') + # TODO: check foo is an operator - self.sendLine(2, 'JOIN #chan') - self.sendLine(3, 'JOIN #chan') - self.sendLine(4, 'JOIN #chan') # Synchronize self.getMessages(1) self.getMessages(2) self.getMessages(3) self.getMessages(4) - self.getMessages(1) - self.getMessages(2) - self.getMessages(3) - self.getMessages(4) self.sendLine(1, 'KICK #chan,#chan bar,baz :bye') try: diff --git a/irctest/server_tests/test_extended_join.py b/irctest/server_tests/test_extended_join.py index 73e9c2b..12cb876 100644 --- a/irctest/server_tests/test_extended_join.py +++ b/irctest/server_tests/test_extended_join.py @@ -44,8 +44,7 @@ class MetadataTestCase(cases.BaseServerTestCase, cases.OptionalityHelper): def testNotLoggedIn(self): self.connectClient('foo', capabilities=['extended-join'], skip_if_cap_nak=True) - self.sendLine(1, 'JOIN #chan') - self.getMessages(1) + self.joinChannel(1, '#chan') self.controller.registerUser(self, 'jilles', 'sesame') self.connectRegisteredClient('bar')