#!/usr/bin/env python import unittest import os, re import sys sys.path.insert (1, '..') import SOAPpy ident = '$Id: testWSDL.py,v 1.2 2003/05/09 12:46:11 warnes Exp $' # Check for a web proxy definition in environment try: proxy_url=os.environ['http_proxy'] phost, pport = re.search('http://([^:]+):([0-9]+)', proxy_url).group(1,2) http_proxy = "%s:%s" % (phost, pport) except: http_proxy = None class IntegerArithmenticTestCase(unittest.TestCase): def setUp(self): self.wsdlstr1 = '''<?xml version="1.0"?> <definitions name="TemperatureService" targetNamespace="http://www.xmethods.net/sd/TemperatureService.wsdl" xmlns:tns="http://www.xmethods.net/sd/TemperatureService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <message name="getTempRequest"> <part name="zipcode" type="xsd:string"/> </message> <message name="getTempResponse"> <part name="return" type="xsd:float"/> </message> <portType name="TemperaturePortType"> <operation name="getTemp"> <input message="tns:getTempRequest"/> <output message="tns:getTempResponse"/> </operation> </portType> <binding name="TemperatureBinding" type="tns:TemperaturePortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getTemp"> <soap:operation soapAction=""/> <input> <soap:body use="encoded" namespace="urn:xmethods-Temperature" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body use="encoded" namespace="urn:xmethods-Temperature" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="TemperatureService"> <documentation>Returns current temperature in a given U.S. zipcode </documentation> <port name="TemperaturePort" binding="tns:TemperatureBinding"> <soap:address location="http://services.xmethods.net:80/soap/servlet/rpcrouter"/> </port> </service> </definitions> ''' def testParseWsdlString(self): '''Parse XMethods TemperatureService wsdl from a string.''' wsdl = SOAPpy.WSDL.Proxy(self.wsdlstr1, http_proxy=http_proxy) self.assertEquals(len(wsdl.methods), 1) method = wsdl.methods.values()[0] self.assertEquals(method.methodName, 'getTemp') self.assertEquals(method.namespace, 'urn:xmethods-Temperature') self.assertEquals(method.location, 'http://services.xmethods.net:80/soap/servlet/rpcrouter') def testParseWsdlFile(self): '''Parse XMethods TemperatureService wsdl from a file.''' # figure out path to the test directory dir = os.path.abspath('.') fname = './TemperatureService.wsdl' try: f = file(fname) except (IOError, OSError): self.assert_(0, 'Cound not find wsdl file "%s"' % file) wsdl = SOAPpy.WSDL.Proxy(fname, http_proxy=http_proxy) self.assertEquals(len(wsdl.methods), 1) method = wsdl.methods.values()[0] self.assertEquals(method.methodName, 'getTemp') self.assertEquals(method.namespace, 'urn:xmethods-Temperature') self.assertEquals(method.location, 'http://services.xmethods.net:80/soap/servlet/rpcrouter') def testParseWsdlUrl(self): '''Parse XMethods TemperatureService wsdl from a url.''' wsdl = SOAPpy.WSDL.Proxy('http://www.xmethods.net/sd/2001/TemperatureService.wsdl', http_proxy=http_proxy) self.assertEquals(len(wsdl.methods), 1) method = wsdl.methods.values()[0] self.assertEquals(method.methodName, 'getTemp') self.assertEquals(method.namespace, 'urn:xmethods-Temperature') self.assertEquals(method.location, 'http://services.xmethods.net:80/soap/servlet/rpcrouter') def testGetTemp(self): '''Parse TemperatureService and call getTemp.''' zip = '01072' proxy = SOAPpy.WSDL.Proxy(self.wsdlstr1, http_proxy=http_proxy) temp = proxy.getTemp(zip) print 'Temperature at', zip, 'is', temp if __name__ == '__main__': unittest.main()