Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

root/trunk/test/wsdl/rpc/test_rpc.rb

Revision 1963, 5.4 kB (checked in by nahi, 1 year ago)
  • update tests. do not crash at teardown when setup failed. closes #396.
Line 
1 require 'test/unit'
2 require 'wsdl/parser'
3 require 'wsdl/soap/wsdl2ruby'
4 require 'soap/rpc/standaloneServer'
5 require 'soap/wsdlDriver'
6 require File.join(File.dirname(File.expand_path(__FILE__)), '..', '..', 'testutil.rb')
7
8
9 module WSDL; module RPC
10
11
12 class TestRPC < Test::Unit::TestCase
13   class Server < ::SOAP::RPC::StandaloneServer
14     def on_init
15       add_rpc_method(self, 'echo', 'arg1', 'arg2')
16       add_rpc_method(self, 'echo_basetype', 'arg1', 'arg2')
17       add_rpc_method(self, 'echo_err', 'arg1', 'arg2')
18       self.mapping_registry = Prefix::EchoMappingRegistry::EncodedRegistry
19     end
20  
21     DummyPerson = Struct.new("family-name".intern, :Given_name)
22     def echo(arg1, arg2)
23       if arg1.given_name == 'typed'
24         self.generate_explicit_type = true
25       else
26         self.generate_explicit_type = false
27       end
28       ret = nil
29       case arg1.family_name
30       when 'normal'
31         arg1.family_name = arg2.family_name
32         arg1.given_name = arg2.given_name
33         arg1.age = arg2.age
34         ret = arg1
35       when 'dummy'
36         ret = DummyPerson.new("family-name", "given_name")
37       when 'nil'
38         ret = Prefix::Person.new(nil, nil)
39       else
40         raise
41       end
42       ret
43     end
44
45     def echo_basetype(arg1, arg2)
46       return nil if arg1.nil? and arg2.nil?
47       raise unless arg1.is_a?(Date)
48       arg1
49     end
50  
51     ErrPerson = Struct.new(:Given_name, :no_such_element)
52     def echo_err(arg1, arg2)
53       self.generate_explicit_type = false
54       ErrPerson.new(58, Time.now)
55     end
56   end
57
58   DIR = File.dirname(File.expand_path(__FILE__))
59
60   Port = 17171
61
62   def setup
63     setup_classdef
64     setup_server
65     @client = nil
66   end
67
68   def teardown
69     teardown_server if @server
70     unless $DEBUG
71       File.unlink(pathname('echo.rb'))
72       File.unlink(pathname('echoMappingRegistry.rb'))
73       File.unlink(pathname('echoDriver.rb'))
74     end
75     @client.reset_stream if @client
76   end
77
78   def setup_server
79     @server = Server.new('Test', "urn:rpc", '0.0.0.0', Port)
80     @server.level = Logger::Severity::ERROR
81     @server_thread = TestUtil.start_server_thread(@server)
82   end
83
84   def setup_classdef
85     if ::Object.constants.include?("Echo")
86       ::Object.instance_eval { remove_const("Echo") }
87     end
88     gen = WSDL::SOAP::WSDL2Ruby.new
89     gen.location = pathname("rpc.wsdl")
90     gen.basedir = DIR
91     gen.logger.level = Logger::FATAL
92     gen.opt['classdef'] = nil
93     gen.opt['mapping_registry'] = nil
94     gen.opt['driver'] = nil
95     gen.opt['force'] = true
96     gen.opt['module_path'] = 'Prefix'
97     gen.run
98     TestUtil.require(DIR, 'echo.rb', 'echoMappingRegistry.rb', 'echoDriver.rb')
99   end
100
101   def teardown_server
102     @server.shutdown
103     @server_thread.kill
104     @server_thread.join
105   end
106
107   def pathname(filename)
108     File.join(DIR, filename)
109   end
110
111   def test_wsdl
112     wsdl = File.join(DIR, 'rpc.wsdl')
113     @client = ::SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
114     @client.endpoint_url = "http://localhost:#{Port}/"
115     @client.wiredump_dev = STDERR if $DEBUG
116
117     ret = @client.echo(Prefix::Person.new("normal", "typed", 12, Prefix::Gender::F), Prefix::Person.new("Hi", "Na", 21, Prefix::Gender::M))
118     assert_equal("Hi", ret.family_name)
119     assert_equal("Na", ret.given_name)
120     assert_equal(21, ret.age)
121
122     ret = @client.echo(Prefix::Person.new("normal", "untyped", 12, Prefix::Gender::F), Prefix::Person.new("Hi", "Na", 21, Prefix::Gender::M))
123     assert_equal("Hi", ret.family_name)
124     assert_equal("Na", ret.given_name)
125     # XXX WSDLEncodedRegistry should decode untyped element using Schema
126     assert_equal("21", ret.age)
127
128     ret = @client.echo(Prefix::Person.new("dummy", "typed", 12, Prefix::Gender::F), Prefix::Person.new("Hi", "Na", 21, Prefix::Gender::M))
129     assert_equal("family-name", ret.family_name)
130     assert_equal("given_name", ret.given_name)
131
132     ret = @client.echo_err(Prefix::Person.new("Na", "Hi", nil, Prefix::Gender::F), Prefix::Person.new("Hi", "Na", nil, Prefix::Gender::M))
133     assert_equal("58", ret.given_name)
134   end
135
136   def test_stub
137     @client = Prefix::Echo_port_type.new("http://localhost:#{Port}/")
138     @client.mapping_registry = Prefix::EchoMappingRegistry::EncodedRegistry
139     @client.wiredump_dev = STDERR if $DEBUG
140
141     ret = @client.echo(Prefix::Person.new("normal", "typed", 12, Prefix::Gender::F), Prefix::Person.new("Hi", "Na", 21, Prefix::Gender::M))
142     assert_equal(Prefix::Person, ret.class)
143     assert_equal("Hi", ret.family_name)
144     assert_equal("Na", ret.given_name)
145     assert_equal(21, ret.age)
146
147     ret = @client.echo(Prefix::Person.new("normal", "untyped", 12, Prefix::Gender::F), Prefix::Person.new("Hi", "Na", 21, Prefix::Gender::M))
148     assert_equal(Prefix::Person, ret.class)
149     assert_equal("Hi", ret.family_name)
150     assert_equal("Na", ret.given_name)
151     assert_equal(21, ret.age)
152   end
153
154   def test_stub_nil
155     @client = Prefix::Echo_port_type.new("http://localhost:#{Port}/")
156     @client.wiredump_dev = STDOUT if $DEBUG
157
158     ret = @client.echo(Prefix::Person.new("nil", "", 12, Prefix::Gender::F), Prefix::Person.new("Hi", "Na", 21, Prefix::Gender::M))
159     assert_nil(ret.family_name)
160     assert_nil(ret.given_name)
161     assert_nil(ret.age)
162     #
163     assert_nil(@client.echo_basetype(nil, nil))
164   end
165
166   def test_basetype_stub
167     @client = Prefix::Echo_port_type.new("http://localhost:#{Port}/")
168     @client.wiredump_dev = STDERR if $DEBUG
169
170     ret = @client.echo_basetype(Time.now, 12345)
171     assert_equal(Date, ret.class)
172   end
173 end
174
175
176 end; end
Note: See TracBrowser for help on using the browser.