mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-27 21:19:31 +01:00
relay: catch nicks that start with digits and add tests
This commit is contained in:
parent
3edee17802
commit
6870e041bc
@ -6,6 +6,7 @@ import pickle
|
||||
import sched
|
||||
import threading
|
||||
import time
|
||||
import string
|
||||
|
||||
import utils
|
||||
from log import log
|
||||
@ -22,6 +23,11 @@ def normalizeNick(irc, nick, separator="/"):
|
||||
# a protocol violation if there is one.
|
||||
separator = separator.replace('/', '|')
|
||||
nick = nick.replace('/', '|')
|
||||
if nick.startswith(tuple(string.digits)):
|
||||
# On TS6 IRCd-s, nicks that start with 0-9 are only allowed if
|
||||
# they match the UID of the originating server. Otherwise, you'll
|
||||
# get nasty protocol violations!
|
||||
nick = '_' + nick
|
||||
tagnicks = True
|
||||
|
||||
suffix = separator + netname
|
||||
|
39
tests/test_relay.py
Normal file
39
tests/test_relay.py
Normal file
@ -0,0 +1,39 @@
|
||||
import sys
|
||||
import os
|
||||
cwd = os.getcwd()
|
||||
sys.path += [cwd, os.path.join(cwd, 'plugins')]
|
||||
import unittest
|
||||
|
||||
import utils
|
||||
import classes
|
||||
import relay
|
||||
|
||||
def dummyf():
|
||||
pass
|
||||
|
||||
class TestRelay(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.irc = classes.FakeIRC('unittest', classes.FakeProto(), classes.testconf)
|
||||
self.irc.maxnicklen = 20
|
||||
self.irc.proto.__name__ = "test"
|
||||
self.f = relay.normalizeNick
|
||||
|
||||
def testNormalizeNick(self):
|
||||
self.assertEqual(self.f(self.irc, 'helloworld'), 'helloworld/unittest')
|
||||
self.assertEqual(self.f(self.irc, 'ObnoxiouslyLongNick'), 'Obnoxiously/unittest')
|
||||
self.assertEqual(self.f(self.irc, '10XAAAAAA'), '_10XAAAAAA/unittest')
|
||||
|
||||
def testNormalizeNickConflict(self):
|
||||
self.assertEqual(self.f(self.irc, 'helloworld'), 'helloworld/unittest')
|
||||
self.irc.users['10XAAAAAA'] = classes.IrcUser('helloworld/unittest', 1234, '10XAAAAAA')
|
||||
# Increase amount of /'s by one
|
||||
self.assertEqual(self.f(self.irc, 'helloworld'), 'helloworld//unittest')
|
||||
self.irc.users['10XAAAAAB'] = classes.IrcUser('helloworld//unittest', 1234, '10XAAAAAB')
|
||||
# Cut off the nick, not the suffix if the result is too long.
|
||||
self.assertEqual(self.f(self.irc, 'helloworld'), 'helloworl///unittest')
|
||||
|
||||
def testNormalizeNickRemovesSlashes(self):
|
||||
self.irc.proto.__name__ = "charybdis"
|
||||
self.assertEqual(self.f(self.irc, 'helloworld'), 'helloworld|unittest')
|
||||
self.assertEqual(self.f(self.irc, 'abcde/eJanus'), 'abcde|eJanu|unittest')
|
||||
self.assertEqual(self.f(self.irc, 'ObnoxiouslyLongNick'), 'Obnoxiously|unittest')
|
Loading…
Reference in New Issue
Block a user