soap4r 1.5.6 → 1.5.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. data/bin/wsdl2ruby.rb +1 -1
  2. data/bin/xsd2ruby.rb +12 -4
  3. data/lib/soap/baseData.rb +3 -1
  4. data/lib/soap/encodingstyle/literalHandler.rb +3 -2
  5. data/lib/soap/encodingstyle/soapHandler.rb +7 -4
  6. data/lib/soap/filter.rb +4 -1
  7. data/lib/soap/filter/filterchain.rb +1 -1
  8. data/lib/soap/filter/streamhandler.rb +29 -0
  9. data/lib/soap/generator.rb +6 -0
  10. data/lib/soap/httpconfigloader.rb +21 -6
  11. data/lib/soap/mapping/encodedregistry.rb +2 -1
  12. data/lib/soap/mapping/literalregistry.rb +31 -16
  13. data/lib/soap/mapping/registry.rb +5 -1
  14. data/lib/soap/mapping/rubytypeFactory.rb +3 -0
  15. data/lib/soap/mapping/wsdlliteralregistry.rb +3 -3
  16. data/lib/soap/netHttpClient.rb +6 -0
  17. data/lib/soap/rpc/router.rb +26 -17
  18. data/lib/soap/soap.rb +4 -4
  19. data/lib/soap/streamHandler.rb +61 -26
  20. data/lib/wsdl/soap/classDefCreator.rb +4 -2
  21. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +7 -2
  22. data/lib/wsdl/soap/mappingRegistryCreator.rb +0 -2
  23. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +2 -0
  24. data/lib/wsdl/soap/methodDefCreator.rb +6 -3
  25. data/lib/wsdl/xmlSchema/element.rb +4 -0
  26. data/lib/wsdl/xmlSchema/importer.rb +21 -9
  27. data/lib/wsdl/xmlSchema/xsd2ruby.rb +56 -3
  28. data/lib/xsd/mapping.rb +30 -13
  29. data/test/interopR2/client.log +5 -0
  30. data/test/interopR2/client.rb +9 -3
  31. data/test/interopR2/server.rb +1 -0
  32. data/test/soap/asp.net/test_aspdotnet.rb +1 -1
  33. data/test/soap/auth/htdigest +2 -0
  34. data/test/soap/auth/htpasswd +2 -0
  35. data/test/soap/auth/test_basic.rb +116 -0
  36. data/test/soap/auth/test_digest.rb +117 -0
  37. data/test/soap/htpasswd +2 -0
  38. data/test/soap/ssl/README +1 -1
  39. data/test/soap/ssl/test_ssl.rb +9 -9
  40. data/test/soap/test_cookie.rb +112 -0
  41. data/test/soap/test_custom_ns.rb +63 -0
  42. data/test/soap/test_httpconfigloader.rb +20 -5
  43. data/test/soap/test_mapping.rb +62 -0
  44. data/test/soap/test_nil.rb +55 -0
  45. data/test/soap/test_no_indent.rb +1 -1
  46. data/test/soap/test_streamhandler.rb +26 -14
  47. data/test/wsdl/datetime/datetimeServant.rb +1 -0
  48. data/test/wsdl/datetime/test_datetime.rb +4 -0
  49. data/test/wsdl/document/array/double.wsdl +50 -0
  50. data/test/wsdl/document/array/test_array.rb +34 -7
  51. data/test/wsdl/qualified/test_qualified.rb +1 -1
  52. data/test/wsdl/qualified/test_unqualified.rb +2 -16
  53. data/test/wsdl/rpc/test_rpc.rb +3 -0
  54. data/test/wsdl/rpc/test_rpc_lit.rb +1 -1
  55. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +2 -2
  56. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +2 -2
  57. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +1 -1
  58. data/test/xsd/xsd2ruby/expected_mysample.rb +54 -0
  59. data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +11 -0
  60. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +57 -0
  61. data/test/xsd/xsd2ruby/section.xsd +41 -0
  62. data/test/xsd/xsd2ruby/test_xsd2ruby.rb +90 -0
  63. metadata +31 -12
  64. data/lib/soap/mapping/encodedregistry.rb~ +0 -531
  65. data/lib/tags +0 -5144
  66. data/lib/xsd/classloader.rb +0 -26
  67. data/test/interopR2/result_client.NetRemoting.txt +0 -0
  68. data/test/wsdl/rpc/test-rpc-lit-qualified.wsdl +0 -74
  69. data/test/wsdl/rpc/test-rpc-lit12.wsdl +0 -455
