1#!/usr/bin/env python
2############################################################################
3# Joshua R. Boverhof, LBNL
4# See LBNLCopyright for copyright notice!
5###########################################################################
6import os, sys, unittest
7from ServiceTest import main, ServiceTestCase, ServiceTestSuite
8from ZSI import FaultException, TC
9from ZSI.schema import GED, GTD
10
11"""
12Unittest
13
14WSDL:  ../../samples/Echo/Echo.wsdl
15"""
16
17# General targets
18def dispatch():
19    """Run all dispatch tests"""
20    suite = ServiceTestSuite()
21    suite.addTest(unittest.makeSuite(EchoTestCase, 'test_dispatch'))
22    return suite
23
24def local():
25    """Run all local tests"""
26    suite = ServiceTestSuite()
27    suite.addTest(unittest.makeSuite(EchoTestCase, 'test_local'))
28    return suite
29
30def net():
31    """Run all network tests"""
32    suite = ServiceTestSuite()
33    suite.addTest(unittest.makeSuite(EchoTestCase, 'test_net'))
34    return suite
35
36def all():
37    """Run all tests"""
38    suite = ServiceTestSuite()
39    suite.addTest(unittest.makeSuite(EchoTestCase, 'test_'))
40    return suite
41
42
43class EchoTestCase(ServiceTestCase):
44    name = "test_EchoWSAddr200403"
45    client_file_name = "EchoWSAddr200403Server_client.py"
46    types_file_name  = "EchoWSAddr200403Server_types.py"
47    server_file_name = "EchoWSAddr200403Server_server.py"
48
49    def __init__(self, methodName):
50        ServiceTestCase.__init__(self, methodName)
51        self.wsdl2py_args.append('-ab')
52
53    def getPortKWArgs(self):
54        kw = ServiceTestCase.getPortKWArgs(self)
55        kw['wsAddressURI'] = 'http://schemas.xmlsoap.org/ws/2004/03/addressing'
56        return kw
57
58    def test_local_Echo(self):
59        msg = self.client_module.EchoRequest()
60        rsp = self.client_module.EchoResponse()
61
62    def test_dispatch_Echo(self):
63        loc = self.client_module.EchoWSAddr200403ServerLocator()
64        port = loc.getport(**self.getPortKWArgs())
65
66        msg = self.client_module.EchoRequest()
67        msg.EchoIn = 'bla bla bla'
68        rsp = port.Echo(msg)
69        self.failUnless(rsp.EchoResult == msg.EchoIn, "Bad Echo")
70
71    def test_dispatch_Echo_MIH_EPR(self):
72        epr = GED('http://schemas.xmlsoap.org/ws/2004/03/addressing','EndpointReference').pyclass()
73        epr.Address = 'urn:whatever'
74
75        loc = self.client_module.EchoWSAddr200403ServerLocator()
76        port = loc.getport(endPointReference=epr, **self.getPortKWArgs())
77
78        msg = self.client_module.EchoRequest()
79        msg.EchoIn = 1
80        rsp = port.Echo(msg)
81        self.failUnless(rsp.EchoResult == msg.EchoIn, "Bad Echo")
82
83    def test_dispatch_Echo_MIH_EPR2(self):
84        epr = GED('http://schemas.xmlsoap.org/ws/2004/03/addressing','EndpointReference').pyclass()
85        epr.Address = 'urn:whatever'
86        epr.ReferenceProperties = epr.new_ReferenceProperties()
87
88        loc = self.client_module.EchoWSAddr200403ServerLocator()
89        port = loc.getport(endPointReference=epr, **self.getPortKWArgs())
90
91        msg = self.client_module.EchoRequest()
92        msg.EchoIn = 1
93        rsp = port.Echo(msg)
94        self.failUnless(rsp.EchoResult == msg.EchoIn, "Bad Echo")
95
96    def test_dispatch_Echo_MIH_EPR3_BadHeader(self):
97        """Unqualified element "mystr" in Header
98        """
99        epr = GED('http://schemas.xmlsoap.org/ws/2004/03/addressing','EndpointReference').pyclass()
100        epr.Address = 'urn:whatever'
101        epr.ReferenceProperties = epr.new_ReferenceProperties()
102        class Xstr(str):
103            typecode = TC.String('mystr')
104
105        epr.ReferenceProperties.Any = [Xstr('whatever'),]
106
107        loc = self.client_module.EchoWSAddr200403ServerLocator()
108        self._setUpDispatch()
109        port = loc.getport(endPointReference=epr, **self.getPortKWArgs())
110
111        msg = self.client_module.EchoRequest()
112        self.failUnlessRaises(FaultException, port.Echo,msg)
113
114    def test_dispatch_Echo_MIH_EPR3(self):
115        epr = GED('http://schemas.xmlsoap.org/ws/2004/03/addressing','EndpointReference').pyclass()
116        epr.Address = 'urn:whatever'
117        epr.ReferenceProperties = epr.new_ReferenceProperties()
118        class Xstr(str):
119            typecode = TC.String(('urn:josh','mystr'))
120
121        epr.ReferenceProperties.Any = [Xstr('whatever'),]
122
123        loc = self.client_module.EchoWSAddr200403ServerLocator()
124        self._setUpDispatch()
125        port = loc.getport(endPointReference=epr, **self.getPortKWArgs())
126
127        msg = self.client_module.EchoRequest()
128        epr2 = GTD('http://schemas.xmlsoap.org/ws/2004/03/addressing','EndpointReferenceType')(None).pyclass()
129        epr2.Address = epr.Address
130        epr2.ReferenceProperties = epr.ReferenceProperties
131
132        msg.EchoIn = epr2
133        rsp = port.Echo(msg)
134        self.failUnless(rsp.EchoResult.Address == msg.EchoIn.Address, "Bad Echo")
135        self.failUnless(rsp.EchoResult.ReferenceProperties.Any == msg.EchoIn.ReferenceProperties.Any, "Bad Echo")
136
137
138if __name__ == "__main__" :
139    main()
140
141