mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-01 09:19:23 +01:00
tests and stuff
This commit is contained in:
parent
85e6a1aea2
commit
2d4d8dd247
@ -226,7 +226,7 @@ def handle_fjoin(irc, servernumeric, command, args):
|
|||||||
namelist.append(user)
|
namelist.append(user)
|
||||||
utils.applyModes(irc, channel, [('+%s' % mode, user) for mode in modeprefix])
|
utils.applyModes(irc, channel, [('+%s' % mode, user) for mode in modeprefix])
|
||||||
irc.channels[channel].users.add(user)
|
irc.channels[channel].users.add(user)
|
||||||
return {'channel': channel, 'users': namelist, 'modes': parsedmodes}
|
return {'channel': channel, 'users': namelist, 'modes': parsedmodes, 'ts': their_ts}
|
||||||
|
|
||||||
def handle_uid(irc, numeric, command, args):
|
def handle_uid(irc, numeric, command, args):
|
||||||
# :70M UID 70MAAAAAB 1429934638 GL 0::1 hidden-7j810p.9mdf.lrek.0000.0000.IP gl 0::1 1429934638 +Wioswx +ACGKNOQXacfgklnoqvx :realname
|
# :70M UID 70MAAAAAB 1429934638 GL 0::1 hidden-7j810p.9mdf.lrek.0000.0000.IP gl 0::1 1429934638 +Wioswx +ACGKNOQXacfgklnoqvx :realname
|
||||||
@ -244,28 +244,21 @@ def handle_quit(irc, numeric, command, args):
|
|||||||
removeClient(irc, numeric)
|
removeClient(irc, numeric)
|
||||||
return {'text': args[0]}
|
return {'text': args[0]}
|
||||||
|
|
||||||
def handle_burst(irc, numeric, command, args):
|
|
||||||
# BURST is sent by our uplink when we link.
|
|
||||||
# <- :70M BURST 1433044587
|
|
||||||
|
|
||||||
# This is handled in handle_events, since our uplink
|
|
||||||
# only sends its name in the initial authentication phase,
|
|
||||||
# not in any following BURST commands.
|
|
||||||
pass
|
|
||||||
|
|
||||||
def handle_server(irc, numeric, command, args):
|
def handle_server(irc, numeric, command, args):
|
||||||
# SERVER is sent by our uplink or any other server to introduce others.
|
# SERVER is sent by our uplink or any other server to introduce others.
|
||||||
# <- :00A SERVER test.server * 1 00C :testing raw message syntax
|
# <- :00A SERVER test.server * 1 00C :testing raw message syntax
|
||||||
# <- :70M SERVER millennium.overdrive.pw * 1 1ML :a relatively long period of time... (Fremont, California)
|
# <- :70M SERVER millennium.overdrive.pw * 1 1ML :a relatively long period of time... (Fremont, California)
|
||||||
servername = args[0].lower()
|
servername = args[0].lower()
|
||||||
sid = args[3]
|
sid = args[3]
|
||||||
|
sdesc = args[-1]
|
||||||
irc.servers[sid] = IrcServer(numeric, servername)
|
irc.servers[sid] = IrcServer(numeric, servername)
|
||||||
|
return {'name': servername, 'sid': args[3], 'text': sdesc}
|
||||||
|
|
||||||
def handle_nick(irc, numeric, command, args):
|
def handle_nick(irc, numeric, command, args):
|
||||||
# <- :70MAAAAAA NICK GL-devel 1434744242
|
# <- :70MAAAAAA NICK GL-devel 1434744242
|
||||||
oldnick = irc.users[numeric].nick
|
oldnick = irc.users[numeric].nick
|
||||||
newnick = irc.users[numeric].nick = args[0]
|
newnick = irc.users[numeric].nick = args[0]
|
||||||
return {'newnick': newnick, 'oldnick': oldnick, 'ts': args[1]}
|
return {'newnick': newnick, 'oldnick': oldnick, 'ts': int(args[1])}
|
||||||
|
|
||||||
def handle_save(irc, numeric, command, args):
|
def handle_save(irc, numeric, command, args):
|
||||||
# This is used to handle nick collisions. Here, the client Derp_ already exists,
|
# This is used to handle nick collisions. Here, the client Derp_ already exists,
|
||||||
@ -277,7 +270,7 @@ def handle_save(irc, numeric, command, args):
|
|||||||
# <- :70M SAVE 0AL000001 1433728673
|
# <- :70M SAVE 0AL000001 1433728673
|
||||||
user = args[0]
|
user = args[0]
|
||||||
irc.users[user].nick = user
|
irc.users[user].nick = user
|
||||||
return {'target': user, 'ts': args[1]}
|
return {'target': user, 'ts': int(args[1])}
|
||||||
|
|
||||||
def handle_fmode(irc, numeric, command, args):
|
def handle_fmode(irc, numeric, command, args):
|
||||||
# <- :70MAAAAAA FMODE #chat 1433653462 +hhT 70MAAAAAA 70MAAAAAD
|
# <- :70MAAAAAA FMODE #chat 1433653462 +hhT 70MAAAAAA 70MAAAAAD
|
||||||
@ -285,7 +278,8 @@ def handle_fmode(irc, numeric, command, args):
|
|||||||
modes = args[2:]
|
modes = args[2:]
|
||||||
changedmodes = utils.parseModes(irc, channel, modes)
|
changedmodes = utils.parseModes(irc, channel, modes)
|
||||||
utils.applyModes(irc, channel, changedmodes)
|
utils.applyModes(irc, channel, changedmodes)
|
||||||
return {'target': channel, 'modes': changedmodes}
|
ts = int(args[1])
|
||||||
|
return {'target': channel, 'modes': changedmodes, 'ts': ts}
|
||||||
|
|
||||||
def handle_mode(irc, numeric, command, args):
|
def handle_mode(irc, numeric, command, args):
|
||||||
# In InspIRCd, MODE is used for setting user modes and
|
# In InspIRCd, MODE is used for setting user modes and
|
||||||
@ -432,6 +426,9 @@ def handle_events(irc, data):
|
|||||||
# something like: {'channel': '#whatever', 'users': ['UID1', 'UID2',
|
# something like: {'channel': '#whatever', 'users': ['UID1', 'UID2',
|
||||||
# 'UID3']}, etc.
|
# 'UID3']}, etc.
|
||||||
if parsed_args:
|
if parsed_args:
|
||||||
|
# Always make sure TS is sent.
|
||||||
|
if 'ts' not in parsed_args:
|
||||||
|
parsed_args['ts'] = int(time.time())
|
||||||
hook_cmd = command
|
hook_cmd = command
|
||||||
if command in hook_map:
|
if command in hook_map:
|
||||||
hook_cmd = hook_map[command]
|
hook_cmd = hook_map[command]
|
||||||
|
@ -3,6 +3,7 @@ import os
|
|||||||
sys.path += [os.getcwd(), os.path.join(os.getcwd(), 'protocols')]
|
sys.path += [os.getcwd(), os.path.join(os.getcwd(), 'protocols')]
|
||||||
import unittest
|
import unittest
|
||||||
import time
|
import time
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
import inspircd
|
import inspircd
|
||||||
import classes
|
import classes
|
||||||
@ -16,8 +17,10 @@ class TestProtoInspIRCd(unittest.TestCase):
|
|||||||
# This is to initialize ourself as an internal PseudoServer, so we can spawn clients
|
# This is to initialize ourself as an internal PseudoServer, so we can spawn clients
|
||||||
self.proto.connect(self.irc)
|
self.proto.connect(self.irc)
|
||||||
self.u = self.irc.pseudoclient.uid
|
self.u = self.irc.pseudoclient.uid
|
||||||
|
self.maxDiff = None
|
||||||
|
utils.command_hooks = defaultdict(list)
|
||||||
|
|
||||||
def test_connect(self):
|
def testConnect(self):
|
||||||
initial_messages = self.irc.takeMsgs()
|
initial_messages = self.irc.takeMsgs()
|
||||||
commands = self.irc.takeCommands(initial_messages)
|
commands = self.irc.takeCommands(initial_messages)
|
||||||
|
|
||||||
@ -160,6 +163,7 @@ class TestProtoInspIRCd(unittest.TestCase):
|
|||||||
msgs = self.irc.takeMsgs()
|
msgs = self.irc.takeMsgs()
|
||||||
commands = self.irc.takeCommands(msgs)
|
commands = self.irc.takeCommands(msgs)
|
||||||
hookdata = self.irc.takeHooks()[0]
|
hookdata = self.irc.takeHooks()[0]
|
||||||
|
del hookdata['ts']
|
||||||
self.assertEqual({'target': olduid, 'text': 'killed'}, hookdata)
|
self.assertEqual({'target': olduid, 'text': 'killed'}, hookdata)
|
||||||
# Make sure we're respawning our PseudoClient when its killed
|
# Make sure we're respawning our PseudoClient when its killed
|
||||||
self.assertIn('UID', commands)
|
self.assertIn('UID', commands)
|
||||||
@ -172,6 +176,7 @@ class TestProtoInspIRCd(unittest.TestCase):
|
|||||||
utils.add_hook(self.irc.dummyhook, 'KICK')
|
utils.add_hook(self.irc.dummyhook, 'KICK')
|
||||||
self.irc.run(':{u} KICK #pylink {u} :kicked'.format(u=self.irc.pseudoclient.uid))
|
self.irc.run(':{u} KICK #pylink {u} :kicked'.format(u=self.irc.pseudoclient.uid))
|
||||||
hookdata = self.irc.takeHooks()[0]
|
hookdata = self.irc.takeHooks()[0]
|
||||||
|
del hookdata['ts']
|
||||||
self.assertEqual({'target': self.u, 'text': 'kicked', 'channel': '#pylink'}, hookdata)
|
self.assertEqual({'target': self.u, 'text': 'kicked', 'channel': '#pylink'}, hookdata)
|
||||||
|
|
||||||
# Ditto above
|
# Ditto above
|
||||||
@ -213,19 +218,26 @@ class TestProtoInspIRCd(unittest.TestCase):
|
|||||||
hookdata = self.irc.takeHooks()[0]
|
hookdata = self.irc.takeHooks()[0]
|
||||||
expected = {'modes': [('+l', '10'), ('+s', None)],
|
expected = {'modes': [('+l', '10'), ('+s', None)],
|
||||||
'channel': '#pylink',
|
'channel': '#pylink',
|
||||||
'users': ['10XAAAAAA', '10XAAAAAB', '10XAAAAAC']}
|
'users': ['10XAAAAAA', '10XAAAAAB', '10XAAAAAC'],
|
||||||
|
'ts': 1423790418}
|
||||||
self.assertEqual(expected, hookdata)
|
self.assertEqual(expected, hookdata)
|
||||||
|
|
||||||
def testHandleFmode(self):
|
def testHandleFmode(self):
|
||||||
# utils.add_hook(self.irc.dummyhook, 'MODE')
|
|
||||||
self.irc.run(':10X FJOIN #pylink 1423790411 +n :o,10XAAAAAA ,10XAAAAAB')
|
self.irc.run(':10X FJOIN #pylink 1423790411 +n :o,10XAAAAAA ,10XAAAAAB')
|
||||||
|
utils.add_hook(self.irc.dummyhook, 'MODE')
|
||||||
self.irc.run(':70M FMODE #pylink 1423790412 +ikl herebedragons 100')
|
self.irc.run(':70M FMODE #pylink 1423790412 +ikl herebedragons 100')
|
||||||
self.assertEqual({('i', None), ('k', 'herebedragons'), ('l', '100'), ('n', None)}, self.irc.channels['#pylink'].modes)
|
self.assertEqual({('i', None), ('k', 'herebedragons'), ('l', '100'), ('n', None)}, self.irc.channels['#pylink'].modes)
|
||||||
self.irc.run(':70M FMODE #pylink 1423790413 -ilk+m herebedragons')
|
self.irc.run(':70M FMODE #pylink 1423790413 -ilk+m herebedragons')
|
||||||
self.assertEqual({('m', None), ('n', None)}, self.irc.channels['#pylink'].modes)
|
self.assertEqual({('m', None), ('n', None)}, self.irc.channels['#pylink'].modes)
|
||||||
|
|
||||||
|
hookdata = self.irc.takeHooks()
|
||||||
|
expected = [{'target': '#pylink', 'modes': [('+i', None), ('+k', 'herebedragons'), ('+l', '100')], 'ts': 1423790412},
|
||||||
|
{'target': '#pylink', 'modes': [('-i', None), ('-l', None), ('-k', 'herebedragons'), ('+m', None)], 'ts': 1423790413}]
|
||||||
|
self.assertEqual(expected, hookdata)
|
||||||
|
|
||||||
def testHandleFmodeWithPrefixes(self):
|
def testHandleFmodeWithPrefixes(self):
|
||||||
self.irc.run(':70M FJOIN #pylink 1423790411 +n :o,10XAAAAAA ,10XAAAAAB')
|
self.irc.run(':70M FJOIN #pylink 1423790411 +n :o,10XAAAAAA ,10XAAAAAB')
|
||||||
|
utils.add_hook(self.irc.dummyhook, 'MODE')
|
||||||
# Prefix modes are stored separately, so they should never show up in .modes
|
# Prefix modes are stored separately, so they should never show up in .modes
|
||||||
self.assertNotIn(('o', '10XAAAAAA'), self.irc.channels['#pylink'].modes)
|
self.assertNotIn(('o', '10XAAAAAA'), self.irc.channels['#pylink'].modes)
|
||||||
self.assertEqual({'10XAAAAAA'}, self.irc.channels['#pylink'].prefixmodes['ops'])
|
self.assertEqual({'10XAAAAAA'}, self.irc.channels['#pylink'].prefixmodes['ops'])
|
||||||
@ -236,12 +248,22 @@ class TestProtoInspIRCd(unittest.TestCase):
|
|||||||
self.irc.run(':70M FMODE #pylink 1423790413 -o %s' % self.u)
|
self.irc.run(':70M FMODE #pylink 1423790413 -o %s' % self.u)
|
||||||
self.assertEqual(modes, self.irc.channels['#pylink'].modes)
|
self.assertEqual(modes, self.irc.channels['#pylink'].modes)
|
||||||
self.assertNotIn(self.u, self.irc.channels['#pylink'].prefixmodes['ops'])
|
self.assertNotIn(self.u, self.irc.channels['#pylink'].prefixmodes['ops'])
|
||||||
|
# Test hooks
|
||||||
|
hookdata = self.irc.takeHooks()
|
||||||
|
expected = [{'target': '#pylink', 'modes': [('+l', '50'), ('+o', '9PYAAAAAA'), ('+t', None)], 'ts': 1423790412},
|
||||||
|
{'target': '#pylink', 'modes': [('-o', '9PYAAAAAA')], 'ts': 1423790413}]
|
||||||
|
self.assertEqual(expected, hookdata)
|
||||||
|
|
||||||
def testFmodeRemovesOldParams(self):
|
def testFmodeRemovesOldParams(self):
|
||||||
|
utils.add_hook(self.irc.dummyhook, 'MODE')
|
||||||
self.irc.run(':70M FMODE #pylink 1423790412 +l 50')
|
self.irc.run(':70M FMODE #pylink 1423790412 +l 50')
|
||||||
self.assertEqual({('l', '50')}, self.irc.channels['#pylink'].modes)
|
self.assertEqual({('l', '50')}, self.irc.channels['#pylink'].modes)
|
||||||
self.irc.run(':70M FMODE #pylink 1423790412 +l 30')
|
self.irc.run(':70M FMODE #pylink 1423790412 +l 30')
|
||||||
self.assertEqual({('l', '30')}, self.irc.channels['#pylink'].modes)
|
self.assertEqual({('l', '30')}, self.irc.channels['#pylink'].modes)
|
||||||
|
hookdata = self.irc.takeHooks()
|
||||||
|
expected = [{'target': '#pylink', 'modes': [('+l', '50')], 'ts': 1423790412},
|
||||||
|
{'target': '#pylink', 'modes': [('+l', '30')], 'ts': 1423790412}]
|
||||||
|
self.assertEqual(expected, hookdata)
|
||||||
|
|
||||||
def testFjoinResetsTS(self):
|
def testFjoinResetsTS(self):
|
||||||
curr_ts = self.irc.channels['#pylink'].ts
|
curr_ts = self.irc.channels['#pylink'].ts
|
||||||
@ -270,13 +292,41 @@ class TestProtoInspIRCd(unittest.TestCase):
|
|||||||
utils.add_hook(self.irc.dummyhook, m)
|
utils.add_hook(self.irc.dummyhook, m)
|
||||||
self.irc.run(':70MAAAAAA %s #dev :afasfsa' % m)
|
self.irc.run(':70MAAAAAA %s #dev :afasfsa' % m)
|
||||||
hookdata = self.irc.takeHooks()[0]
|
hookdata = self.irc.takeHooks()[0]
|
||||||
|
del hookdata['ts']
|
||||||
self.assertEqual({'target': '#dev', 'text': 'afasfsa'}, hookdata)
|
self.assertEqual({'target': '#dev', 'text': 'afasfsa'}, hookdata)
|
||||||
|
|
||||||
def testHandlePart(self):
|
def testHandlePart(self):
|
||||||
utils.add_hook(self.irc.dummyhook, 'PART')
|
utils.add_hook(self.irc.dummyhook, 'PART')
|
||||||
self.irc.run(':9PYAAAAAA PART #pylink')
|
self.irc.run(':9PYAAAAAA PART #pylink')
|
||||||
hookdata = self.irc.takeHooks()[0]
|
hookdata = self.irc.takeHooks()[0]
|
||||||
|
del hookdata['ts']
|
||||||
self.assertEqual({'channel': '#pylink', 'text': ''}, hookdata)
|
self.assertEqual({'channel': '#pylink', 'text': ''}, hookdata)
|
||||||
|
|
||||||
|
def testUIDHook(self):
|
||||||
|
utils.add_hook(self.irc.dummyhook, 'UID')
|
||||||
|
# Create the server so we won't KeyError on processing UID
|
||||||
|
self.irc.run('SERVER whatever. abcd 0 10X :Whatever Server - Hellas Planitia, Mars')
|
||||||
|
self.irc.run(':10X UID 10XAAAAAB 1429934638 GL 0::1 '
|
||||||
|
'hidden-7j810p.9mdf.lrek.0000.0000.IP gl 0::1 1429934638 '
|
||||||
|
'+Wioswx +ACGKNOQXacfgklnoqvx :realname')
|
||||||
|
expected = {'uid': '10XAAAAAB', 'ts': '1429934638', 'nick': 'GL',
|
||||||
|
'realhost': '0::1', 'ident': 'gl', 'ip': '0::1',
|
||||||
|
'host': 'hidden-7j810p.9mdf.lrek.0000.0000.IP'}
|
||||||
|
hookdata = self.irc.takeHooks()[0]
|
||||||
|
self.assertEqual(hookdata, expected)
|
||||||
|
|
||||||
|
def testHandleQuit(self):
|
||||||
|
utils.add_hook(self.irc.dummyhook, 'QUIT')
|
||||||
|
self.irc.run('SERVER whatever. abcd 0 10X :Whatever Server - Hellas Planitia, Mars')
|
||||||
|
self.irc.run(':10X UID 10XAAAAAB 1429934638 GL 0::1 '
|
||||||
|
'hidden-7j810p.9mdf.lrek.0000.0000.IP gl 0::1 1429934638 '
|
||||||
|
'+Wioswx +ACGKNOQXacfgklnoqvx :realname')
|
||||||
|
self.irc.run(':10XAAAAAB QUIT :Quit: quit message goes here')
|
||||||
|
hookdata = self.irc.takeHooks()[0]
|
||||||
|
del hookdata['ts']
|
||||||
|
self.assertEqual(hookdata, {'text': 'Quit: quit message goes here'})
|
||||||
|
self.assertNotIn('10XAAAAAB', self.irc.users)
|
||||||
|
self.assertNotIn('10XAAAAAB', self.irc.servers['10X'].users)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
Reference in New Issue
Block a user