source: TI12-security/trunk/python/Tests/SecurityClientTest.py @ 1036

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/python/Tests/SecurityClientTest.py@1036
Revision 1036, 8.8 KB checked in by pjkersha, 13 years ago (diff)

Tests/SecurityClientTest?.py: made local vars part of class for ease configuring tests. Fixed bugs in some test cases.

  • Property svn:executable set to *
Line 
1#!/usr/bin/env python
2
3"""Test harness for NDG Security client - makes requests for authentication
4and authorisation
5
6NERC Data Grid Project
7
8P J Kershaw 23/02/06
9
10(Renamed from SessionClientTest.py 27/0/4/06)
11
12Copyright (C) 2006 CCLRC & NERC
13
14This software may be distributed under the terms of the Q Public License,
15version 1.0 or later.
16"""
17import unittest
18import os
19
20from Cookie import SimpleCookie
21
22from NDG.SecurityClient import *
23
24
25class SecurityClientTestCase(unittest.TestCase):
26   
27    def setUp(self):
28        try:
29            # Session Manager WSDL
30            self.smWSDL = 'http://glue.badc.rl.ac.uk/sessionMgr.wsdl'
31   
32            # Public key of session manager used to encrypt requests
33            # If no public key is set, it will be retrieved using the
34            # getPubKey WS method
35            smPubKeyFilePath = None
36
37            self.__clntPriKeyPwd = open("./tmp2").read().strip()
38
39            clntPubKeyFilePath = "./Junk-cert.pem"
40            clntPriKeyFilePath = "./Junk-key.pem"
41            traceFile = None#sys.stderr
42           
43            # Initialise the Session Manager client connection
44            # Omit traceFile keyword to leave out SOAP debug info
45            self.sessClnt = SessionClient(smWSDL=self.smWSDL,
46                                        smPubKeyFilePath=smPubKeyFilePath,
47                                        clntPubKeyFilePath=clntPubKeyFilePath,
48                                        clntPriKeyFilePath=clntPriKeyFilePath,
49                                        traceFile=traceFile) 
50
51            # Attribute Authority client tests
52            self.aaWSDL = 'http://glue.badc.rl.ac.uk/attAuthority.wsdl'
53            aaPubKeyFilePath = None
54           
55            self.aaClnt = AttAuthorityClient(aaWSDL=self.aaWSDL,
56                                        aaPubKeyFilePath=aaPubKeyFilePath,
57                                        clntPubKeyFilePath=clntPubKeyFilePath,
58                                        clntPriKeyFilePath=clntPriKeyFilePath,
59                                        traceFile=traceFile) 
60            self.sessCookie = None
61            self.proxyCert = None
62            self.newUserName = 'testUser'
63            self.userName = 'lawrence'
64        except Exception, e:
65            self.fail(str(e))
66           
67           
68    def tearDown(self):
69        pass
70
71
72    def testAddUser(self):
73       
74        try:
75            # Uncomment to add a new user ID to the MyProxy repository
76            # Note the pass-phrase is read from the file tmp.  To pass
77            # explicitly as a string use the 'pPhrase' keyword instead
78            self.sessClnt.addUser(self.newUserName, 
79                                  pPhraseFilePath="./tmp",
80                                  clntPriKeyPwd=self.__clntPriKeyPwd)
81            print "Added user '%s'" % self.newUserName
82           
83        except Exception, e:
84            self.fail(str(e))
85       
86
87    def testCookieConnect(self):
88       
89#        import pdb
90#        pdb.set_trace()
91        try:
92            # Connect as if acting as a browser client - a cookie is returned
93            sSessCookie = self.sessClnt.connect(self.userName, 
94                                        pPhraseFilePath="./tmp",
95                                        clntPriKeyPwd=self.__clntPriKeyPwd)
96            self.sessCookie = SimpleCookie(sSessCookie)
97            print "User '%s' connected to Session Manager:\n%s" % \
98                (self.userName, sSessCookie)
99
100        except Exception, e:
101            self.fail(str(e))
102           
103
104    def testProxyCertConnect(self):
105       
106        try:
107            # Connect as a command line client - a proxyCert is returned       
108            self.proxyCert = self.sessClnt.connect(self.userName, 
109                                          pPhraseFilePath="./tmp",
110                                          createServerSess=True,
111                                          getCookie=False,
112                                          clntPriKeyPwd=self.__clntPriKeyPwd)
113            print "User '%s' connected to Session Manager:\n%s" % \
114                (self.userName, self.proxyCert)
115
116        except Exception, e:
117            self.fail(str(e))
118
119
120    def testCookieReqAuthorisation(self):
121        try:
122            # Request an attribute certificate from an Attribute Authority
123            # using the cookie returned from connect()
124            self.testCookieConnect()
125            authResp = self.sessClnt.reqAuthorisation(\
126                        sessID=self.sessCookie['NDG-ID1'].value, 
127                        aaWSDL=self.aaWSDL,
128                        encrSessMgrWSDLuri=self.sessCookie['NDG-ID2'].value,
129                        clntPriKeyPwd=self.__clntPriKeyPwd)
130                                                                 
131            # The authorisation response is returned as an object which
132            # behaves like a python dictionary.  See
133            # NDG.SessionMgrIO.AuthorisationResp
134            if 'errMsg' in authResp:
135                print "Authorisation failed for user %s" % authResp['errMsg']           
136            else:
137                print "User authorised"
138               
139            print authResp
140
141        except Exception, e:
142            self.fail(str(e))
143
144
145    def testProxyCertReqAuthorisation(self):
146        try:
147            self.testProxyCertConnect()
148           
149            # Request an attribute certificate from an Attribute Authority
150            # using the proxyCert returned from connect()
151            authResp = self.sessClnt.reqAuthorisation(\
152                                         proxyCert=self.proxyCert,
153                                         aaWSDL=self.aaWSDL,
154                                         clntPriKeyPwd=self.__clntPriKeyPwd)
155                                                 
156            # The authorisation response is returned as an object which
157            # behaves like a python dictionary.  See
158            # NDG.SessionMgrIO.AuthorisationResp
159            if 'errMsg' in authResp:
160                print "Authorisation failed for user %s" % authResp['errMsg']           
161            else:
162                print "User authorised"
163               
164            print authResp
165
166        except Exception, e:
167            self.fail(str(e))
168
169
170    def testGetPubKey(self):
171        try:
172            # Request an attribute certificate from an Attribute Authority
173            # using the proxyCert returned from connect()
174            pubKey = self.sessClnt.getPubKey()
175                                                 
176            print "Public Key:\n" + pubKey
177
178        except Exception, e:
179            self.fail(str(e))
180           
181
182    def testAAgetTrustedHostInfo(self):
183        """Call Attribute Authority GetTrustedHostInfo"""
184       
185        import pdb
186        pdb.set_trace()
187        role = 'acsoe'
188        try:
189            trustedHosts = self.aaClnt.getTrustedHostInfo(
190                                       role=role,
191                                       clntPriKeyPwd=self.__clntPriKeyPwd)
192            print trustedHosts
193           
194        except Exception, e:
195            self.fail(str(e))
196           
197
198    def testAAgetTrustedHostInfoWithNoRoleSet(self):
199        """Call Attribute Authority GetTrustedHostInfo"""
200       
201        import pdb
202        pdb.set_trace()
203        try:
204            trustedHosts = self.aaClnt.getTrustedHostInfo(
205                                       clntPriKeyPwd=self.__clntPriKeyPwd)
206            print trustedHosts
207           
208        except Exception, e:
209            self.fail(str(e))
210           
211
212    def testAAReqAuthorisation(self):
213        """Call Attribute Authority authorisation request"""
214       
215        import pdb
216        pdb.set_trace()
217        try:
218            # Alternative means of getting proxy cert - from file
219            #self.proxyCert = open("./proxy.pem").read().strip()
220            self.testProxyCertConnect()
221            userAttCert = None
222           
223            ac = self.aaClnt.reqAuthorisation(
224                                       proxyCert=self.proxyCert,
225                                       userAttCert=userAttCert,
226                                       clntPriKeyPwd=self.__clntPriKeyPwd)
227            print ac
228           
229        except Exception, e:
230            self.fail(str(e))
231           
232           
233#_____________________________________________________________________________       
234class SecurityClientTestSuite(unittest.TestSuite):
235   
236    def __init__(self):
237        map = map(SecurityClientTestCase,
238                  (
239                    "testAddUser",
240                    "testConnect",
241                    "testReqAuthorisation",
242                    "testGetPubKey",
243                    "testAAgetTrustedHostInfo",
244                    "testAAReqAuthorisation",
245                  ))
246        unittest.TestSuite.__init__(self, map)
247           
248                                                   
249if __name__ == "__main__":
250    unittest.main()       
Note: See TracBrowser for help on using the repository browser.