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:
parent
942f97352d
commit
8ea62c31de
@ -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
|
||||||
|
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user