data/lib/xsd/mapping.rb CHANGED
@@ -18,23 +18,40 @@ module XSD
18
18
 
19
19
  module Mapping
20
20
  MappingRegistry = SOAP::Mapping::LiteralRegistry.new
21
- MappingOpt = {:default_encodingstyle => SOAP::LiteralNamespace}
22
21
 
23
22
  def self.obj2xml(obj, elename = nil, io = nil)
24
- if !elename.nil? and !elename.is_a?(XSD::QName)
25
- elename = XSD::QName.new(nil, elename)
26
- end
27
- elename ||= XSD::QName.new(nil, SOAP::Mapping.name2elename(obj.class.to_s))
28
- soap = SOAP::Mapping.obj2soap(obj, MappingRegistry)
29
- soap.elename = elename
30
- generator = SOAP::SOAPGenerator.new(MappingOpt)
31
- generator.generate(soap, io)
23
+ Mapper.new(MappingRegistry).obj2xml(obj, elename, io)
24
+ end
25
+
26
+ def self.xml2obj(stream, klass = nil)
27
+ Mapper.new(MappingRegistry).xml2obj(stream, klass)
32
28
  end
33
29
 
34
- def self.xml2obj(stream)
35
- parser = SOAP::Parser.new(MappingOpt)
36
- soap = parser.parse(stream)
37
- SOAP::Mapping.soap2obj(soap, MappingRegistry)
30
+ class Mapper
31
+ MAPPING_OPT = {:default_encodingstyle => SOAP::LiteralNamespace}
32
+
33
+ def initialize(registry)
34
+ @registry = registry
35
+ end
36
+
37
+ def obj2xml(obj, elename = nil, io = nil)
38
+ if !elename.nil? and !elename.is_a?(XSD::QName)
39
+ elename = XSD::QName.new(nil, elename)
40
+ end
41
+ soap = SOAP::Mapping.obj2soap(obj, @registry, elename)
42
+ if soap.elename.nil? or soap.elename == XSD::QName::EMPTY
43
+ soap.elename =
44
+ XSD::QName.new(nil, SOAP::Mapping.name2elename(obj.class.to_s))
45
+ end
46
+ generator = SOAP::SOAPGenerator.new(MAPPING_OPT)
47
+ generator.generate(soap, io)
48
+ end
49
+
50
+ def xml2obj(stream, klass = nil)
51
+ parser = SOAP::Parser.new(MAPPING_OPT)
52
+ soap = parser.parse(stream)
53
+ SOAP::Mapping.soap2obj(soap, @registry, klass)
54
+ end
38
55
  end
39
56
  end
40
57
 
@@ -0,0 +1,5 @@
1
+ File: client.log - Wiredumps for SOAP4R client / localhsot server.
2
+ Date: Wed Jul 04 23:08:41 +0900 2007
3
+
4
+ ==== test_echoMapArray_multibyte_char ========================================
5
+
@@ -5,6 +5,7 @@ require 'soap/rpc/driver'
5
5
  require 'soap/mapping'
6
6
  require 'base'
7
7
  require 'interopResultBase'
8
+ require 'xsd/xmlparser/rexmlparser'
8
9
  #XSD::Charset.encoding = 'EUC'
9
10
 
10
11
  class Float
@@ -100,7 +101,11 @@ class SOAPBuildersTest < Test::Unit::TestCase
100
101
  soap_action = InterfaceNS
101
102
  @@drv = RPC::Driver.new(location, namespace, soap_action)
102
103
  @@drv.mapping_registry = SOAPBuildersInterop::MappingRegistry
103
- @@drv.wiredump_dev = @@log
104
+ if $DEBUG
105
+ @@drv.wiredump_dev = STDOUT
106
+ else
107
+ @@drv.wiredump_dev = @@log
108
+ end
104
109
  method_def(@@drv, soap_action)
105
110
  end
106
111
 
@@ -1222,7 +1227,8 @@ class SOAPBuildersTest < Test::Unit::TestCase
1222
1227
  end
1223
1228
 
1224
1229
  if $0 == __FILE__
1225
- name = ARGV.shift || 'localhost'
1226
- location = ARGV.shift || 'http://localhost:10080/'
1230
+ #name = ARGV.shift || 'localhost'
1231
+ #location = ARGV.shift || 'http://localhost:10080/'
1232
+ name = 'localhsot'; location = 'http://localhost:10080/'
1227
1233
  SOAPBuildersTest.setup(name, location)
