• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

contrib/opal/ZSI/ZSI/wstools/test/test_wsdl.py

00001 #!/usr/bin/env python
00002 
00003 ############################################################################
00004 # Joshua R. Boverhof, David W. Robertson, LBNL
00005 # See LBNLCopyright for copyright notice!
00006 ###########################################################################
00007 
00008 import sys, unittest
00009 import ConfigParser
00010 from ZSI.wstools.Utility import DOM
00011 from ZSI.wstools.WSDLTools import WSDLReader
00012 from ZSI.wstools.TimeoutSocket import TimeoutError
00013 
00014 class WSDLToolsTestCase(unittest.TestCase):
00015 
00016     def __init__(self, methodName='runTest'):
00017         unittest.TestCase.__init__(self, methodName)
00018 
00019     def setUp(self):
00020         self.path = nameGenerator.next()
00021         print self.path
00022         sys.stdout.flush()
00023 
00024     def __str__(self):
00025         teststr = unittest.TestCase.__str__(self)
00026         if hasattr(self, "path"):
00027             return "%s: %s" % (teststr, self.path )
00028         else:
00029             return "%s" % (teststr)
00030 
00031     def checkWSDLCollection(self, tag_name, component, key='name'):
00032         if self.wsdl is None:
00033             return
00034         definition = self.wsdl.document.documentElement
00035         version = DOM.WSDLUriToVersion(definition.namespaceURI)
00036         nspname = DOM.GetWSDLUri(version)
00037         for node in DOM.getElements(definition, tag_name, nspname):
00038             name = DOM.getAttr(node, key)
00039             comp = component[name]
00040             self.failUnlessEqual(eval('comp.%s' %key), name)
00041 
00042     def checkXSDCollection(self, tag_name, component, node, key='name'):
00043         for cnode in DOM.getElements(node, tag_name):
00044             name = DOM.getAttr(cnode, key)
00045             component[name] 
00046 
00047     def test_all(self):
00048         try:
00049             if self.path[:7] == 'http://':
00050                 self.wsdl = WSDLReader().loadFromURL(self.path)
00051             else:
00052                 self.wsdl = WSDLReader().loadFromFile(self.path)
00053 
00054         except TimeoutError:
00055             print "connection timed out"
00056             sys.stdout.flush()
00057             return
00058         except:
00059             self.path = self.path + ": load failed, unable to start"
00060             raise
00061 
00062         try:
00063             self.checkWSDLCollection('service', self.wsdl.services)
00064         except:
00065             self.path = self.path + ": wsdl.services"
00066             raise
00067 
00068         try:
00069             self.checkWSDLCollection('message', self.wsdl.messages)
00070         except:
00071             self.path = self.path + ": wsdl.messages"
00072             raise
00073 
00074         try:
00075             self.checkWSDLCollection('portType', self.wsdl.portTypes)
00076         except:
00077             self.path = self.path + ": wsdl.portTypes"
00078             raise
00079 
00080         try:
00081             self.checkWSDLCollection('binding', self.wsdl.bindings)
00082         except:
00083             self.path = self.path + ": wsdl.bindings"
00084             raise
00085 
00086         try:
00087             self.checkWSDLCollection('import', self.wsdl.imports, key='namespace')
00088         except:
00089             self.path = self.path + ": wsdl.imports"
00090             raise
00091 
00092         try:
00093             for key in self.wsdl.types.keys(): 
00094                 schema = self.wsdl.types[key]
00095                 self.failUnlessEqual(key, schema.getTargetNamespace())
00096 
00097             definition = self.wsdl.document.documentElement
00098             version = DOM.WSDLUriToVersion(definition.namespaceURI)
00099             nspname = DOM.GetWSDLUri(version)
00100             for node in DOM.getElements(definition, 'types', nspname):
00101                 for snode in DOM.getElements(node, 'schema'):
00102                     tns = DOM.findTargetNS(snode)
00103                     schema = self.wsdl.types[tns]
00104                     self.schemaAttributesDeclarations(schema, snode)
00105                     self.schemaAttributeGroupDeclarations(schema, snode)
00106                     self.schemaElementDeclarations(schema, snode)
00107                     self.schemaTypeDefinitions(schema, snode)
00108         except:
00109             self.path = self.path + ": wsdl.types"
00110             raise
00111 
00112         if self.wsdl.extensions:
00113             print 'No check for WSDLTools(%s) Extensions:' %(self.wsdl.name)
00114             for ext in self.wsdl.extensions: print '\t', ext
00115 
00116     def schemaAttributesDeclarations(self, schema, node):
00117         self.checkXSDCollection('attribute', schema.attr_decl, node)
00118 
00119     def schemaAttributeGroupDeclarations(self, schema, node):
00120         self.checkXSDCollection('group', schema.attr_groups, node)
00121 
00122     def schemaElementDeclarations(self, schema, node):
00123         self.checkXSDCollection('element', schema.elements, node)
00124 
00125     def schemaTypeDefinitions(self, schema, node):
00126         self.checkXSDCollection('complexType', schema.types, node)
00127         self.checkXSDCollection('simpleType', schema.types, node)
00128 
00129 
00130 def setUpOptions(section):
00131     cp = ConfigParser.ConfigParser()
00132     cp.read('config.txt')
00133     if not cp.sections():
00134         print 'fatal error:  configuration file config.txt not present'
00135         sys.exit(0)
00136     if not cp.has_section(section):
00137         print '%s section not present in configuration file, exiting' % section
00138         sys.exit(0)
00139     return cp, len(cp.options(section))
00140 
00141 def getOption(cp, section):
00142     for name, value in cp.items(section):
00143         yield value
00144     
00145 def makeTestSuite(section='services_by_file'):
00146     global nameGenerator
00147 
00148     cp, numTests = setUpOptions(section)
00149     nameGenerator = getOption(cp, section)
00150     suite = unittest.TestSuite()
00151     for i in range(0, numTests):
00152         suite.addTest(unittest.makeSuite(WSDLToolsTestCase, 'test_'))
00153     return suite
00154 
00155 
00156 def main():
00157     unittest.main(defaultTest="makeTestSuite")
00158                   
00159 
00160 if __name__ == "__main__" : main()

Generated on Wed Oct 20 2010 11:12:17 for APBS by  doxygen 1.7.2