00001
00002
00003
00004
00005
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()