1228
1234
  end
@@ -8,6 +8,7 @@ $KCODE = "SJIS"
8
8
 
9
9
  require 'soap/rpc/standaloneServer'
10
10
  require 'base'
11
+ require 'xsd/xmlparser/rexmlparser'
11
12
 
12
13
  class InteropApp < SOAP::RPC::StandaloneServer
13
14
  include SOAP
@@ -87,7 +87,7 @@ __XML__
87
87
  assert_equal("Hello Mike", @client.sayHello("Mike"))
88
88
  end
89
89
 
90
- if defined?(HTTPAccess2)
90
+ if defined?(HTTPClient)
91
91
 
92
92
  # qualified!
93
93
  REQUEST_ASPDOTNETHANDLER =
@@ -0,0 +1,2 @@
1
+ admin:auth:4302fe65caa32f27721949149ccd3083
2
+ guest:auth:402550d83a8289be65377d0e7d11fb6e
@@ -0,0 +1,2 @@
1
+ admin:Qg266hq/YYKe2
2
+ guest:gbPc4vPCH.h12
@@ -0,0 +1,116 @@
1
+ require 'test/unit'
2
+ require 'soap/rpc/driver'
3
+ require 'webrick'
4
+ require 'webrick/httpproxy'
5
+ require 'logger'
6
+ require File.join(File.dirname(File.expand_path(__FILE__)), '..', '..', 'testutil.rb')
7
+
8
+
9
+ module SOAP; module Auth
10
+
11
+
12
+ class TestBasic < Test::Unit::TestCase
13
+ Port = 17171
14
+ ProxyPort = 17172
15
+
16
+ def setup
17
+ @logger = Logger.new(STDERR)
18
+ @logger.level = Logger::Severity::ERROR
19
+ @url = "http://localhost:#{Port}/"
20
+ @proxyurl = "http://localhost:#{ProxyPort}/"
21
+ @server = @proxyserver = @client = nil
22
+ @server_thread = @proxyserver_thread = nil
23
+ setup_server
24
+ setup_client
25
+ end
26
+
27
+ def teardown
28
+ teardown_client
29
+ teardown_proxyserver if @proxyserver
30
+ teardown_server
31
+ end
32
+
33
+ def setup_server
34
+ @server = WEBrick::HTTPServer.new(
35
+ :BindAddress => "0.0.0.0",
36
+ :Logger => @logger,
37
+ :Port => Port,
38
+ :AccessLog => [],
39
+ :DocumentRoot => File.dirname(File.expand_path(__FILE__))
40
+ )
41
+ htpasswd = File.join(File.dirname(__FILE__), 'htpasswd')
42
+ htpasswd_userdb = WEBrick::HTTPAuth::Htpasswd.new(htpasswd)
43
+ @basic_auth = WEBrick::HTTPAuth::BasicAuth.new(
44
+ :Realm => 'auth',
45
+ :UserDB => htpasswd_userdb
46
+ )
47
+ @server.mount(
48
+ '/',
49
+ WEBrick::HTTPServlet::ProcHandler.new(method(:do_server_proc).to_proc)
50
+ )
51
+ @server_thread = TestUtil.start_server_thread(@server)
52
+ end
53
+
54
+ def setup_proxyserver
55
+ @proxyserver = WEBrick::HTTPProxyServer.new(
56
+ :BindAddress => "0.0.0.0",
57
+ :Logger => @logger,
58
+ :Port => ProxyPort,
59
+ :AccessLog => []
60
+ )
61
+ @proxyserver_thread = TestUtil.start_server_thread(@proxyserver)
62
+ end
63
+
64
+ def setup_client
65
+ @client = SOAP::RPC::Driver.new(@url, '')
66
+ @client.add_method("do_server_proc")
67
+ end
68
+
69
+ def teardown_server
70
+ @server.shutdown
71
+ @server_thread.kill
72
+ @server_thread.join
73
+ end
74
+
75
+ def teardown_proxyserver
76
+ @proxyserver.shutdown
77
+ @proxyserver_thread.kill
78
+ @proxyserver_thread.join
79
+ end
80
+
81
+ def teardown_client
82
+ @client.reset_stream
83
+ end
84
+
85
+ def do_server_proc(req, res)
86
+ @basic_auth.authenticate(req, res)
87
+ res['content-type'] = 'text/xml'
88
+ res.body = <<__EOX__
89
+ <?xml version="1.0" encoding="utf-8" ?>
90
+ <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
91
+ <env:Body>
92
+ <n1:do_server_proc xmlns:n1="urn:foo" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
93
+ <return>OK</return>
94
+ </n1:do_server_proc>
95
+ </env:Body>
96
+ </env:Envelope>
97
+ __EOX__
98
+ end
99
+
100
+ def test_direct
101
+ @client.wiredump_dev = STDOUT if $DEBUG
102
+ @client.options["protocol.http.auth"] << [@url, "admin", "admin"]
103
+ assert_equal("OK", @client.do_server_proc)
104
+ end
105
+
106
+ def test_proxy
107
+ setup_proxyserver
108
+ @client.wiredump_dev = STDOUT if $DEBUG
109
+ @client.options["protocol.http.proxy"] = @proxyurl
110
+ @client.options["protocol.http.auth"] << [@url, "guest", "guest"]
111
+ assert_equal("OK", @client.do_server_proc)
112
+ end
113
+ end
114
+
115
+
116
+ end; end
@@ -0,0 +1,117 @@
1
+ require 'test/unit'
2
+ require 'soap/rpc/driver'
3
+ require 'webrick'
4
+ require 'webrick/httpproxy'
5
+ require 'logger'
6
+ require File.join(File.dirname(File.expand_path(__FILE__)), '..', '..', 'testutil.rb')
7
+
8
+
9
+ module SOAP; module Auth
10
+
11
+
12
+ class TestDigest < Test::Unit::TestCase
13
+ Port = 17171
14
+ ProxyPort = 17172
15
+
16
+ def setup
17
+ @logger = Logger.new(STDERR)
18
+ @logger.level = Logger::Severity::ERROR
19
+ @url = "http://localhost:#{Port}/"
20
+ @proxyurl = "http://localhost:#{ProxyPort}/"
21
+ @server = @proxyserver = @client = nil
22
+ @server_thread = @proxyserver_thread = nil
23
+ setup_server
24
+ setup_client
25
+ end
26
+
27
+ def teardown
28
+ teardown_client
29
+ teardown_proxyserver if @proxyserver
30
+ teardown_server
31
+ end
32
+
33
+ def setup_server
34
+ @server = WEBrick::HTTPServer.new(
35
+ :BindAddress => "0.0.0.0",
36
+ :Logger => @logger,
37
+ :Port => Port,
38
+ :AccessLog => [],
39
+ :DocumentRoot => File.dirname(File.expand_path(__FILE__))
40
+ )
41
+ htdigest = File.join(File.dirname(__FILE__), 'htdigest')
42
+ htdigest_userdb = WEBrick::HTTPAuth::Htdigest.new(htdigest)
43
+ @digest_auth = WEBrick::HTTPAuth::DigestAuth.new(
44
+ :Algorithm => 'MD5',
45
+ :Realm => 'auth',
46
+ :UserDB => htdigest_userdb
47
+ )
48
+ @server.mount(
49
+ '/',
50
+ WEBrick::HTTPServlet::ProcHandler.new(method(:do_server_proc).to_proc)
51
+ )
52
+ @server_thread = TestUtil.start_server_thread(@server)
53
+ end
54
+
55
+ def setup_proxyserver
56
+ @proxyserver = WEBrick::HTTPProxyServer.new(
57
+ :BindAddress => "0.0.0.0",
58
+ :Logger => @logger,
59
+ :Port => ProxyPort,
60
+ :AccessLog => []
61
+ )
62
+ @proxyserver_thread = TestUtil.start_server_thread(@proxyserver)
63
+ end
64
+
65
+ def setup_client
66
+ @client = SOAP::RPC::Driver.new(@url, '')
67
+ @client.add_method("do_server_proc")
68
+ end
69
+
70
+ def teardown_server
71
+ @server.shutdown
72
+ @server_thread.kill
73
+ @server_thread.join
74
+ end
75
+
76
+ def teardown_proxyserver
77
+ @proxyserver.shutdown
78
+ @proxyserver_thread.kill
79
+ @proxyserver_thread.join
80
+ end
81
+
82
+ def teardown_client
83
+ @client.reset_stream
84
+ end
85
+
86
+ def do_server_proc(req, res)
87
+ @digest_auth.authenticate(req, res)
88
+ res['content-type'] = 'text/xml'
89
+ res.body = <<__EOX__
90
+ <?xml version="1.0" encoding="utf-8" ?>
91
+ <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
92
+ <env:Body>
93
+ <n1:do_server_proc xmlns:n1="urn:foo" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
94
+ <return>OK</return>
95
+ </n1:do_server_proc>
96
+ </env:Body>
97
+ </env:Envelope>
98
+ __EOX__
99
+ end
100
+
101
+ def test_direct
102
+ @client.wiredump_dev = STDOUT if $DEBUG
103
+ @client.options["protocol.http.auth"] << [@url, "admin", "admin"]
104
+ assert_equal("OK", @client.do_server_proc)
105
+ end
106
+
107
+ def test_proxy
108
+ setup_proxyserver
109
+ @client.wiredump_dev = STDOUT if $DEBUG
110
+ @client.options["protocol.http.proxy"] = @proxyurl
111
+ @client.options["protocol.http.auth"] << [@url, "guest", "guest"]
112
+ assert_equal("OK", @client.do_server_proc)
113
+ end
114
+ end
115
+
116
+
117
+ end; end
@@ -0,0 +1,2 @@
1
+ admin:Qg266hq/YYKe2
2
+ guest:gbPc4vPCH.h12
data/test/soap/ssl/README CHANGED
@@ -1 +1 @@
1
- * certificates and keys in this directory is copied from http-access2 test.
1
+ * certificates and keys in this directory is copied from httpclient test.
@@ -1,11 +1,11 @@
1
1
  require 'test/unit'
