Add test testKickSendsMessages.

This commit is contained in:
Valentin Lorentz 2015-12-22 01:56:01 +01:00
parent 813f968321
commit 3b196ce445
5 changed files with 49 additions and 5 deletions

View File

@ -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):

View File

@ -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.

View File

@ -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):

View File

@ -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])

View File

@ -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'])