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() |