2
2
  begin
3
- require 'http-access2'
3
+ require 'httpclient'
4
4
  rescue LoadError
5
5
  end
6
6
  require 'soap/rpc/driver'
7
7
 
8
- if defined?(HTTPAccess2) and defined?(OpenSSL)
8
+ if defined?(HTTPClient) and defined?(OpenSSL)
9
9
 
10
10
  module SOAP; module SSL
11
11
 
@@ -58,7 +58,7 @@ class TestSSL < Test::Unit::TestCase
58
58
  @client.hello_world("ssl client")
59
59
  assert(false)
60
60
  rescue OpenSSL::SSL::SSLError => ssle
61
- assert_equal("certificate verify failed", ssle.message)
61
+ assert(/certificate verify failed/ =~ ssle.message)
62
62
  assert(@verify_callback_called)
63
63
  end
64
64
  #
@@ -69,7 +69,7 @@ class TestSSL < Test::Unit::TestCase
69
69
  @client.hello_world("ssl client")
70
70
  assert(false)
71
71
  rescue OpenSSL::SSL::SSLError => ssle
72
- assert_equal("certificate verify failed", ssle.message)
72
+ assert(/certificate verify failed/ =~ ssle.message)
73
73
  assert(@verify_callback_called)
74
74
  end
75
75
  #
