Changeset 3044


Ignore:
Timestamp:
23/11/07 13:50:10 (12 years ago)
Author:
pjkersha
Message:

SessionMgr? SessionMgrClient? unit tests complete with tests for getSessionStatus included

ndg.security.server/ndg/security/server/conf/sessionMgr.tac:

  • code for getSessionStatus incorporated

ndg.security.server/ndg/security/server/SessionMgr/SessionMgr_services_server.py,
ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services.py,
ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services_types.py,
www/html/sessionMgr.wsdl: fixed getSessionStatusResponse - isAlive element needs to be nested within a sequence elem.

ndg.security.test/ndg/security/test/sessionMgrClient/SessionMgrClientTest.py,

ndg.security.test/ndg/security/test/sessionMgrClient/sessionMgrProperties.xml: default to https for tests

ndg.security.test/ndg/security/test/sessionMgrClient/sessionMgrClientTest.cfg: get rid of test1AddUser and added test2GetSessionStatus

ndg.security.test/ndg/security/test/sessionMgr/test.py: SessionMgr? unit tests all working

ndg.security.common/ndg/security/common/SessionMgr/init.py: added getSessionStatus method

ndg.security.common/ndg/security/common/AttAuthority/init.py: fix to getHostInfo - return dict indexed by hostname

ndg.security.common/ndg/security/common/AttAuthority/AttAuthority_services.py: re-ran code generation from WSDL

Makefile: added targets for building ZSI code stubs from AA and SM WSDLs.

