Added Files:
README config.py schema.tar.gz test_t1.py test_wsdl.py
test_wstools.py test_wstools_net.py xmethods.tar.gz
-- basic unittesting framework for WSDLTools/XMLSchema,
test_t1 just checks that everything goes where it's supposed to.
----------------------------------------------------------------------
main
| @@ -0,0 +1,30 @@ | |||
| Two top level modules have been provided to run the tests. "test_wstools.py" is used | |||
| to run all of the local tests. "test_wstools_net.py" is used to run all of the | |||
| tests that require network access. | |||
| TESTS: | |||
| test_t1 -- Basic test, just checks that wsdl and xsd objects are in the | |||
| right places. | |||
| CONTENTS OF SAMPLE WSDL/XSD: | |||
| schema -- Taken from globus-3.0.1(http://www.globus.org) | |||
| xmethods -- Taken from XMethods(http://www.xmethods.com) | |||
| airport.wsdl | |||
| AmazonWebServices.wsdl | |||
| books.wsdl | |||
| Distance.wsdl | |||
| freedb.wsdl | |||
| globalweather.wsdl | |||
| IHaddock.wsdl | |||
| ip2geo.wsdl | |||
| magic.wsdl | |||
| query.wsdl | |||
| RateInfo.wsdl | |||
| SHA1Encrypt.wsdl | |||
| siteInspect.wsdl | |||
| TemperatureService.wsdl | |||
| usweather.wsdl | |||
| zip2geo.wsdl | |||
| @@ -0,0 +1,51 @@ | |||
| ############################################################################ | |||
| # Joshua R. Boverhof, LBNL | |||
| # See Copyright for copyright notice! | |||
| ########################################################################### | |||
| ########################################################################### | |||
| # Config file for the unit test framework. | |||
| # Sections below. | |||
| ########################################################################### | |||
| ########################################################################## | |||
| # SECTION [files] - archives of wsdl/xsd files. | |||
| # | |||
| ########################################################################## | |||
| [files] | |||
| archives = ('xmethods.tar.gz', 'schema.tar.gz') | |||
| ########################################################################## | |||
| # SECTION [services_by_file] - all services locally available for | |||
| # testing. | |||
| ########################################################################## | |||
| [services_by_file] | |||
| ogsi = schema/ogsi/ogsi_service.wsdl | |||
| airport = xmethods/airport.wsdl | |||
| amazon = xmethods/AmazonWebServices.wsdl | |||
| books = xmethods/books.wsdl | |||
| distance = xmethods/Distance.wsdl | |||
| freedb = xmethods/freedb.wsdl | |||
| globalweather = xmethods/globalweather.wsdl | |||
| IHaddock = xmethods/IHaddock.wsdl | |||
| ip2geo = xmethods/ip2geo.wsdl | |||
| magic = xmethods/magic.wsdl | |||
| query = xmethods/query.wsdl | |||
| RateInfo = xmethods/RateInfo.wsdl | |||
| SHA1Encrypt = xmethods/SHA1Encrypt.wsdl | |||
| siteInsepct = xmethods/siteInspect.wsdl | |||
| TemperatureService = xmethods/TemperatureService.wsdl | |||
| usweather = xmethods/usweather.wsdl | |||
| zip2geo = xmethods/zip2geo.wsdl | |||
| ########################################################################## | |||
| # SECTION [services_by_http] - all services available for | |||
| # network testing. | |||
| ########################################################################## | |||
| [services_by_http] | |||
| amazon = http://soap.amazon.com/schemas/AmazonWebServices.wsdl | |||
| homelandsecurity = http://www.boyzoid.com/threat.cfc?wsdl | |||
| rtf2html = http://www.infoaccelerator.net/cfc/rft2html.cfc?WSDL | |||
| @@ -0,0 +1,49 @@ | |||
| #!/usr/bin/env python | |||
| import unittest, sys | |||
| from ConfigParser import ConfigParser | |||
| from ZSI.wstools.WSDLTools import WSDLReader | |||
| from test_wsdl import WSDLToolsTestCase, NETWORK, STANDALONE | |||
| CONFIG = None | |||
| class AmazonTestCase(WSDLToolsTestCase): | |||
| def test(self): | |||
| self.option = 'amazon' | |||
| self.loadFromConfig(CONFIG) | |||
| class AirportTestCase(WSDLToolsTestCase): | |||
| def test(self): | |||
| self.option = 'airport' | |||
| self.loadFromConfig(CONFIG) | |||
| class OGSITestCase(WSDLToolsTestCase): | |||
| def test(self): | |||
| self.option = 'ogsi' | |||
| self.loadFromConfig(CONFIG) | |||
| CASES = [AmazonTestCase, AirportTestCase, OGSITestCase] | |||
| def makeNetworkSuite(): | |||
| return getSuite(NETWORK) | |||
| def makeStandAloneSuite(): | |||
| return getSuite(STANDALONE) | |||
| def getSuite(section): | |||
| tests = [] | |||
| suite = unittest.TestSuite() | |||
| loader = unittest.TestLoader() | |||
| for case in CASES: | |||
| case.section = section | |||
| test = loader.loadTestsFromTestCase(case) | |||
| tests.append(test) | |||
| suite.addTests(tests) | |||
| return suite | |||
| def main(): | |||
| global CONFIG | |||
| from test_wstools import CONFIG_FILE | |||
| CONFIG = ConfigParser() | |||
| CONFIG.read(CONFIG_FILE) | |||
| unittest.TestProgram(defaultTest='makeStandAloneSuite') | |||
| if __name__ == "__main__" : main() | |||
| @@ -0,0 +1,137 @@ | |||
| #!/usr/bin/env python | |||
| import unittest, sys | |||
| from ConfigParser import NoOptionError | |||
| from ZSI.wstools.WSDLTools import WSDLReader | |||
| from ZSI.wstools.Utility import DOM | |||
| CONFIG = None | |||
| NETWORK = 'services_by_http' | |||
| STANDALONE = 'services_by_file' | |||
| class WSDLToolsTestCase(unittest.TestCase): | |||
| def __init__(self, methodName='runTest'): | |||
| unittest.TestCase.__init__(self, methodName) | |||
| def setUp(self): | |||
| pass | |||
| def tearDown(self): | |||
| if self.wsdl: | |||
| self.wsdlServices() | |||
| self.wsdlMessages() | |||
| self.wsdlPortTypes() | |||
| self.wsdlBindings() | |||
| self.wsdlImports() | |||
| self.wsdlExtensions() | |||
| self.wsdlTypes() | |||
| def loadFromConfig(self, config=CONFIG): | |||
| try: | |||
| print config | |||
| path = config.get(self.section, self.option) | |||
| except NoOptionError, ex: | |||
| self.wsdl = None | |||
| else: | |||
| if path[:7] == 'http://': | |||
| self.loadFromURL(url=path) | |||
| else: | |||
| self.loadFromFile(file=path) | |||
| def loadFromFile(self, file): | |||
| self.wsdl = WSDLReader().loadFromFile(file) | |||
| def loadFromURL(self, url): | |||
| self.wsdl = WSDLReader().loadFromURL(url) | |||
| def checkWSDLCollection(self, tag_name, component, key='name'): | |||
| definition = self.wsdl.document.documentElement | |||
| version = DOM.WSDLUriToVersion(definition.namespaceURI) | |||
| nspname = DOM.GetWSDLUri(version) | |||
| for node in DOM.getElements(definition, tag_name, nspname): | |||
| name = DOM.getAttr(node, key) | |||
| comp = component[name] | |||
| self.failUnlessEqual(eval('comp.%s' %key), name) | |||
| def checkXSDCollection(self, tag_name, component, node, key='name'): | |||
| for cnode in DOM.getElements(node, tag_name): | |||
| name = DOM.getAttr(cnode, key) | |||
| component[name] | |||
| def wsdlServices(self): | |||
| self.checkWSDLCollection('service', self.wsdl.services) | |||
| def wsdlMessages(self): | |||
| self.checkWSDLCollection('message', self.wsdl.messages) | |||
| def wsdlPortTypes(self): | |||
| self.checkWSDLCollection('portType', self.wsdl.portTypes) | |||
| def wsdlBindings(self): | |||
| self.checkWSDLCollection('binding', self.wsdl.bindings) | |||
| def wsdlImports(self): | |||
| self.checkWSDLCollection('import', self.wsdl.imports, key='namespace') | |||
| def wsdlTypes(self): | |||
| for key in self.wsdl.types.keys(): | |||
| schema = self.wsdl.types[key] | |||
| self.failUnlessEqual(key, schema.getTargetNamespace()) | |||
| definition = self.wsdl.document.documentElement | |||
| version = DOM.WSDLUriToVersion(definition.namespaceURI) | |||
| nspname = DOM.GetWSDLUri(version) | |||
| for node in DOM.getElements(definition, 'types', nspname): | |||
| for snode in DOM.getElements(node, 'schema'): | |||
| tns = DOM.findTargetNS(snode) | |||
| schema = self.wsdl.types[tns] | |||
| self.schemaAttributesDeclarations(schema, snode) | |||
| self.schemaAttributeGroupDeclarations(schema, snode) | |||
| self.schemaElementDeclarations(schema, snode) | |||
| self.schemaTypeDefinitions(schema, snode) | |||
| def wsdlExtensions(self): | |||
| if self.wsdl.extensions: | |||
| print 'No check for WSDLTools(%s) Extensions:' %(self.wsdl.name) | |||
| for ext in self.wsdl.extensions: print '\t', ext | |||
| def schemaAttributesDeclarations(self, schema, node): | |||
| self.checkXSDCollection('attribute', schema.attr_decl, node) | |||
| def schemaAttributeGroupDeclarations(self, schema, node): | |||
| self.checkXSDCollection('group', schema.attr_groups, node) | |||
| def schemaElementDeclarations(self, schema, node): | |||
| self.checkXSDCollection('element', schema.elements, node) | |||
| def schemaTypeDefinitions(self, schema, node): | |||
| self.checkXSDCollection('complexType', schema.types, node) | |||
| self.checkXSDCollection('simpleType', schema.types, node) | |||
| def makeNetworkSuite(): | |||
| return getSuite(section='services_by_http') | |||
| def makeStandAloneSuite(): | |||
| return getSuite('services_by_file') | |||
| def getSuite(section): | |||
| names = CONFIG.options(section) | |||
| tests = [] | |||
| suite = unittest.TestSuite() | |||
| loader = unittest.TestLoader() | |||
| WSDLToolsTestCase.section = section | |||
| for case in [WSDLToolsTestCase,]: | |||
| case.section = section | |||
| test = loader.loadTestsFromTestCase(case) | |||
| tests.append(test) | |||
| #tests.sort() | |||
| suite.addTests(tests) | |||
| return suite | |||
| #makeTestSuite = makeStandAloneSuite | |||
| #def main(): | |||
| # unittest.main(defaultTest="makeTestSuite") | |||
| if __name__ == "__main__" : main() | |||
| @@ -0,0 +1,23 @@ | |||
| #!/usr/bin/env python | |||
| import unittest, tarfile, os, ConfigParser | |||
| import test_t1 | |||
| SECTION='files' | |||
| CONFIG_FILE = 'config.py' | |||
| def main(): | |||
| config = ConfigParser.ConfigParser() | |||
| config.read(CONFIG_FILE) | |||
| archives = config.get(SECTION, 'archives') | |||
| archives = eval(archives) | |||
| test_t1.CONFIG = config | |||
| for file in archives: | |||
| tar = tarfile.open(file) | |||
| if not os.access(tar.membernames[0], os.R_OK): | |||
| for i in tar.getnames(): | |||
| tar.extract(i) | |||
| unittest.TestProgram(defaultTest='test_t1.makeStandAloneSuite') | |||
| if __name__ == "__main__" : main() | |||
| @@ -0,0 +1,14 @@ | |||
| #!/usr/bin/env python | |||
| import unittest, tarfile, os, ConfigParser | |||
| import test_t1 | |||
| CONFIG_FILE = 'config.py' | |||
| def main(): | |||
| config = ConfigParser.ConfigParser() | |||
| config.read(CONFIG_FILE) | |||
| test_t1.CONFIG = config | |||
| unittest.TestProgram(defaultTest='test_t1.makeNetworkSuite') | |||
| if __name__ == "__main__" : main() | |||