@@ -79,7 +79,7 @@ class TestSSL < Test::Unit::TestCase
79
79
  @client.hello_world("ssl client")
80
80
  assert(false)
81
81
  rescue OpenSSL::SSL::SSLError => ssle
82
- assert_equal("certificate verify failed", ssle.message)
82
+ assert(/certificate verify failed/ =~ ssle.message)
83
83
  assert(@verify_callback_called)
84
84
  end
85
85
  #
@@ -94,7 +94,7 @@ class TestSSL < Test::Unit::TestCase
94
94
  @client.hello_world("ssl client")
95
95
  assert(false)
96
96
  rescue OpenSSL::SSL::SSLError => ssle
97
- assert_equal("certificate verify failed", ssle.message)
97
+ assert(/certificate verify failed/ =~ ssle.message)
98
98
  assert(@verify_callback_called)
99
99
  end
100
100
  #
@@ -105,7 +105,7 @@ class TestSSL < Test::Unit::TestCase
105
105
  @client.hello_world("ssl client")
106
106
  assert(false)
107
107
  rescue OpenSSL::SSL::SSLError => ssle
108
- assert_equal("certificate verify failed", ssle.message)
108
+ assert(/certificate verify failed/ =~ ssle.message)
109
109
  end
110
110
  #
111
111
  cfg["protocol.http.ssl_config.verify_mode"] = ""
@@ -135,7 +135,7 @@ __EOP__
135
135
  @client.hello_world("ssl client")
136
136
  assert(false)
137
137
  rescue OpenSSL::SSL::SSLError => ssle
