Ignore:
Timestamp:
28/10/10 13:24:59 (10 years ago)
Author:
pjkersha
Message:

Added SOAPFault handling for ndg.soap package. Needs integration into ndg.saml.saml2.binding.soap.server.wsgi.queryinterface to enable SAML query interface to do better error reporting.

Location:
TI12-security/trunk/ndg_saml
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/ndg_saml

    • Property svn:ignore
      •  

        old new  
        22dist 
        33ndg_saml.egg-info 
         4ndg_saml_env.sh 
  • TI12-security/trunk/ndg_saml/ndg/soap/test/test_soap.py

    r7560 r7662  
    2121from urllib2 import HTTPHandler, URLError 
    2222 
    23 from ndg.soap.etree import SOAPEnvelope 
     23from ndg.soap import SOAPFaultBase 
     24from ndg.soap.etree import SOAPEnvelope, SOAPFault, SOAPFaultException 
    2425from ndg.soap.client import UrlLib2SOAPClient, UrlLib2SOAPRequest 
    2526from ndg.soap.test import PasteDeployAppServer 
     
    4647     
    4748class SOAPTestCase(unittest.TestCase): 
     49    EG_SOAPFAULT_CODE = "%s:%s" % (SOAPFaultBase.DEFAULT_ELEMENT_NS_PREFIX,  
     50                                   "MustUnderstand") 
     51    EG_SOAPFAULT_STRING = "Can't process element X set with mustUnderstand" 
     52         
     53    def test01Envelope(self): 
     54        envelope = SOAPEnvelope() 
     55        envelope.create() 
     56        soap = envelope.serialize() 
     57         
     58        self.assert_(len(soap) > 0) 
     59        self.assert_("Envelope" in soap) 
     60        self.assert_("Body" in soap) 
     61        self.assert_("Header" in soap) 
     62         
     63        print(envelope.prettyPrint()) 
     64        stream = StringIO() 
     65        stream.write(soap) 
     66        stream.seek(0) 
     67         
     68        envelope2 = SOAPEnvelope() 
     69        envelope2.parse(stream) 
     70        soap2 = envelope2.serialize() 
     71        self.assert_(soap2 == soap) 
     72 
     73    def test02CreateSOAPFaultBase(self): 
     74         
     75        fault = SOAPFaultBase(self.__class__.EG_SOAPFAULT_STRING,  
     76                              self.__class__.EG_SOAPFAULT_CODE) 
     77         
     78        self.assert_(fault.faultCode == self.__class__.EG_SOAPFAULT_CODE) 
     79        self.assert_(fault.faultString == self.__class__.EG_SOAPFAULT_STRING) 
     80      
     81    def _createSOAPFault(self): 
     82        fault = SOAPFault(self.__class__.EG_SOAPFAULT_STRING,  
     83                          self.__class__.EG_SOAPFAULT_CODE) 
     84        fault.create() 
     85        return fault    
     86     
     87    def test03SerialiseSOAPFault(self): 
     88        # Use ElementTree implementation 
     89        fault = self._createSOAPFault() 
     90        faultStr = fault.serialize() 
     91        print(faultStr) 
     92        self.assert_(self.__class__.EG_SOAPFAULT_STRING in faultStr) 
     93 
     94    def test04ParseSOAPFault(self): 
     95        fault = self._createSOAPFault() 
     96        faultStr = fault.serialize() 
     97        stream = StringIO() 
     98        stream.write(faultStr) 
     99        stream.seek(0) 
     100         
     101        fault2 = SOAPFault() 
     102        fault2.parse(stream) 
     103        self.assert_(fault2.faultCode == fault.faultCode) 
     104        self.assert_(fault2.faultString == fault.faultString) 
     105     
     106    def test05CreateSOAPFaultException(self): 
     107        try: 
     108            raise SOAPFaultException("bad request", SOAPFault.CLIENT_FAULT_CODE) 
     109         
     110        except SOAPFaultException, e: 
     111            self.assert_(e.fault.faultString == "bad request") 
     112            self.assert_(SOAPFault.CLIENT_FAULT_CODE in e.fault.faultCode) 
     113            e.fault.create() 
     114            self.assert_("bad request" in e.fault.serialize()) 
     115            self.assert_(SOAPFault.CLIENT_FAULT_CODE in e.fault.serialize()) 
     116            return 
     117         
     118        self.fail("Expecting SOAPFaultException raised") 
     119         
     120    def test06CreateSOAPFaultResponse(self): 
     121        # Create full SOAP Response containing a SOAP Fault 
     122        envelope = SOAPEnvelope() 
     123        envelope.body.fault = self._createSOAPFault() 
     124        envelope.create() 
     125        soap = envelope.serialize() 
     126         
     127        self.assert_(len(soap) > 0) 
     128        self.assert_("Envelope" in soap) 
     129        self.assert_("Body" in soap) 
     130        self.assert_("Header" in soap) 
     131        self.assert_("Fault" in soap) 
     132         
     133        print(envelope.prettyPrint()) 
     134        stream = StringIO() 
     135        stream.write(soap) 
     136        stream.seek(0) 
     137         
     138        envelope2 = SOAPEnvelope() 
     139        envelope2.parse(stream) 
     140        soap2 = envelope2.serialize() 
     141        self.assert_(soap2 == soap) 
     142             
     143     
     144class SOAPServiceTestCase(unittest.TestCase): 
    48145    SOAP_SERVICE_PORTNUM = 10080 
    49146    ENDPOINT = 'http://localhost:%d/soap' % SOAP_SERVICE_PORTNUM 
    50     THIS_DIR = path.abspath(path.dirname(__file__)) 
     147    THIS_DIR = path.abspath(path.dirname(__file__))    
    51148     
    52149    def __init__(self, *args, **kwargs): 
     
    58155        self.app = paste.fixture.TestApp(wsgiApp) 
    59156          
    60         super(SOAPTestCase, self).__init__(*args, **kwargs) 
    61          
    62     def test01Envelope(self): 
    63         envelope = SOAPEnvelope() 
    64         envelope.create() 
    65         soap = envelope.serialize() 
    66          
    67         self.assert_(len(soap) > 0) 
    68         self.assert_("Envelope" in soap) 
    69         self.assert_("Body" in soap) 
    70         self.assert_("Header" in soap) 
    71          
    72         print(envelope.prettyPrint()) 
    73         stream = StringIO() 
    74         stream.write(soap) 
    75         stream.seek(0) 
    76          
    77         envelope2 = SOAPEnvelope() 
    78         envelope2.parse(stream) 
    79         soap2 = envelope2.serialize() 
    80         self.assert_(soap2 == soap) 
    81  
    82     def test02SendRequest(self): 
     157        super(SOAPServiceTestCase, self).__init__(*args, **kwargs) 
     158              
     159    def test01SendRequest(self): 
    83160        requestEnvelope = SOAPEnvelope() 
    84161        requestEnvelope.create() 
     
    92169        print(response.body) 
    93170 
    94     def test03Urllib2Client(self): 
     171    def test02Urllib2Client(self): 
    95172         
    96173        # Paster based service is threaded from this call 
    97174        self.addService(app=SOAPBindingMiddleware(),  
    98                         port=SOAPTestCase.SOAP_SERVICE_PORTNUM) 
     175                        port=self.__class__.SOAP_SERVICE_PORTNUM) 
    99176         
    100177        client = UrlLib2SOAPClient() 
     
    104181         
    105182        request = UrlLib2SOAPRequest() 
    106         request.url = SOAPTestCase.ENDPOINT 
     183        request.url = self.__class__.ENDPOINT 
    107184        request.envelope = SOAPEnvelope() 
    108185        request.envelope.create() 
Note: See TracChangeset for help on using the changeset viewer.