Changeset 3438 for TI12-security


Ignore:
Timestamp:
15/02/08 16:33:46 (12 years ago)
Author:
pjkersha
Message:

Tested with new version of ElementTree from Fred Lundh. Added tests for WS-Security SOAP message C14N.

Location:
TI12-security/trunk/python/ndg.security.test/ndg/security/test/elementTreeC14n
Files:
11 added
2 deleted
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/elementTreeC14n/testC14n.py

    r3237 r3438  
    2121from StringIO import StringIO 
    2222 
     23from elementtree import ElementC14N as ETC14N 
    2324from elementtree import ElementTree as ET 
    2425 
     
    156157                        "Expecting element content to be preserved") 
    157158         
    158         sub = xml[xml.find('<a'), xml.find('</a>')] 
     159        sub = xml[xml.find('<a'):xml.find('</a>')] 
    159160        self.failIf('\n' in sub,  
    160161                    "Expecting removal of line breaks for 'a' element") 
     
    220221 
    221222    def test15CmpZSIc14n(self): 
    222         elem = ET.parse('./windows-ac.xml') 
    223         elem.write('./c14n-windows-ac.xml', method="c14n") 
    224         etC14n = open('./c14n-windows-ac.xml').read() 
     223        elem = ETC14N.parse('./windows-ac.xml') 
     224        ETC14N.write(elem, './et-c14n-ac.xml') 
    225225         
    226226        from xml.dom.ext.reader import PyExpat 
     
    229229         
    230230        zsiC14n = Canonicalize(dom) 
    231         open('./zsi-c14n-windows-ac.xml', 'w').write(zsiC14n) 
     231        etC14n = open('./et-c14n-ac.xml').read() 
     232        open('./zsi-c14n-ac.xml', 'w').write(zsiC14n) 
     233         
     234        etC14n = open('./et-c14n-ac.xml').read() 
     235 
    232236        self.failUnless(etC14n == zsiC14n, "ZSI C14N output differs") 
    233237         
     
    235239        from StringIO import StringIO 
    236240 
    237         elem = ET.parse('./windows-ac.xml') 
    238         etF = StringIO() 
    239         elem.write(etF, method="c14n") 
    240  
     241        elem = ETC14N.parse('./windows-ac.xml') 
     242        ETC14N.write(elem, './et-c14n-ac-2.xml') 
     243         
     244         
    241245        from lxml import etree as lxmlET 
    242246         
     
    244248        lxmlETf = StringIO() 
    245249        lxmlElem.write_c14n(lxmlETf) 
    246         open('./lxml-c14n-windows-ac.xml', 'w').write(lxmlETf.getvalue()) 
    247         self.failUnless(etF.getvalue() == lxmlETf.getvalue(), 
     250        open('./lxml-c14n-ac.xml', 'w').write(lxmlETf.getvalue()) 
     251         
     252        f1 = open('./et-c14n-ac-2.xml') 
     253        etC14n = f1.read() 
     254        f1.close() 
     255         
     256        self.failUnless(etC14n == lxmlETf.getvalue(), 
    248257                        "lxml C14N output differs") 
    249258         
    250259         
    251                                         
     260    def test17InclusiveC14nWithXPath(self): 
     261        '''Inclusive Canonicalization of portions of a SOAP message extracted  
     262        using XPath''' 
     263         
     264        # XPath 
     265        from xml.xpath.Context import Context 
     266        from xml import xpath 
     267         
     268        # PyExpat Parse 
     269        from xml.dom.ext.reader import PyExpat 
     270        reader = PyExpat.Reader() 
     271        dom = reader.fromStream(open('./soapGetAttCertResponse.xml')) 
     272        processorNss = \ 
     273        { 
     274            'wsu': \ 
     275"http://docs.oasis-open.orgwss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", 
     276        } 
     277     
     278        ctxt = Context(dom, processorNss=processorNss) 
     279        refNodes = xpath.Evaluate('//*[@wsu:Id]',  
     280                                  contextNode=dom,  
     281                                  context=ctxt) 
     282         
     283        # ElementTree - can't get find() to work - get elements 'manually' for  
     284        # now 
     285#        elem = ET.parse().getroot() 
     286#        binarySecurityToken = soapBody[0][0][0] 
     287#        soapBody = elem[1] 
     288        # TODO: but how to feed these into C14N?? 
     289         
     290        for refNode in refNodes: 
     291            # Get ref node and all it's children 
     292            refC14n = Canonicalize(refNode) 
     293 
     294            print "_"*80 
     295            print "Inclusive C14N %s:\n" % refNode.nodeName 
     296            print refC14n 
     297            open('soapGetAttCertResponse-%s-c14n.xml' % refNode.localName,  
     298                 'w').write(refC14n) 
     299         
     300         
     301    def test18ExclC14nWithXPath(self): 
     302        '''Exclusive C14N applied to portions of a SOAP message by extracting 
     303        using XPath''' 
     304        from xml.xpath.Context import Context 
     305        from xml import xpath 
     306        from xml.dom.ext.reader import PyExpat 
     307        reader = PyExpat.Reader() 
     308        dom = reader.fromStream(open('./soapGetAttCertResponse.xml')) 
     309        processorNss = \ 
     310        { 
     311            'wsu': \ 
     312"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", 
     313        } 
     314     
     315        ctxt = Context(dom, processorNss=processorNss) 
     316        refNodes = xpath.Evaluate('//*[@wsu:Id]',  
     317                                  contextNode=dom,  
     318                                  context=ctxt) 
     319        for refNode in refNodes: 
     320            # Get ref node and all it's children 
     321            refSubsetList = getChildNodes(refNode) 
     322            refC14n = Canonicalize(dom, None, subset=refSubsetList, 
     323                                   unsuppressedPrefixes=[]) 
     324 
     325            print "_"*80 
     326            print "Exclusive C14N %s:\n" % refNode.nodeName 
     327            print refC14n 
     328            open('soapGetAttCertResponse-%s-exclC14n.xml' % refNode.localName,  
     329                 'w').write(refC14n) 
     330         
     331         
     332    def test19ExclC14nWithXPathAndInclusiveNamespacePrefixes(self): 
     333        '''Exclusive C14N applied to portions of a SOAP message by extracting 
     334        using XPath''' 
     335        from xml.xpath.Context import Context 
     336        from xml import xpath 
     337        from xml.dom.ext.reader import PyExpat 
     338        reader = PyExpat.Reader() 
     339        dom = reader.fromStream(open('./soapGetAttCertResponse.xml')) 
     340        processorNss = \ 
     341        { 
     342            'wsu': \ 
     343"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", 
     344        } 
     345     
     346        ctxt = Context(dom, processorNss=processorNss) 
     347        refNodes = xpath.Evaluate('//*[@wsu:Id]',  
     348                                  contextNode=dom,  
     349                                  context=ctxt) 
     350        for refNode in refNodes: 
     351            # Get ref node and all it's children 
     352            refSubsetList = getChildNodes(refNode) 
     353            refC14n = Canonicalize(dom, None, subset=refSubsetList, 
     354                                   unsuppressedPrefixes=['SOAP-ENV', 'ds']) 
     355 
     356            print "_"*80 
     357            print "Exclusive C14N with Prefixes %s:\n" % refNode.nodeName 
     358            print refC14n 
     359            open('soapGetAttCertResponse-%s-exclC14nWithInclPrefixes.xml' % \ 
     360                 refNode.localName,  
     361                 'w').write(refC14n) 
     362         
     363 
     364def getChildNodes(node, nodeList=None): 
     365    if nodeList is None: 
     366        nodeList = [node]  
     367    return _getChildNodes(node, nodeList=nodeList) 
     368            
     369def _getChildNodes(node, nodeList=None): 
     370 
     371    if node.attributes is not None: 
     372        nodeList += node.attributes.values()  
     373    nodeList += node.childNodes 
     374    for childNode in node.childNodes: 
     375        _getChildNodes(childNode, nodeList) 
     376    return nodeList 
     377 
    252378if __name__ == "__main__": 
    253379    unittest.main() 
Note: See TracChangeset for help on using the changeset viewer.