138
- assert_equal("certificate verify failed", ssle.message)
138
+ assert(/certificate verify failed/ =~ ssle.message)
139
139
  assert(@verify_callback_called)
140
140
  end
141
141
  # NG with Integer
@@ -144,7 +144,7 @@ __EOP__
144
144
  @client.hello_world("ssl client")
145
145
  assert(false)
146
146
  rescue OpenSSL::SSL::SSLError => ssle
147
- assert_equal("certificate verify failed", ssle.message)
147
+ assert(/certificate verify failed/ =~ ssle.message)
148
148
  assert(@verify_callback_called)
149
149
  end
150
150
  # OK with empty
@@ -0,0 +1,112 @@
1
+ require 'test/unit'
2
+ require 'soap/rpc/driver'
3
+ require 'webrick'
4
+ require 'logger'
5
+ require File.join(File.dirname(File.expand_path(__FILE__)), '..', 'testutil.rb')
6
+
7
+
8
+ module SOAP
9
+
10
+
11
+ class TestCookie < Test::Unit::TestCase
12
+ Port = 17171
13
+
14
+ class CookieFilter < SOAP::Filter::StreamHandler
15
+ attr_accessor :cookie_value
16
+
17
+ def initialize
18
+ @cookie_value = nil
19
+ end
20
+
21
+ def on_http_outbound(req)
22
+ if @cookie_value
23
+ req.header.delete('Cookie')
24
+ req.header['Cookie'] = @cookie_value
25
+ end
26
+ end
27
+
28
+ def on_http_inbound(req, res)
29
+ # this sample filter only caputures the first cookie.
30
+ cookie = res.header['Set-Cookie'][0]
31
+ cookie.sub!(/;.*\z/, '') if cookie
32
+ @cookie_value = cookie
33
+ # do not save cookie value.
34
+ end
35
+ end
36
+
37
+ def setup
38
+ @logger = Logger.new(STDERR)
39
+ @logger.level = Logger::Severity::ERROR
40
+ @url = "http://localhost:#{Port}/"
41
+ @server = @client = nil
42
+ @server_thread = nil
43
+ setup_server
44
+ setup_client
45
+ end
46
+
47
+ def teardown
48
+ teardown_client
49
+ teardown_server
50
+ end
51
+
52
+ def setup_server
53
+ @server = WEBrick::HTTPServer.new(
54
+ :BindAddress => "0.0.0.0",
55
+ :Logger => @logger,
56
+ :Port => Port,
57
+ :AccessLog => [],
58
+ :DocumentRoot => File.dirname(File.expand_path(__FILE__))
59
+ )
60
+ @server.mount(
61
+ '/',
62
+ WEBrick::HTTPServlet::ProcHandler.new(method(:do_server_proc).to_proc)
63
+ )
64
+ @server_thread = TestUtil.start_server_thread(@server)
65
+ end
66
+
67
+ def setup_client
68
+ @client = SOAP::RPC::Driver.new(@url, '')
69
+ @client.add_method("do_server_proc")
70
+ end
71
+
72
+ def teardown_server
73
+ @server.shutdown
74
+ @server_thread.kill
75
+ @server_thread.join
76
+ end
77
+
78
+ def teardown_client
79
+ @client.reset_stream
80
+ end
81
+
82
+ def do_server_proc(req, res)
83
+ cookie = req['Cookie'].to_s
84
+ cookie = "var=hello world" if cookie.empty?
85
+ res['content-type'] = 'text/xml'
86
+ res['Set-Cookie'] = cookie
87
+ res.body = <<__EOX__
88
+ <?xml version="1.0" encoding="utf-8" ?>
89
+ <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
90
+ <env:Body>
91
+ <n1:do_server_proc xmlns:n1="urn:foo" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
92
+ <return xsi:nil="true"/>
93
+ </n1:do_server_proc>
94
+ </env:Body>
95
+ </env:Envelope>
96
+ __EOX__
97
+ end
98
+
99
+ def test_normal
100
+ @client.wiredump_dev = STDOUT if $DEBUG
101
+ filter = CookieFilter.new
102
+ @client.streamhandler.filterchain << filter
103
+ assert_nil(@client.do_server_proc)
104
+ assert_equal('var=hello world', filter.cookie_value)
105
+ filter.cookie_value = 'var=empty'
106
+ assert_nil(@client.do_server_proc)
107
+ assert_equal('var=empty', filter.cookie_value)
108
+ end
109
+ end
110
+
111
+
112
+ end