Changeset 1066

Show
Ignore:
Timestamp:
09/14/07 00:31:34 (15 months ago)
Author:
wichert
Message:

More server tests.

Location:
trunk
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/CHANGES.txt

    r1061 r1066  
    11Pyrad 1.0 
    22========= 
     3 
     4* The default dictionary for Server instances was shared between all instances, 
     5  possibly leading to unwanted data pollution. Each Server now gets its own 
     6  dict instance if none is passed in to the constructor. 
    37 
    48* Fixed a timeout handling problem in the client: after receiving an 
  • trunk/pyrad/tests/mock.py

    r1063 r1066  
    8585 
    8686 
     87class MockPoll: 
     88    def __init__(self): 
     89        self.registry=[] 
     90 
     91 
     92    def register(self, fd, options): 
     93        self.registry.append((fd, options)) 
     94 
  • trunk/pyrad/tests/testClient.py

    r1063 r1066  
    77from pyrad.packet import AccessRequest 
    88from pyrad.packet import AccountingRequest 
    9 from pyrad.packet.tests.mock import MockPacket 
    10 from pyrad.packet.tests.mock import MockSocket 
     9from pyrad.tests.mock import MockPacket 
     10from pyrad.tests.mock import MockSocket 
    1111 
    1212BIND_IP = "127.0.0.1" 
  • trunk/pyrad/tests/testServer.py

    r1063 r1066  
     1import select 
     2import socket 
    13import unittest 
    24from pyrad.server import RemoteHost 
    35from pyrad.server import Server 
     6from pyrad.server import PacketError 
     7from pyrad.tests.mock import MockPoll 
     8from pyrad.tests.mock import MockSocket 
     9from pyrad.packet import AccessRequest 
     10from pyrad.packet import AccountingRequest 
     11 
     12 
     13class TrivialObject: 
     14    """dummy object""" 
     15 
     16 
     17class MockFd: 
     18    data = object() 
     19    source = object() 
     20 
     21    def __init__(self, fd=0): 
     22        self.fd=fd 
     23 
     24    def fileno(self): 
     25        return self.fd 
     26 
     27    def recvfrom(self, size): 
     28        self.size=size 
     29        return (self.data, self.source) 
     30 
     31 
    432 
    533class RemoteHostTests(unittest.TestCase): 
     
    4472    def testBindDuringConstruction(self): 
    4573        def BindToAddress(self, addr): 
    46             self.bound=addr 
     74            self.bound.append(addr) 
    4775        bta=Server.BindToAddress 
    4876        Server.BindToAddress=BindToAddress 
    4977 
     78        Server.bound=[] 
    5079        server=Server(["one", "two", "three"]) 
    5180        self.assertEqual(server.bound, ["one", "two", "three"]) 
     81        del Server.bound 
    5282 
    5383        Server.BindToAddress=bta 
    5484 
    5585 
     86 
     87class SocketTests(unittest.TestCase): 
     88    def setUp(self): 
     89        self.orgsocket=socket.socket 
     90        socket.socket=MockSocket 
     91        self.server=Server() 
     92 
     93 
     94    def tearDown(self): 
     95        socket.socket=self.orgsocket 
     96 
     97 
     98    def testBind(self): 
     99        self.server.BindToAddress("192.168.13.13") 
     100        self.assertEqual(len(self.server.authfds), 1) 
     101        self.assertEqual(self.server.authfds[0].address, 
     102                ("192.168.13.13", 1812)) 
     103 
     104        self.assertEqual(len(self.server.acctfds), 1) 
     105        self.assertEqual(self.server.acctfds[0].address, 
     106                ("192.168.13.13", 1813)) 
     107 
     108 
     109    def testGrabPacket(self): 
     110        def gen(data): 
     111            res=TrivialObject() 
     112            res.data=data 
     113            return res 
     114 
     115 
     116        fd=MockFd() 
     117        fd.source=object() 
     118        pkt=self.server._GrabPacket(gen, fd) 
     119        self.failUnless(isinstance(pkt, TrivialObject)) 
     120        self.failUnless(pkt.fd is fd) 
     121        self.failUnless(pkt.source is fd.source) 
     122        self.failUnless(pkt.data is fd.data) 
     123 
     124 
     125    def testPrepareSocketNoFds(self): 
     126        self.server._poll=MockPoll() 
     127        self.server._PrepareSockets() 
     128 
     129        self.assertEqual(self.server._poll.registry, []) 
     130        self.assertEqual(self.server._realauthfds, []) 
     131        self.assertEqual(self.server._realacctfds, []) 
     132 
     133 
     134    def testPrepareSocketAuthFds(self): 
     135        self.server._poll=MockPoll() 
     136        self.server._fdmap={} 
     137        self.server.authfds=[MockFd(12), MockFd(14)] 
     138        self.server._PrepareSockets() 
     139 
     140        self.assertEqual(self.server._fdmap.keys(), [12, 14]) 
     141        self.assertEqual(self.server._poll.registry, 
     142                [(12, select.POLLIN|select.POLLPRI|select.POLLERR), 
     143                 (14, select.POLLIN|select.POLLPRI|select.POLLERR)]) 
     144 
     145 
     146    def testPrepareSocketAcctFds(self): 
     147        self.server._poll=MockPoll() 
     148        self.server._fdmap={} 
     149        self.server.acctfds=[MockFd(12), MockFd(14)] 
     150        self.server._PrepareSockets() 
     151 
     152        self.assertEqual(self.server._fdmap.keys(), [12, 14]) 
     153        self.assertEqual(self.server._poll.registry, 
     154                [(12, select.POLLIN|select.POLLPRI|select.POLLERR), 
     155                 (14, select.POLLIN|select.POLLPRI|select.POLLERR)]) 
     156 
     157 
     158class AuthPacketHandlingTests(unittest.TestCase): 
     159    def setUp(self): 
     160        self.server=Server() 
     161        self.server.hosts["host"]=TrivialObject() 
     162        self.server.hosts["host"].secret="supersecret" 
     163        self.packet=TrivialObject() 
     164        self.packet.code=AccessRequest 
     165        self.packet.source=("host", "port") 
     166 
     167 
     168    def testHandleAuthPacketUnknownHost(self): 
     169        self.packet.source=("stranger", "port") 
     170        try: 
     171            self.server._HandleAuthPacket(self.packet) 
     172        except PacketError, e: 
     173            self.failUnless("unknown host" in str(e)) 
     174        else: 
     175            self.fail() 
     176 
     177 
     178    def testHandleAuthPacketWrongPort(self): 
     179        self.packet.code=AccountingRequest 
     180        try: 
     181            self.server._HandleAuthPacket(self.packet) 
     182        except PacketError, e: 
     183            self.failUnless("port" in str(e)) 
     184        else: 
     185            self.fail() 
     186 
     187 
     188    def testHandleAuthPacket(self): 
     189        def HandleAuthPacket(self, pkt): 
     190            self.handled=pkt 
     191        hap=Server.HandleAuthPacket 
     192        Server.HandleAuthPacket=HandleAuthPacket 
     193 
     194        self.server._HandleAuthPacket(self.packet) 
     195        self.failUnless(self.server.handled is self.packet) 
     196 
     197        Server.HandleAuthPacket=hap 
     198 
     199 
     200 
     201class AcctPacketHandlingTests(unittest.TestCase): 
     202    def setUp(self): 
     203        self.server=Server() 
     204        self.server.hosts["host"]=TrivialObject() 
     205        self.server.hosts["host"].secret="supersecret" 
     206        self.packet=TrivialObject() 
     207        self.packet.code=AccountingRequest 
     208        self.packet.source=("host", "port") 
     209 
     210 
     211    def testHandleAcctPacketUnknownHost(self): 
     212        self.packet.source=("stranger", "port") 
     213        try: 
     214            self.server._HandleAcctPacket(self.packet) 
     215        except PacketError, e: 
     216            self.failUnless("unknown host" in str(e)) 
     217        else: 
     218            self.fail() 
     219 
     220 
     221    def testHandleAcctPacketWrongPort(self): 
     222        self.packet.code=AccessRequest 
     223        try: 
     224            self.server._HandleAcctPacket(self.packet) 
     225        except PacketError, e: 
     226            self.failUnless("port" in str(e)) 
     227        else: 
     228            self.fail() 
     229 
     230 
     231    def testHandleAcctPacket(self): 
     232        def HandleAcctPacket(self, pkt): 
     233            self.handled=pkt 
     234        hap=Server.HandleAcctPacket 
     235        Server.HandleAcctPacket=HandleAcctPacket 
     236 
     237        self.server._HandleAcctPacket(self.packet) 
     238        self.failUnless(self.server.handled is self.packet) 
     239 
     240        Server.HandleAcctPacket=hap 
     241