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

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@6052
Revision 6052, 5.1 KB checked in by pjkersha, 10 years ago (diff)

Updated MyProxy? Cert extension app for use with improved SAML Attribute Query interface class AttributeQuerySslSOAPBinding

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)
15
16import os
17from string import Template
18from cStringIO import StringIO
19
20from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
21from sqlalchemy.ext.declarative import declarative_base
22from sqlalchemy.orm import sessionmaker
23
24from ndg.security.test.unit import BaseTestCase
25from ndg.security.server.myproxy.certificate_extapp.saml_attribute_assertion \
26    import CertExtApp, CertExtConsoleApp
27
28
29class CertExtAppTestCase(BaseTestCase):
30    THIS_DIR = os.path.dirname(__file__)
31    OPENID_SQL_QUERY = ("select openid from users where username = "
32                        "'${username}'") 
33    INI_FILEPATH = os.path.join(THIS_DIR, 'config.ini')
34   
35    def __init__(self, *arg, **kw):
36        super(CertExtAppTestCase, self).__init__(*arg, **kw)           
37        self.startSiteAAttributeAuthority(withSSL=True, 
38                port=CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_PORTNUM)
39        self.initDb()
40       
41    def test01DbQuery(self):
42        myProxyCertExtApp = CertExtApp()
43        myProxyCertExtApp.connectionString = \
44                    CertExtAppTestCase.DB_CONNECTION_STR
45                   
46        myProxyCertExtApp.openIdSqlQuery = CertExtAppTestCase.OPENID_SQL_QUERY
47       
48        openid = myProxyCertExtApp.queryOpenId(CertExtAppTestCase.USERNAME)
49        self.assert_(openid == CertExtAppTestCase.OPENID_URI)
50       
51    def test02AttributeQuery(self):
52        myProxyCertExtApp = CertExtApp()
53        myProxyCertExtApp.attributeQuery.issuerDN = \
54                                        "/CN=Authorisation Service/O=Site A"
55        myProxyCertExtApp.attributeQuery.subjectID = \
56                                        CertExtAppTestCase.OPENID_URI
57                                       
58        myProxyCertExtApp.attributeQuery.sslCACertDir = \
59                                                CertExtAppTestCase.CACERT_DIR
60        myProxyCertExtApp.attributeQuery.sslCertFilePath = \
61                        os.path.join(CertExtAppTestCase.PKI_DIR, 'test.crt')
62        myProxyCertExtApp.attributeQuery.sslPriKeyFilePath = \
63                        os.path.join(CertExtAppTestCase.PKI_DIR, 'test.key')
64        myProxyCertExtApp.attributeQuery.sslValidDNs = \
65                                                CertExtAppTestCase.SSL_CERT_DN
66                               
67        response = myProxyCertExtApp.attributeQuery.send(
68                uri=CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_SAML_URI)
69        print(response)
70       
71    def test03End2End(self):
72        myProxyCertExtApp = CertExtApp()
73       
74        myProxyCertExtApp.connectionString = \
75                                        CertExtAppTestCase.DB_CONNECTION_STR
76                   
77        myProxyCertExtApp.openIdSqlQuery = ("select openid from users where "
78                                            "username = '%s'" %
79                                            CertExtAppTestCase.USERNAME)
80
81        myProxyCertExtApp.attributeAuthorityURI = \
82                    CertExtAppTestCase.SITEA_SSL_ATTRIBUTEAUTHORITY_SAML_URI
83        myProxyCertExtApp.attributeQuery.issuerDN = \
84                            "/CN=Authorisation Service/O=Site A"
85                                       
86        myProxyCertExtApp.attributeQuery.sslCACertDir = \
87                                                CertExtAppTestCase.CACERT_DIR
88        myProxyCertExtApp.attributeQuery.sslCertFilePath = \
89                        os.path.join(CertExtAppTestCase.PKI_DIR, 'test.crt')
90        myProxyCertExtApp.attributeQuery.sslPriKeyFilePath = \
91                        os.path.join(CertExtAppTestCase.PKI_DIR, 'test.key')
92        myProxyCertExtApp.attributeQuery.sslValidDNs = \
93                                                CertExtAppTestCase.SSL_CERT_DN
94       
95        assertion = myProxyCertExtApp(CertExtAppTestCase.USERNAME)
96        self.assert_(assertion)
97        print(assertion)
98
99    def test04FromConfigFile(self):
100        myProxyCertExtApp = CertExtApp.fromConfigFile(
101                                            CertExtAppTestCase.INI_FILEPATH)
102        assertion = myProxyCertExtApp(CertExtAppTestCase.USERNAME)
103        self.assert_(assertion)
104        print(assertion)
105
106    def test05ConsoleApp(self):
107        import sys
108        sys.argv = [
109            None, 
110            "-f", CertExtAppTestCase.INI_FILEPATH, 
111            "-u", CertExtAppTestCase.USERNAME
112        ]
113        try:
114            stdOut = sys.stdout
115            sys.stdout = StringIO()
116           
117            CertExtConsoleApp.run()
118            output = sys.stdout.getvalue()
119        finally:
120            sys.stdout = stdOut
121       
122        self.assert_(output)       
123        print(output)
124       
Note: See TracBrowser for help on using the repository browser.