Location:
TI12-security/trunk/python
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/Makefile

    r2948 r3044  
    5454EPYDOC_FRAMES_OPT=--no-frames 
    5555 
     56# Make ZSI stubs from Session Manager WSDL 
     57SM_ZSI_STUB_DIRS=./ndg.security.server/ndg/security/server/SessionMgr \ 
     58                                 ./ndg.security.common/ndg/security/common/SessionMgr 
     59 
     60sm_zsi_wsdl_stubs: 
     61        @-for dir in ${SM_ZSI_STUB_DIRS}; do \ 
     62                cd $$dir && make && cd ../../../../..; \ 
     63        done; 
     64 
     65# Make ZSI stubs from Attribute Authority WSDL 
     66AA_ZSI_STUB_DIRS=./ndg.security.server/ndg/security/server/AttAuthority \ 
     67                                 ./ndg.security.common/ndg/security/common/AttAuthority 
     68                                  
     69aa_zsi_wsdl_stubs: 
     70        @-for dir in ${AA_ZSI_STUB_DIRS}; do \ 
     71                cd $$dir && make && cd ../../../../..; \ 
     72        done; 
     73 
     74# Make all ZSI stubs for NDG security 
     75zsi_wsdl_stubs: sm_zsi_wsdl_stubs aa_zsi_wsdl_stubs 
     76         
    5677epydoc: 
    5778        ${EPYDOC} ./ndg.security.*/ndg -o ${EPYDOC_OUTDIR} \ 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttAuthority/AttAuthority_services.py

    r2931 r3044  
    2929        # no ws-addressing 
    3030 
    31     # op: <ZSI.wstools.WSDLTools.Message instance at 0x40736bcc> 
     31    # op: <ZSI.wstools.WSDLTools.Message instance at 0x407731ac> 
    3232    def getAttCert(self, userId,userCert,userAttCert): 
    3333 
     
    4646        return attCert,msg 
    4747 
    48     # op: <ZSI.wstools.WSDLTools.Message instance at 0x4077006c> 
     48    # op: <ZSI.wstools.WSDLTools.Message instance at 0x4077362c> 
    4949    def getHostInfo(self): 
    5050 
     
    6464        return hostname,aaURI,aaDN,loginURI,loginServerDN,loginRequestServerDN 
    6565 
    66     # op: <ZSI.wstools.WSDLTools.Message instance at 0x40770dec> 
     66    # op: <ZSI.wstools.WSDLTools.Message instance at 0x4077b3cc> 
    6767    def getTrustedHostInfo(self, role): 
    6868 
     
    7878        return trustedHosts 
    7979 
    80     # op: <ZSI.wstools.WSDLTools.Message instance at 0x40770f8c> 
     80    # op: <ZSI.wstools.WSDLTools.Message instance at 0x4077b56c> 
    8181    def getAllHostsInfo(self): 
    8282 
     
    9191        return hosts 
    9292 
    93     # op: <ZSI.wstools.WSDLTools.Message instance at 0x4077712c> 
     93    # op: <ZSI.wstools.WSDLTools.Message instance at 0x4077b6ec> 
    9494    def getX509Cert(self): 
    9595 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttAuthority/__init__.py

    r3040 r3044  
    292292 
    293293        # Unpack response into dict 
    294         hostInfoKw = ['hostname', 
    295                       'aaURI', 
     294        hostInfoKw = ['aaURI', 
    296295                      'aaDN', 
    297296                      'loginURI', 
     
    299298                      'loginRequestServerDN'] 
    300299        hostInfoKw.reverse() 
    301         hostInfo = dict([(k, response.pop()) for k in hostInfoKw]) 
     300        hostInfo = {response.pop(): \ 
     301                    dict([(k, response.pop()) for k in hostInfoKw])} 
    302302 
    303303        return hostInfo 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services.py

    r3024 r3044  
    2929        # no ws-addressing 
    3030 
    31     # op: <ZSI.wstools.WSDLTools.Message instance at 0x4077376c> 
     31    # op: <ZSI.wstools.WSDLTools.Message instance at 0x407737ec> 
    3232    def getSessionStatus(self, userDN,sessID): 
    3333 
     
    4141        # no output wsaction 
    4242        response = self.binding.Receive(getSessionStatusOutputMsg.typecode) 
    43         return  
     43        isAlive = response._isAlive 
     44        return isAlive 
    4445 
    45     # op: <ZSI.wstools.WSDLTools.Message instance at 0x40773bcc> 
     46    # op: <ZSI.wstools.WSDLTools.Message instance at 0x40773c4c> 
    4647    def connect(self, username,passphrase,createServerSess): 
    4748 
     
    6263        return proxyCert,proxyPriKey,userCert,sessID 
    6364 
    64     # op: <ZSI.wstools.WSDLTools.Message instance at 0x4077898c> 
     65    # op: <ZSI.wstools.WSDLTools.Message instance at 0x40778a8c> 
    6566    def disconnect(self, userCert,sessID): 
    6667 
     
    7677        return  
    7778 
    78     # op: <ZSI.wstools.WSDLTools.Message instance at 0x40778b2c> 
     79    # op: <ZSI.wstools.WSDLTools.Message instance at 0x40778c2c> 
    7980    def getAttCert(self, userCert,sessID,attAuthorityURI,attAuthorityCert,reqRole,mapFromTrustedHosts,rtnExtAttCertList,extAttCert,extTrustedHost): 
    8081 
     
    100101        return attCert,msg,extAttCertOut 
    101102 
    102     # op: <ZSI.wstools.WSDLTools.Message instance at 0x40778cac> 
     103    # op: <ZSI.wstools.WSDLTools.Message instance at 0x40778dac> 
    103104    def getX509Cert(self): 
    104105 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services_types.py

    r3024 r3044  
    4444        def __init__(self, **kw): 
    4545            ns = ns0.getSessionStatusResponse_Dec.schema 
    46             TClist = [] 
     46            TClist = [ZSI.TC.Boolean(pname="isAlive", aname="_isAlive", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
    4747            kw["pname"] = ("urn:ndg:security:sessionMgr","getSessionStatusResponse") 
    4848            kw["aname"] = "_getSessionStatusResponse" 
     
    5454                def __init__(self): 
    5555                    # pyclass 
     56                    self._isAlive = None 
    5657                    return 
    5758            Holder.__name__ = "getSessionStatusResponse_Holder" 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/__init__.py

    r2954 r3044  
    409409        # Make connection 
    410410        self.__srv.disconnect(userCert, sessID) 
    411     
     411     
     412         
     413    #_________________________________________________________________________    
     414    def getSessionStatus(self, userDN=None, sessID=None): 
     415        """Check for the existence of a session with a given 
     416        session ID / user certificate Distinguished Name 
     417         
     418        disconnect([sessID=id]|[userDN=dn]) 
     419         
     420        @type userCert: string                  
     421        @param userCert: user's certificate used to identifier which session 
     422        to disconnect.  This arg is not needed if the message is signed with 
     423        the user cert or if sessID is set.   
     424                                
     425        @type sessID: string 
     426        @param sessID: session ID.  Input this as an alternative to userCert 
     427        This arg is not needed if the message is signed with the user cert or  
     428        if userCert keyword is.""" 
     429         
     430        if sessID and userDN: 
     431            raise SessionMgrClientError, \ 
     432                            'Only "SessID" or "userDN" keywords may be set' 
     433 
     434        # Make connection 
     435        return self.__srv.getSessionStatus(userDN, sessID) 
     436 
    412437     
    413438    #_________________________________________________________________________  
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/SessionMgr_services_server.py

    r3024 r3044  
    2727      <xsd:element name=\"getSessionStatusResponse\"> 
    2828        <xsd:complexType> 
     29          <xsd:sequence> 
    2930                    <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"isAlive\" type=\"xsd:boolean\"/> 
     31                  </xsd:sequence> 
    3032        </xsd:complexType> 
    3133      </xsd:element> 
     
    258260 
    259261        result = getSessionStatusOutputMsg() 
     262        # If we have an implementation object, copy the result  
     263        if hasattr(self,'impl'): 
     264            result._isAlive = parameters 
    260265        return self.request, result 
    261266 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/conf/sessionMgr.tac

    r3041 r3044  
    124124 
    125125        self.sm.deleteUserSession(sessID=sessID, proxyCert=userCert) 
     126        return request, response 
     127 
     128 
     129    def soap_getSessionStatus(self, ps, **kw): 
     130        '''Check for existence of a session with given session ID or user 
     131        Distinguished Name 
     132         
     133        @type ps: ZSI ParsedSoap 
     134        @param ps: client SOAP message 
     135        @rtype: tuple 
     136        @return: request and response objects''' 
     137 
     138        if self.__debug: 
     139                import pdb 
     140                pdb.set_trace() 
     141                 
     142        request, response = SessionMgrService.soap_getSessionStatus(self, ps) 
     143         
     144        response.IsAlive = self.sm.getSessionStatus(userDN=request.UserDN, 
     145                                                                                            sessID=request.SessID) 
     146                          
    126147        return request, response 
    127148 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/sessionMgr/test.py

    r3041 r3044  
    77""" 
    88__author__ = "P J Kershaw" 
    9 __date__ = "23/02/06" 
     9__date__ = "20/11/07" 
    1010__copyright__ = "(C) 2007 STFC & NERC" 
    1111__license__ = \ 
     
    1313License, version 1.0 or later.""" 
    1414__contact__ = "P.J.Kershaw@rl.ac.uk" 
    15 __revision__ = '$Id: SessionMgrTest.py 2909 2007-09-28 14:22:21Z pjkersha $' 
     15__revision__ = '$Id$' 
    1616 
    1717import unittest 
     
    2121from ndg.security.common.X509 import X509CertParse 
    2222from ndg.security.server.SessionMgr import * 
    23      
    2423 
    2524 
     
    5251        """test1Connect: make a new session""" 
    5352         
     53        print "\n\t" + self.test1Connect.__doc__ 
     54         
    5455        if SessionMgrTestCase.test2Passphrase is None: 
    5556            SessionMgrTestCase.test2Passphrase = \ 
     
    7071    def test2GetSessionStatus(self): 
    7172        """test2GetSessionStatus: check a session is alive""" 
     73        print "\n\t" + self.test2GetSessionStatus.__doc__ 
     74         
    7275        self.test1Connect() 
    7376        assert self.sm.getSessionStatus(sessID=self.sessID), "Session is dead" 
     
    8386        sessID should be None""" 
    8487 
     88        print "\n\t" + self.test3ConnectNoCreateServerSess.__doc__ 
     89         
    8590        if SessionMgrTestCase.test3Passphrase is None: 
    8691            SessionMgrTestCase.test3Passphrase = \ 
     
    136141        self.test1Connect() 
    137142         
    138         attCert = self.sm.getAttCert(\ 
     143        attCert, errMsg, extAttCertList = self.sm.getAttCert(\ 
    139144            sessID=self.sessID,  
    140145            aaURI=self.cfg.get('test6GetAttCertUsingSessID', 'aauri')) 
    141          
     146        if errMsg: 
     147            self.fail(errMsg) 
     148             
    142149        print "Attribute Certificate:\n%s" % attCert  
    143150        attCert.filePath = \ 
    144151            self.cfg.get('test6GetAttCertUsingSessID', 'acoutfilepath')  
    145152        attCert.write() 
     153         
     154        return self.sm 
    146155 
    147156 
     
    156165        aaURI = self.cfg.get('test6aGetAttCertRefusedUsingSessID', 'aauri') 
    157166         
    158         attCert, errMsg, e.extAttCertList = self.sm.getAttCert(sessID=self.sessID,  
     167        attCert, errMsg, extAttCertList = self.sm.getAttCert(sessID=self.sessID,  
    159168                                         aaURI=aaURI, 
    160169                                         mapFromTrustedHosts=False) 
     
    173182        self.test1Connect() 
    174183         
     184        # Attribute Certificate cached in test 6 can be used to get a mapped 
     185        # AC for this test ... 
     186        self.sm = self.test6GetAttCertUsingSessID() 
     187 
    175188        aaURI = self.cfg.get('test6bGetMappedAttCertUsingSessID', 'aauri') 
    176189         
    177         attCert=self.sm.getAttCert(sessID=self.sessID,attAuthorityURI=aaURI) 
    178          
     190        attCert, errMsg, extAttCertList=self.sm.getAttCert(sessID=self.sessID, 
     191                                                   aaURI=aaURI, 
     192                                                   mapFromTrustedHosts=True) 
     193        if errMsg: 
     194            self.fail(errMsg) 
     195             
    179196        print "Attribute Certificate:\n%s" % attCert   
    180197 
     
    196213        extAttCert = open(extACFilePath).read() 
    197214         
    198         attCert = self.sm.getAttCert(sessID=self.sessID,  
    199                                        attAuthorityURI=aaURI, 
     215        attCert, errMsg, extAttCertList = self.sm.getAttCert(sessID=self.sessID,  
     216                                       aaURI=aaURI, 
    200217                                       extAttCertList=[extAttCert]) 
     218        if errMsg: 
     219            self.fail(errMsg) 
    201220           
    202221        print "Attribute Certificate:\n%s" % attCert   
     
    209228        self.test1Connect() 
    210229 
    211         self.sm.signatureHandler.reqBinSecTokValType = 'X509PKIPathv1' 
    212         self.sm.signatureHandler.signingPriKey = self.proxyPriKey         
    213         self.sm.signatureHandler.signingCertChain = (self.userCert, 
    214                                                        self.proxyCert) 
    215          
    216230        # Request an attribute certificate from an Attribute Authority  
    217231        # using the proxyCert returned from connect() 
    218232         
    219233        aaURI = self.cfg.get('test7GetAttCertUsingProxyCert', 'aauri') 
    220         attCert = self.sm.getAttCert(attAuthorityURI=aaURI) 
     234        attCert, errMsg, extAttCertList = self.sm.getAttCert(\ 
     235                                     userCert=self.proxyCert, aaURI=aaURI) 
     236        if errMsg: 
     237            self.fail(errMsg) 
    221238           
    222239        print "Attribute Certificate:\n%s" % attCert   
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/sessionMgrClient/SessionMgrClientTest.py

    r2909 r3044  
    129129         
    130130 
    131     def test2Connect(self): 
    132         """test2Connect: Connect as if acting as a browser client -  
     131    def test1Connect(self): 
     132        """test1Connect: Connect as if acting as a browser client -  
    133133        a session ID is returned""" 
    134134         
    135135        if self.__class__.test2Passphrase is None: 
    136136            self.__class__.test2Passphrase = \ 
    137                                     self.cfg['test2Connect'].get('passphrase') 
     137                                    self.cfg['test1Connect'].get('passphrase') 
    138138         
    139139        if not self.__class__.test2Passphrase: 
     
    142142 
    143143        self.proxyCert, self.proxyPriKey, self.userCert, self.sessID = \ 
    144             self.clnt.connect(self.cfg['test2Connect']['username'],  
     144            self.clnt.connect(self.cfg['test1Connect']['username'],  
    145145                              passphrase=self.__class__.test2Passphrase) 
    146146 
    147147        print "User '%s' connected to Session Manager:\n%s" % \ 
    148             (self.cfg['test2Connect']['username'], self.sessID) 
    149              
     148            (self.cfg['test1Connect']['username'], self.sessID) 
     149             
     150             
     151    def test2GetSessionStatus(self): 
     152        """test2GetSessionStatus: check a session is alive""" 
     153        print "\n\t" + self.test2GetSessionStatus.__doc__ 
     154         
     155        self.test1Connect() 
     156        assert self.clnt.getSessionStatus(sessID=self.sessID), \ 
     157                "Session is dead" 
     158                 
     159        print "User connected to Session Manager with sessID=%s" % self.sessID 
     160 
     161        assert not self.clnt.getSessionStatus(sessID='abc'), \ 
     162            "sessID=abc shouldn't exist!" 
     163             
     164        print "CORRECT: sessID=abc doesn't exist" 
     165 
    150166 
    151167    def test3ConnectNoCreateServerSess(self): 
     
    180196         
    181197        print "\n\t" + self.test4DisconnectUsingSessID.__doc__ 
    182         self.test2Connect() 
     198        self.test1Connect() 
    183199         
    184200        self.clnt.disconnect(sessID=self.sessID) 
     
    192208         
    193209        print "\n\t" + self.test5DisconnectUsingProxyCert.__doc__ 
    194         self.test2Connect() 
     210        self.test1Connect() 
    195211         
    196212        # Use proxy cert / private key just obtained from connect call for 
     
    212228 
    213229        print "\n\t" + self.test6GetAttCertUsingSessID.__doc__         
    214         self.test2Connect() 
     230        self.test1Connect() 
    215231         
    216232        attCert = self.clnt.getAttCert(\ 
     
    230246 
    231247        print "\n\t" + self.test6aGetAttCertRefusedUsingSessID.__doc__         
    232         self.test2Connect() 
     248        self.test1Connect() 
    233249         
    234250        aaURI = self.cfg['test6aGetAttCertRefusedUsingSessID']['aauri'] 
     
    250266 
    251267        print "\n\t" + self.test6bGetMappedAttCertUsingSessID.__doc__         
    252         self.test2Connect() 
     268        self.test1Connect() 
    253269         
    254270        aaURI = self.cfg['test6bGetMappedAttCertUsingSessID']['aauri'] 
     
    265281        print "\n\t" + \ 
    266282            self.test6cGetAttCertWithExtAttCertListUsingSessID.__doc__         
    267         self.test2Connect() 
     283        self.test1Connect() 
    268284         
    269285        aaURI = \ 
     
    286302        a proxy cert as authentication credential""" 
    287303        print "\n\t" + self.test7GetAttCertUsingProxyCert.__doc__ 
    288         self.test2Connect() 
     304        self.test1Connect() 
    289305 
    290306        self.clnt.signatureHandler.reqBinSecTokValType = 'X509PKIPathv1' 
     
    315331        map = map(SessionMgrClientTestCase, 
    316332                  ( 
    317                     "test1AddUser", 
    318                     "test2Connect", 
     333                    "test1Connect", 
     334                    "test2GetSessionStatus", 
    319335                    "test3ConnectNoCreateServerSess", 
    320336                    "test4DisconnectUsingSessID", 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/sessionMgrClient/sessionMgrClientTest.cfg

    r3028 r3044  
    1010# $Id:$ 
    1111[setUp] 
    12 smuri = https://localhost/SessionManager 
    13 #smuri = https://localhost:5700/SessionManager 
     12#smuri = https://localhost/SessionManager 
     13smuri = https://localhost:5700/SessionManager 
    1414#smuri = https://glue.badc.rl.ac.uk:50000/SessionManager 
    1515 
     
    4848cacertfilepathlist = ./cacert.pem 
    4949 
    50 [test1AddUser] 
    51 username = BugsBunny  
    52 # Comment out to prompt for on tty. 
    53 #passphrase = 
    54   
    55 [test2Connect]          
     50[test1Connect]          
    5651#username = lawrence 
    5752username = raphaelTest 
     
    6257username = raphaelTest 
    6358#username = gabriel 
    64 passphrase =  
     59passphrase = testpassword 
    6560 
    6661[test6GetAttCertUsingSessID] 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/sessionMgrClient/sessionMgrProperties.xml

    r3028 r3044  
    22<sessMgrProp> 
    33    <portNum>5700</portNum> 
    4     <useSSL></useSSL> <!-- leave blank to use http --> 
     4    <useSSL>Yes</useSSL> <!-- leave blank to use http --> 
    55    <!--<useSSL>Yes</useSSL>  leave blank to use http --> 
    66    <sslCertFile>$NDGSEC_SM_UNITTEST_DIR/sm-cert.pem</sslCertFile> 
  • TI12-security/trunk/python/www/html/sessionMgr.wsdl

    r3024 r3044  
    2323      <xsd:element name="getSessionStatusResponse"> 
    2424        <xsd:complexType> 
     25          <xsd:sequence> 
    2526                    <xsd:element name="isAlive" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> 
     27                  </xsd:sequence> 
    2628        </xsd:complexType> 
    2729      </xsd:element> 
Note: See TracChangeset for help on using the changeset viewer.