3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-27 21:19:31 +01:00

tests for spawnServer and SQUIT, make server name case-insensitive

This commit is contained in:
James Lu 2015-07-04 11:57:21 -07:00
parent 942f97352d
commit 8ea62c31de
2 changed files with 59 additions and 4 deletions

View File

@ -250,7 +250,7 @@ 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] servername = args[0].lower()
sid = args[3] sid = args[3]
irc.servers[sid] = IrcServer(numeric, servername) irc.servers[sid] = IrcServer(numeric, servername)
@ -304,8 +304,11 @@ def handle_squit(irc, numeric, command, args):
def handle_rsquit(irc, numeric, command, args): def handle_rsquit(irc, numeric, command, args):
# <- :1MLAAAAIG RSQUIT :ayy.lmao # <- :1MLAAAAIG RSQUIT :ayy.lmao
# <- :1MLAAAAIG RSQUIT ayy.lmao :some reason # <- :1MLAAAAIG RSQUIT ayy.lmao :some reason
# If we receive a remote SQUIT from an oper, split the target server # RSQUIT is sent by opers to squit remote servers.
# only if they're identified with us. # Strangely, it takes a server name instead of a SID, and is
# allowed to be ignored entirely.
# If we receive a remote SQUIT, split the target server
# ONLY if the sender is identified with us.
target = args[0] target = args[0]
for (sid, server) in irc.servers.items(): for (sid, server) in irc.servers.items():
if server.name == target: if server.name == target:
@ -334,7 +337,7 @@ def handle_events(irc, data):
args = data.split() args = data.split()
if args and args[0] == 'SERVER': if args and args[0] == 'SERVER':
# SERVER whatever.net abcdefgh 0 10X :something # SERVER whatever.net abcdefgh 0 10X :something
servername = args[1] servername = args[1].lower()
numeric = args[4] numeric = args[4]
if args[2] != irc.serverdata['recvpass']: if args[2] != irc.serverdata['recvpass']:
# Check if recvpass is correct # Check if recvpass is correct

View File

@ -83,5 +83,57 @@ class TestInspIRCdProtocol(unittest.TestCase):
self.proto.nickClient(self.irc, self.u, 'NotPyLink') self.proto.nickClient(self.irc, self.u, 'NotPyLink')
self.assertEqual('NotPyLink', self.irc.users[self.u].nick) self.assertEqual('NotPyLink', self.irc.users[self.u].nick)
def testSpawnServer(self):
# Incorrect SID length
self.assertRaises(Exception, self.proto.spawnServer, self.irc, 'subserver.pylink', '34Q0')
self.proto.spawnServer(self.irc, 'subserver.pylink', '34Q')
# Duplicate server name
self.assertRaises(Exception, self.proto.spawnServer, self.irc, 'Subserver.PyLink', '34Z')
# Duplicate SID
self.assertRaises(Exception, self.proto.spawnServer, self.irc, 'another.Subserver.PyLink', '34Q')
self.assertIn('34Q', self.irc.servers)
# Are we bursting properly?
self.assertIn(':34Q ENDBURST', self.irc.takeMsgs())
def testSpawnClientOnServer(self):
self.proto.spawnServer(self.irc, 'subserver.pylink', '34Q')
u = self.proto.spawnClient(self.irc, 'person1', 'person', 'users.overdrive.pw', server='34Q')
# We're spawning clients on the right server, hopefully...
self.assertIn(u.uid, self.irc.servers['34Q'].users)
self.assertNotIn(u.uid, self.irc.servers[self.irc.sid].users)
def testSquit(self):
# Spawn a messy network map, just because!
self.proto.spawnServer(self.irc, 'level1.pylink', '34P')
self.proto.spawnServer(self.irc, 'level2.pylink', '34Q', uplink='34P')
self.proto.spawnServer(self.irc, 'level3.pylink', '34Z', uplink='34Q')
self.proto.spawnServer(self.irc, 'level4.pylink', '34Y', uplink='34Z')
self.assertEqual(self.irc.servers['34Y'].uplink, '34Z')
s4u = self.proto.spawnClient(self.irc, 'person1', 'person', 'users.overdrive.pw', server='34Y').uid
s3u = self.proto.spawnClient(self.irc, 'person2', 'person', 'users.overdrive.pw', server='34Z').uid
self.proto.joinClient(self.irc, s3u, '#pylink')
self.proto.joinClient(self.irc, s4u, '#pylink')
self.proto.handle_squit(self.irc, '9PY', 'SQUIT', ['34Y'])
self.assertNotIn(s4u, self.irc.users)
self.assertNotIn('34Y', self.irc.servers)
# Netsplits are obviously recursive, so all these should be removed.
self.proto.handle_squit(self.irc, '9PY', 'SQUIT', ['34P'])
self.assertNotIn(s3u, self.irc.users)
self.assertNotIn('34P', self.irc.servers)
self.assertNotIn('34Q', self.irc.servers)
self.assertNotIn('34Z', self.irc.servers)
def testRSquit(self):
u = self.proto.spawnClient(self.irc, 'person1', 'person', 'users.overdrive.pw')
u.identified = 'admin'
self.proto.spawnServer(self.irc, 'level1.pylink', '34P')
self.irc.run(':%s RSQUIT level1.pylink :some reason' % self.u)
# No SQUIT yet, since the 'PyLink' client isn't identified
self.assertNotIn('SQUIT', self.irc.takeCommands(self.irc.takeMsgs()))
# The one we just spawned however, is.
self.irc.run(':%s RSQUIT level1.pylink :some reason' % u.uid)
self.assertIn('SQUIT', self.irc.takeCommands(self.irc.takeMsgs()))
self.assertNotIn('34P', self.irc.servers)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()