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

root/trunk/test/wsdl/fault/test_multifault.rb

Revision 2006, 4.1 kB (checked in by nahi, 1 year ago)
  • update tests for the previous change ('in' -> :in)
Line 
1 require 'test/unit'
2 require 'wsdl/soap/wsdl2ruby'
3 require 'soap/wsdlDriver'
4 require File.join(File.dirname(File.expand_path(__FILE__)), '..', '..', 'testutil.rb')
5
6
7 module WSDL; module Fault
8
9
10 class TestMultiFault < Test::Unit::TestCase
11   DIR = File.dirname(File.expand_path(__FILE__))
12   Port = 17171
13
14   def setup
15     setup_classdef
16     setup_server
17     @client = nil
18   end
19
20   def teardown
21     teardown_server if @server
22     unless $DEBUG
23       File.unlink(pathname('Add.rb'))
24       File.unlink(pathname('AddMappingRegistry.rb'))
25       File.unlink(pathname('AddServant.rb'))
26       File.unlink(pathname('AddService.rb'))
27     end
28     @client.reset_stream if @client
29   end
30
31   def setup_server
32     AddPortType.class_eval do
33       define_method(:add) do |request|
34         @sum ||= 0
35         if (request.value > 100)
36           fault = AddFault.new("Value #{request.value} is too large", "Critical")
37           raise fault
38         end
39
40         if (request.value < 0)
41           fault = NegativeValueFault.new("Value #{request.value} is negative", "Fatal")
42           raise fault
43         end
44
45         @sum += request.value
46         return AddResponse.new(@sum)
47       end
48     end
49     @server = AddPortTypeApp.new('app', nil, '0.0.0.0', Port)
50     @server.level = Logger::Severity::ERROR
51     @server_thread = TestUtil.start_server_thread(@server)
52   end
53
54   def setup_classdef
55     gen = WSDL::SOAP::WSDL2Ruby.new
56     gen.location = pathname("multifault.wsdl")
57     gen.basedir = DIR
58     gen.logger.level = Logger::FATAL
59     gen.opt['module_path'] = self.class.to_s.sub(/::[^:]+$/, '')
60     gen.opt['classdef'] = nil
61     gen.opt['mapping_registry'] = nil
62     gen.opt['servant_skelton'] = nil
63     gen.opt['standalone_server_stub'] = nil
64     gen.opt['force'] = true
65     TestUtil.silent do
66       gen.run
67     end
68     TestUtil.require(DIR, 'Add.rb', 'AddMappingRegistry.rb', 'AddServant.rb', 'AddService.rb')
69   end
70
71   def teardown_server
72     @server.shutdown
73     @server_thread.kill
74     @server_thread.join
75   end
76
77   def pathname(filename)
78     File.join(DIR, filename)
79   end
80
81   def test_driver
82     @client = ::SOAP::RPC::Driver.new("http://localhost:#{Port}/")
83     @client.mapping_registry = AddMappingRegistry::EncodedRegistry
84     @client.literal_mapping_registry = AddMappingRegistry::LiteralRegistry
85     @client.add_document_operation(
86       "Add",
87       "add",
88       [ [:in, "request", ["::SOAP::SOAPElement", "http://fault.test/Faulttest", "Add"]],
89         [:out, "response", ["::SOAP::SOAPElement", "http://fault.test/Faulttest", "AddResponse"]] ],
90       { :request_style =>  :document, :request_use =>  :literal,
91         :response_style => :document, :response_use => :literal,
92         :faults => {"AddFault"=>{:namespace=>nil, :name=>"AddFault", :use=>"literal", :encodingstyle=>"document", :ns=>"http://fault.test/Faulttest"}} }
93     )
94     @client.wiredump_dev = STDOUT if $DEBUG
95     do_test(@client)
96   end
97
98   def test_wsdl
99     wsdl = File.join(DIR, 'multifault.wsdl')
100     @client = ::SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
101     @client.endpoint_url = "http://localhost:#{Port}/"
102     @client.mapping_registry = AddMappingRegistry::EncodedRegistry
103     @client.literal_mapping_registry = AddMappingRegistry::LiteralRegistry
104     @client.wiredump_dev = STDOUT if $DEBUG
105     do_test(@client)
106   end
107
108   def do_test(client)
109     assert_equal(100, client.add(Add.new(100)).sum)
110     assert_equal(100, client.add(Add.new(0)).sum)
111     assert_equal(150, client.add(Add.new(50)).sum)
112     begin
113       client.add(Add.new(101))
114       assert(false)
115     rescue Exception => e
116       assert_equal(::SOAP::FaultError, e.class)
117       assert_equal("WSDL::Fault::AddFault", e.faultstring.data)
118       assert_equal("Value 101 is too large", e.detail.addFault.reason)
119       assert_equal("Critical", e.detail.addFault.severity)
120     end
121     begin
122       client.add(Add.new(-50))
123       assert(false)
124     rescue Exception => e
125       assert_equal(::SOAP::FaultError, e.class)
126       assert_equal("WSDL::Fault::NegativeValueFault", e.faultstring.data)
127       assert_equal("Value -50 is negative", e.detail.negativeValueFault.reason)
128       assert_equal("Fatal", e.detail.negativeValueFault.severity)
129     end
130   end
131 end
132
133
134 end; end
Note: See TracBrowser for help on using the browser.