diff --git a/test/README b/test/README new file mode 100644 index 0000000..7ddfadd --- /dev/null +++ b/test/README @@ -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 + + diff --git a/test/config.py b/test/config.py new file mode 100644 index 0000000..6571afd --- /dev/null +++ b/test/config.py @@ -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 + + diff --git a/test/schema.tar.gz b/test/schema.tar.gz new file mode 100644 index 0000000..d6fe7db Binary files /dev/null and b/test/schema.tar.gz differ diff --git a/test/test_t1.py b/test/test_t1.py new file mode 100644 index 0000000..289f4ba --- /dev/null +++ b/test/test_t1.py @@ -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() diff --git a/test/test_wsdl.py b/test/test_wsdl.py new file mode 100644 index 0000000..aadf0de --- /dev/null +++ b/test/test_wsdl.py @@ -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() diff --git a/test/test_wstools.py b/test/test_wstools.py new file mode 100644 index 0000000..fde9a63 --- /dev/null +++ b/test/test_wstools.py @@ -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() diff --git a/test/test_wstools_net.py b/test/test_wstools_net.py new file mode 100644 index 0000000..5b1ec6b --- /dev/null +++ b/test/test_wstools_net.py @@ -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() diff --git a/test/xmethods.tar.gz b/test/xmethods.tar.gz new file mode 100644 index 0000000..646332b Binary files /dev/null and b/test/xmethods.tar.gz differ