mirror of
				https://github.com/jlu5/PyLink.git
				synced 2025-11-04 08:57:25 +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.
 | 
			
		||||
    # <- :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)
 | 
			
		||||
    servername = args[0]
 | 
			
		||||
    servername = args[0].lower()
 | 
			
		||||
    sid = args[3]
 | 
			
		||||
    irc.servers[sid] = IrcServer(numeric, servername)
 | 
			
		||||
 | 
			
		||||
@ -304,8 +304,11 @@ def handle_squit(irc, numeric, command, args):
 | 
			
		||||
def handle_rsquit(irc, numeric, command, args):
 | 
			
		||||
    # <- :1MLAAAAIG RSQUIT :ayy.lmao
 | 
			
		||||
    # <- :1MLAAAAIG RSQUIT ayy.lmao :some reason
 | 
			
		||||
    # If we receive a remote SQUIT from an oper, split the target server
 | 
			
		||||
    # only if they're identified with us.
 | 
			
		||||
    # RSQUIT is sent by opers to squit remote servers.
 | 
			
		||||
    # 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]
 | 
			
		||||
    for (sid, server) in irc.servers.items():
 | 
			
		||||
        if server.name == target:
 | 
			
		||||
@ -334,7 +337,7 @@ def handle_events(irc, data):
 | 
			
		||||
    args = data.split()
 | 
			
		||||
    if args and args[0] == 'SERVER':
 | 
			
		||||
       # SERVER whatever.net abcdefgh 0 10X :something
 | 
			
		||||
       servername = args[1]
 | 
			
		||||
       servername = args[1].lower()
 | 
			
		||||
       numeric = args[4]
 | 
			
		||||
       if args[2] != irc.serverdata['recvpass']:
 | 
			
		||||
            # Check if recvpass is correct
 | 
			
		||||
 | 
			
		||||
@ -83,5 +83,57 @@ class TestInspIRCdProtocol(unittest.TestCase):
 | 
			
		||||
        self.proto.nickClient(self.irc, self.u, 'NotPyLink')
 | 
			
		||||
        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__':
 | 
			
		||||
    unittest.main()
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user