mirror of https://github.com/progval/irctest.git
Add test testKickSendsMessages.
This commit is contained in:
parent
813f968321
commit
3b196ce445
|
@ -5,7 +5,7 @@ import unittest
|
||||||
import functools
|
import functools
|
||||||
import importlib
|
import importlib
|
||||||
from .cases import _IrcTestCase
|
from .cases import _IrcTestCase
|
||||||
from .optional_extensions import OptionalityReportingTextTestRunner
|
from .optionality import OptionalityReportingTextTestRunner
|
||||||
from .basecontrollers import BaseClientController, BaseServerController
|
from .basecontrollers import BaseClientController, BaseServerController
|
||||||
|
|
||||||
def main(args):
|
def main(args):
|
||||||
|
|
|
@ -6,7 +6,7 @@ import time
|
||||||
import subprocess
|
import subprocess
|
||||||
import psutil
|
import psutil
|
||||||
|
|
||||||
from .optional_extensions import NotImplementedByController
|
from .optionality import NotImplementedByController
|
||||||
|
|
||||||
class _BaseController:
|
class _BaseController:
|
||||||
"""Base class for software controllers.
|
"""Base class for software controllers.
|
||||||
|
|
|
@ -8,7 +8,7 @@ import supybot.utils
|
||||||
|
|
||||||
from . import client_mock
|
from . import client_mock
|
||||||
from . import authentication
|
from . import authentication
|
||||||
from . import optional_extensions
|
from . import optionality
|
||||||
from .irc_utils import message_parser
|
from .irc_utils import message_parser
|
||||||
from .irc_utils import capabilities
|
from .irc_utils import capabilities
|
||||||
|
|
||||||
|
@ -292,12 +292,12 @@ class OptionalityHelper:
|
||||||
def checkSaslSupport(self):
|
def checkSaslSupport(self):
|
||||||
if self.controller.supported_sasl_mechanisms:
|
if self.controller.supported_sasl_mechanisms:
|
||||||
return
|
return
|
||||||
raise optional_extensions.NotImplementedByController('SASL')
|
raise optionality.NotImplementedByController('SASL')
|
||||||
|
|
||||||
def checkMechanismSupport(self, mechanism):
|
def checkMechanismSupport(self, mechanism):
|
||||||
if mechanism in self.controller.supported_sasl_mechanisms:
|
if mechanism in self.controller.supported_sasl_mechanisms:
|
||||||
return
|
return
|
||||||
raise optional_extensions.OptionalSaslMechanismNotSupported(mechanism)
|
raise optionality.OptionalSaslMechanismNotSupported(mechanism)
|
||||||
|
|
||||||
def skipUnlessHasMechanism(mech):
|
def skipUnlessHasMechanism(mech):
|
||||||
def decorator(f):
|
def decorator(f):
|
||||||
|
|
|
@ -6,6 +6,11 @@ class NotImplementedByController(unittest.SkipTest, NotImplementedError):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return 'Not implemented by controller: {}'.format(self.args[0])
|
return 'Not implemented by controller: {}'.format(self.args[0])
|
||||||
|
|
||||||
|
class ImplementationChoice(unittest.SkipTest):
|
||||||
|
def __str__(self):
|
||||||
|
return 'Choice in the implementation makes it impossible to ' \
|
||||||
|
'perform a test: {}'.format(self.args[0])
|
||||||
|
|
||||||
class OptionalExtensionNotSupported(unittest.SkipTest):
|
class OptionalExtensionNotSupported(unittest.SkipTest):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return 'Unsupported extension: {}'.format(self.args[0])
|
return 'Unsupported extension: {}'.format(self.args[0])
|
|
@ -4,6 +4,8 @@ Section 3.2 of RFC 2812
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from irctest import cases
|
from irctest import cases
|
||||||
|
from irctest import client_mock
|
||||||
|
from irctest import optionality
|
||||||
from irctest.irc_utils import ambiguities
|
from irctest.irc_utils import ambiguities
|
||||||
from irctest.irc_utils.message_parser import Message
|
from irctest.irc_utils.message_parser import Message
|
||||||
|
|
||||||
|
@ -180,3 +182,40 @@ class JoinTestCase(cases.BaseServerTestCase):
|
||||||
self.assertMessageEqual(m, command='323', # RPL_LISTEND
|
self.assertMessageEqual(m, command='323', # RPL_LISTEND
|
||||||
fail_msg='Third reply to LIST is not 322 (RPL_LIST) '
|
fail_msg='Third reply to LIST is not 322 (RPL_LIST) '
|
||||||
'or 323 (RPL_LISTEND), or but: {msg}')
|
'or 323 (RPL_LISTEND), or but: {msg}')
|
||||||
|
|
||||||
|
def testKickSendsMessages(self):
|
||||||
|
"""“Once a user has joined a channel, he receives information about
|
||||||
|
all commands his server receives affecting the channel. This
|
||||||
|
includes […] KICK”
|
||||||
|
-- <https://tools.ietf.org/html/rfc1459#section-4.2.1>
|
||||||
|
and <https://tools.ietf.org/html/rfc2812#section-3.2.1>
|
||||||
|
"""
|
||||||
|
self.connectClient('foo')
|
||||||
|
self.connectClient('bar')
|
||||||
|
self.connectClient('baz')
|
||||||
|
self.sendLine(1, 'JOIN #chan')
|
||||||
|
# TODO: check foo is an operator
|
||||||
|
self.sendLine(2, 'JOIN #chan')
|
||||||
|
self.sendLine(3, 'JOIN #chan')
|
||||||
|
|
||||||
|
import time
|
||||||
|
time.sleep(0.1)
|
||||||
|
self.getMessages(1)
|
||||||
|
self.getMessages(2)
|
||||||
|
self.getMessages(3)
|
||||||
|
self.sendLine(1, 'KICK #chan bar :bye')
|
||||||
|
try:
|
||||||
|
m = self.getMessage(1)
|
||||||
|
if m.command == '482':
|
||||||
|
raise optionality.ImplementationChoice(
|
||||||
|
'Channel creators are not opped by default.')
|
||||||
|
self.assertMessageEqual(m, command='KICK')
|
||||||
|
except client_mock.NoMessageException:
|
||||||
|
# The RFCs do not say KICK should be echoed
|
||||||
|
pass
|
||||||
|
m = self.getMessage(2)
|
||||||
|
self.assertMessageEqual(m, command='KICK',
|
||||||
|
params=['#chan', 'bar', 'bye'])
|
||||||
|
m = self.getMessage(3)
|
||||||
|
self.assertMessageEqual(m, command='KICK',
|
||||||
|
params=['#chan', 'bar', 'bye'])
|
||||||
|
|
Loading…
Reference in New Issue