Ignore:
Timestamp:
08/06/06 15:28:07 (14 years ago)
Author:
spascoe
Message:

Authorisation in python is confirmed as working with 2 test cases.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI05-delivery/trunk/test/test_embedded.py

    r1141 r1144  
    88 
    99import unittest 
    10 import sys, os, signal, time, syslog 
     10import sys, os, signal, time, syslog, stat 
    1111from glob import glob 
    1212import re, tempfile 
     
    2727 
    2828class TestAuthHandler(server.BasicClientAuthHandler): 
     29     
    2930    def authorise(self): 
    3031        msg = self.recvCStr() 
     
    3738        syslog.syslog(syslog.LOG_DEBUG, "AuthContext received privatestr: %s" % privatestr) 
    3839 
     40        return self.makeAuthzHandler(msg, "TestCaseUser") 
     41 
     42    def makeAuthzHandler(self, msg, user): 
    3943        return TestAuthzHandler(msg, "TestCaseUser") 
    4044 
     
    4549 
    4650 
     51 
     52 
    4753class TestFailAuthHandler(server.AuthHandler): 
    4854    def authorise(self): 
    49         return None 
     55        raise server.AuthenticationFailure, "TestFailAuthHandler" 
     56 
     57 
     58class TestPermAuthHandler(TestAuthHandler): 
     59    def makeAuthzHandler(self, msg, user): 
     60        return TestPermAuthzHandler(msg, "TestCaseUser") 
     61 
     62class TestPermAuthzHandler(TestAuthzHandler): 
     63    """Check's the path's other read permission and authorises accordingly. 
     64    """ 
     65 
     66    def authzControl(self, msgcode, transferopt, path): 
     67        # Ignore what is being authorised for now, just authorise if read allowed 
     68        return self.authzPath(path) 
     69 
     70    def authzRetr(self, path): 
     71        return self.authzPath(path) 
     72 
     73    def authzSend(self, path): 
     74        return self.authzPath(path) 
     75 
     76    def authzPath(self, path): 
     77        mode = stat.S_IMODE(os.stat(path)[stat.ST_MODE]) 
     78        if (mode & 0004): 
     79            syslog.syslog(syslog.LOG_DEBUG, 'TestPermAuthzHandler OK') 
     80            return True 
     81        else: 
     82            syslog.syslog(syslog.LOG_DEBUG, 'TestPermAuthzHandler FAIL') 
     83            raise server.AuthorisationFailure, "TestPermAuthzHandler: no read perms" 
     84 
    5085 
    5186class BaseFixture(unittest.TestCase): 
     87 
     88    authContext = TestAuthHandler() 
     89 
    5290    def setUp(self): 
    5391        # We want to mark the beginning of this test case in syslog 
    5492        syslog.openlog('test_embedded.py', 0, syslog.LOG_LOCAL0) 
    55         syslog.syslog(syslog.LOG_DEBUG, 'Starting EmbeddedServerTestCase') 
     93        syslog.syslog(syslog.LOG_DEBUG, 'Starting TestCase') 
    5694 
    5795        self._startServer() 
     
    5997    def tearDown(self): 
    6098        self._stopServer() 
    61         syslog.syslog(syslog.LOG_DEBUG, 'Ended EmbeddedServerTestCase') 
     99        syslog.syslog(syslog.LOG_DEBUG, 'Ended TestCase') 
    62100        syslog.closelog() 
    63101 
     
    65103 
    66104 
    67     def _startServer(self, authContext=None): 
    68         if not authContext: 
    69             authContext = TestAuthHandler() 
     105    def _startServer(self): 
    70106        # Start the server and store it's PID 
    71         self.pid = server.start(authContext, ['-l', 'DEBUG']) 
     107        self.pid = server.start(self.authContext, ['-l', 'DEBUG']) 
    72108 
    73109    def _stopServer(self): 
     
    108144        start_i = 0 
    109145        for i in xrange(len(log)-1, -1, -1): 
    110             if re.search('test_embedded.py: Starting EmbeddedServerTestCase', log[i]): 
     146            if re.search('test_embedded.py: Starting TestCase', log[i]): 
    111147                start_i = i+1 
    112148                break 
     
    144180 
    145181 
    146 class EmbeddedServerTestCase(BaseFixture): 
     182class AuthOK(BaseFixture): 
    147183    """Test the bbftpd module. 
    148184    """ 
     
    239275 
    240276 
    241 class AuthFailure(BaseFixture): 
    242     def setUp(self): 
    243         # We want to mark the beginning of this test case in syslog 
    244         syslog.openlog('test_embedded.py', 0, syslog.LOG_LOCAL0) 
    245         syslog.syslog(syslog.LOG_DEBUG, 'Starting EmbeddedServerTestCase') 
    246  
    247         self._startServer(authContext=TestFailAuthHandler()) 
     277class AuthFail(BaseFixture): 
     278    authContext = TestFailAuthHandler() 
    248279 
    249280    def test(self): 
     
    259290        self.assertLines(['.*bbftpd_private_auth failed.*'], lines) 
    260291 
     292 
     293class Authz(BaseFixture): 
     294    authContext = TestPermAuthHandler() 
     295 
     296    def setUp(self): 
     297        super(Authz, self).setUp() 
     298 
     299        # Set modes on test files 
     300        os.chmod('%s/bar' % (DATADIR), 0640) 
     301        os.chmod('%s/foo' % (DATADIR), 0655) 
     302 
     303    def testOK(self): 
     304        """Test dir of a readable file. 
     305        """ 
     306 
     307        fh = self._runClient("stat %s/foo" % (DATADIR), debug=True) 
     308        output = fh.read() 
     309 
     310        lines = self._readSyslog() 
     311 
     312 
     313        self.assertLines(['Connection and authentication correct', 'stat /.*/foo OK'], output) 
     314        self.assertLines(['.*Authz: MSG_STAT .*/foo', '.*TestPermAuthzHandler OK'], lines) 
     315 
     316    def testFail(self): 
     317        """Test dir of a non-readable file. 
     318        """ 
     319 
     320        fh = self._runClient("stat %s/bar" % (DATADIR), debug=True) 
     321        output = fh.read() 
     322 
     323        lines = self._readSyslog() 
     324 
     325        self.assertLines(['BBFTP-ERROR.* ndg_authz_control: AuthorisationFailure.* no read perms', 
     326                          'stat /.*/bar FAILED'], output) 
     327        self.assertLines(['.*Authz: MSG_STAT .*/bar', '.* TestPermAuthzHandler FAIL', 
     328                          '.* ndg_authz_control: AuthorisationFailure.* no read perms'], lines) 
     329 
     330 
    261331if __name__ == '__main__': 
    262332    unittest.main() 
Note: See TracChangeset for help on using the changeset viewer.