soap4r 1.5.6 → 1.5.7

Sign up to get free protection for your applications and to get access to all the features.
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