source: TI12-security/trunk/python/ndg_security_test/ndg/security/test/unit/myproxy/certificate_extapp/test_saml_attribute_assertion.py @ 6051

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/python/ndg_security_test/ndg/security/test/unit/myproxy/certificate_extapp/test_saml_attribute_assertion.py@6051
Revision 6051, 4.2 KB checked in by pjkersha, 10 years ago (diff)

Refactoring MyProxy? Cert Extension app following updates to the SAML Attribute Query client interface

Line 
1#!/usr/bin/env python
2"""Unit tests for NDG Security MyProxy Extensions callout for adding SAML
3Attribute Assertions to issued X.509 Certificates
4
5NERC DataGrid Project
6"""
7__author__ = "P J Kershaw"
8__date__ = "29/10/09"
9__copyright__ = "(C) 2009 Science and Technology Facilities Council"
10__license__ = "BSD - see LICENSE file in top-level directory"
11__contact__ = "Philip.Kershaw@stfc.ac.uk"
12__revision__ = '$Id:$'
13import logging
14logging.basicConfig(level=logging.DEBUG)
15import os
16from string import Template
17from cStringIO import StringIO
18
19from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
20from sqlalchemy.ext.declarative import declarative_base
21from sqlalchemy.orm import sessionmaker
22
23from ndg.security.test.unit import BaseTestCase
24from ndg.security.server.myproxy.certificate_extapp.saml_attribute_assertion \
25    import CertExtApp, CertExtConsoleApp
26
27
28class CertExtAppTestCase(BaseTestCase):
29    THIS_DIR = os.path.dirname(__file__)
30    OPENID_TMPL = "https://openid.localhost/${userIdentifier}"
31    OPENID = Template(OPENID_TMPL).substitute(
32                        {'userIdentifier': BaseTestCase.OPENID_IDENTIFIER})
33    OPENID_SQL_QUERY = ("select openid from users where username "
34                        "= '${username}'") 
35    SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM = 5443
36    SITEA_SSL_ATTRIBUTEAUTHORITY_URI = ('https://localhost:%d/AttributeAuthority'
37                                        '/saml' % 
38                                        SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM)
39    INI_FILEPATH = os.path.join(THIS_DIR, 'config.ini')
40   
41    def __init__(self, *arg, **kw):
42        super(CertExtAppTestCase, self).__init__(*arg, **kw)           
43        self.startSiteAAttributeAuthority(withSSL=True, 
44                    port=CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM)
45        self.initDb()
46       
47    def test01DbQuery(self):
48        myProxyCertExtApp = CertExtApp()
49        myProxyCertExtApp.connectionString = \
50                    CertExtAppTestCase.DB_CONNECTION_STR
51                   
52        myProxyCertExtApp.openIdSqlQuery = CertExtAppTestCase.OPENID_SQL_QUERY
53       
54        openid = myProxyCertExtApp.queryOpenId(CertExtAppTestCase.USERNAME)
55        self.assert_(openid == CertExtAppTestCase.OPENID_URI)
56       
57    def test02AttributeQuery(self):
58        myProxyCertExtApp = CertExtApp()
59        myProxyCertExtApp.attributeQuery.issuerDN = "/O=Site A/CN=Authorisation Service"
60        myProxyCertExtApp.attributeQuery.subjectID = CertExtAppTestCase.OPENID
61                               
62        response = myProxyCertExtApp.attributeQuery.send(
63                    uri=CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_URI)
64        print(response)
65       
66    def test03End2End(self):
67        myProxyCertExtApp = CertExtApp()
68       
69        myProxyCertExtApp.connectionString = \
70                                        CertExtAppTestCase.DB_CONNECTION_STR
71                   
72        myProxyCertExtApp.openIdSqlQuery = ("select openid from users where "
73                                            "username = '%s'" %
74                                            CertExtAppTestCase.USERNAME)
75
76        myProxyCertExtApp.attributeAuthorityURI = \
77                            CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_URI
78        myProxyCertExtApp.attributeQuery.issuerDN = \
79            "/O=Site A/CN=Authorisation Service"
80       
81        assertion = myProxyCertExtApp(CertExtAppTestCase.USERNAME)
82        self.assert_(assertion)
83        print(assertion)
84
85    def test04FromConfigFile(self):
86        myProxyCertExtApp = CertExtApp.fromConfigFile(
87                                            CertExtAppTestCase.INI_FILEPATH)
88        assertion = myProxyCertExtApp(CertExtAppTestCase.USERNAME)
89        self.assert_(assertion)
90        print(assertion)
91
92    def test05ConsoleApp(self):
93        import sys
94        sys.argv = [
95            None, 
96            "-f", CertExtAppTestCase.INI_FILEPATH, 
97            "-u", CertExtAppTestCase.USERNAME
98        ]
99        try:
100            stdOut = sys.stdout
101            sys.stdout = StringIO()
102           
103            CertExtConsoleApp.run()
104            output = sys.stdout.getvalue()
105        finally:
106            sys.stdout = stdOut
107       
108        self.assert_(output)       
109        print(output)
110       
Note: See TracBrowser for help on using the repository browser.