#
# Twisted, the Framework of Your Internet
# Copyright (C) 2001-2002 Matthew W. Lefkowitz
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of version 2.1 of the GNU Lesser General Public
# License as published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""Test SOAP support."""
try:
import SOAPpy
except ImportError:
SOAPpy = None
class SOAPPublisher: pass
else:
from twisted.web import soap
SOAPPublisher = soap.SOAPPublisher
from twisted.trial import unittest
from twisted.web import server
from twisted.internet import reactor, defer
from twisted.python import log
class Test(SOAPPublisher):
def soap_add(self, a, b):
return a + b
def soap_kwargs(self, a=1, b=2):
return a + b
soap_kwargs.useKeywords=True
def soap_pair(self, string, num):
return [string, num, None]
def soap_struct(self):
return SOAPpy.structType({"a": "c"})
def soap_defer(self, x):
return defer.succeed(x)
def soap_deferFail(self):
return defer.fail(ValueError())
def soap_fail(self):
raise RuntimeError
def soap_deferFault(self):
return defer.fail(ValueError())
def soap_complex(self):
return {"a": ["b", "c", 12, []], "D": "foo"}
def soap_dict(self, map, key):
return map[key]
class SOAPTestCase(unittest.TestCase):
def setUp(self):
self.p = reactor.listenTCP(0, server.Site(Test()),
interface="127.0.0.1")
self.port = self.p.getHost()[2]
def tearDown(self):
self.p.stopListening()
reactor.iterate()
reactor.iterate()
def proxy(self):
return soap.Proxy("http://localhost:%d/" % self.port)
def testResults(self):
x = self.proxy().callRemote("add", 2, 3)
self.assertEquals(unittest.deferredResult(x), 5)
x = self.proxy().callRemote("kwargs", b=2, a=3)
self.assertEquals(unittest.deferredResult(x), 5)
x = self.proxy().callRemote("kwargs", b=3)
self.assertEquals(unittest.deferredResult(x), 4)
x = self.proxy().callRemote("defer", "a")
self.assertEquals(unittest.deferredResult(x), "a")
x = self.proxy().callRemote("dict", {"a" : 1}, "a")
self.assertEquals(unittest.deferredResult(x), 1)
x = self.proxy().callRemote("pair", 'a', 1)
self.assertEquals(unittest.deferredResult(x), ['a', 1, None])
x = self.proxy().callRemote("struct")
self.assertEquals(unittest.deferredResult(x)._asdict,
{"a": "c"})
x = self.proxy().callRemote("complex")
self.assertEquals(unittest.deferredResult(x)._asdict,
{"a": ["b", "c", 12, []], "D": "foo"})
def testErrors(self):
pass
testErrors.skip = "Not yet implemented"
if not SOAPpy:
SOAPTestCase.skip = "SOAPpy not installed"
syntax highlighted by Code2HTML, v. 0.9.1