actionservice 0.2.100 → 0.2.102

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.
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/abstract_unit'
2
+ require 'soap/rpc/element'
3
+
4
+ class AbstractSoapTest < Test::Unit::TestCase
5
+ def default_test
6
+ end
7
+
8
+ protected
9
+ def service_name
10
+ raise NotImplementedError
11
+ end
12
+
13
+ def do_soap_call(public_method_name, *args)
14
+ mapper = @container.class.soap_mapper
15
+ param_def = []
16
+ i = 1
17
+ args.each do |arg|
18
+ mapping = mapper.lookup(arg.class)
19
+ param_def << ["in", "param#{i}", mapping.registry_mapping]
20
+ i += 1
21
+ end
22
+ qname = XSD::QName.new('urn:ActionService', public_method_name)
23
+ request = SOAP::RPC::SOAPMethodRequest.new(qname, param_def)
24
+ soap_args = []
25
+ i = 1
26
+ args.each do |arg|
27
+ soap_args << ["param#{i}", SOAP::Mapping.obj2soap(arg)]
28
+ i += 1
29
+ end
30
+ request.set_param(soap_args)
31
+ header = SOAP::SOAPHeader.new
32
+ body = SOAP::SOAPBody.new(request)
33
+ envelope = SOAP::SOAPEnvelope.new(header, body)
34
+ raw_request = SOAP::Processor.marshal(envelope)
35
+ test_request = ActionController::TestRequest.new
36
+ test_request.request_parameters['action'] = service_name
37
+ test_request.env['REQUEST_METHOD'] = "POST"
38
+ test_request.env['HTTP_CONTENTTYPE'] = 'text/xml'
39
+ test_request.env['HTTP_SOAPACTION'] = "/soap/#{service_name}/#{public_method_name}"
40
+ test_request.env['RAW_POST_DATA'] = raw_request
41
+ test_response = ActionController::TestResponse.new
42
+ response = yield test_request, test_response
43
+ raw_body = response.respond_to?(:body) ? response.body : response.raw_body
44
+ envelope = SOAP::Processor.unmarshal(raw_body)
45
+ SOAP::Mapping.soap2obj(envelope.body.response) if envelope.body.response
46
+ end
47
+ end
data/test/base_test.rb CHANGED
@@ -1,51 +1,53 @@
1
1
  require File.dirname(__FILE__) + '/abstract_unit'
2
2
 
3
- class BaseTestService < ActionService::Base
4
- def add(a, b)
3
+ module BaseTest
4
+ class Service < ActionService::Base
5
+ def add(a, b)
6
+ end
7
+
8
+ def void
9
+ end
10
+
11
+ export :add, :expects => [Integer, Integer], :returns => [Integer]
12
+ export :void
13
+ end
14
+
15
+ class BaseTest::UnmangledOrReportedService < ActionService::Base
16
+ export_name_mangling false
17
+ report_exceptions false
18
+
19
+ def custom_name_casing
20
+ end
21
+
22
+ export :custom_name_casing
5
23
  end
6
-
7
- def void
8
- end
9
-
10
- export :add, :expects => [Integer, Integer], :returns => [Integer]
11
- export :void
12
- end
13
-
14
- class UnmangledOrReportedService < ActionService::Base
15
- export_name_mangling false
16
- report_exceptions false
17
-
18
- def custom_name_casing
19
- end
20
-
21
- export :custom_name_casing
22
24
  end
23
25
 
24
- class BaseTest < Test::Unit::TestCase
26
+ class TC_Base < Test::Unit::TestCase
25
27
  def test_exports
26
- assert(BaseTestService.has_export?(:add))
27
- assert(BaseTestService.exports.keys.map{|x|x.to_s}.sort == ['add', 'void'])
28
+ assert(BaseTest::Service.has_export?(:add))
29
+ assert(BaseTest::Service.exports.keys.map{|x|x.to_s}.sort == ['add', 'void'])
28
30
  end
29
31
 
30
32
  def test_signatures
31
- expects = BaseTestService.exports[:add][:expects]
33
+ expects = BaseTest::Service.exports[:add][:expects]
32
34
  assert(expects == [Integer, Integer])
33
- returns = BaseTestService.exports[:add][:returns]
35
+ returns = BaseTest::Service.exports[:add][:returns]
34
36
  assert(returns == [Integer])
35
37
  end
36
38
 
37
39
  def test_options
38
- assert(UnmangledOrReportedService.export_name_mangling == false)
39
- assert(UnmangledOrReportedService.report_exceptions == false)
40
+ assert(BaseTest::UnmangledOrReportedService.export_name_mangling == false)
41
+ assert(BaseTest::UnmangledOrReportedService.report_exceptions == false)
40
42
  end
41
43
 
42
44
  def test_mangling
43
- assert(BaseTestService.has_public_export?('Add'))
44
- assert(BaseTestService.internal_export_name('Add') == :add)
45
- assert(UnmangledOrReportedService.public_export_name(:custom_name_casing) == 'custom_name_casing')
45
+ assert(BaseTest::Service.has_public_export?('Add'))
46
+ assert(BaseTest::Service.internal_export_name('Add') == :add)
47
+ assert(BaseTest::UnmangledOrReportedService.public_export_name(:custom_name_casing) == 'custom_name_casing')
46
48
  end
47
49
 
48
50
  def test_missing_method
49
- assert(BaseTestService.has_public_export?('NoSuchMethod') == false)
51
+ assert(BaseTest::Service.has_public_export?('NoSuchMethod') == false)
50
52
  end
51
53
  end
@@ -1,46 +1,67 @@
1
1
  require File.dirname(__FILE__) + '/abstract_unit'
2
2
 
3
- class AbstractTestContainer
4
- end
5
-
6
- AbstractTestContainer.class_eval do
7
- include ActionService::Container
8
- end
9
-
10
- $immediate_service = Object.new
11
- $deferred_service = Object.new
12
-
13
- class TestContainer < AbstractTestContainer
14
- attr :flag
15
- attr :previous_flag
16
-
17
- def initialize
18
- @previous_flag = nil
19
- @flag = true
3
+ module ContainerTest
4
+ class AbstractContainer
5
+ end
6
+
7
+ AbstractContainer.class_eval do
8
+ include ActionService::Exporting
9
+ include ActionService::Container
10
+ end
11
+
12
+ $immediate_service = Object.new
13
+ $deferred_service = Object.new
14
+
15
+ class DelegateContainer < AbstractContainer
16
+ service_dispatching_mode :delegated
17
+
18
+ attr :flag
19
+ attr :previous_flag
20
+
21
+ def initialize
22
+ @previous_flag = nil
23
+ @flag = true
24
+ end
25
+
26
+ service :immediate_service, $immediate_service
27
+ service(:deferred_service) { @previous_flag = @flag; @flag = false; $deferred_service }
28
+ end
29
+
30
+ class DirectContainer < AbstractContainer
31
+ service_dispatching_mode :direct
32
+ export_name_mangling false
33
+
34
+ def findNodes
35
+ end
36
+
37
+ export :findNodes
20
38
  end
21
-
22
- service :immediate_service, $immediate_service
23
- service(:deferred_service) { @previous_flag = @flag; @flag = false; $deferred_service }
24
39
  end
25
40
 
26
- class ContainerTest < Test::Unit::TestCase
41
+ class TC_Container < Test::Unit::TestCase
27
42
  def setup
28
- @container = TestContainer.new
43
+ @delegate_container = ContainerTest::DelegateContainer.new
44
+ @direct_container = ContainerTest::DirectContainer.new
29
45
  end
30
46
 
31
47
  def test_registration
32
- assert(TestContainer.has_service?(:immediate_service))
33
- assert(TestContainer.has_service?(:deferred_service))
34
- assert(!TestContainer.has_service?(:fake_service))
48
+ assert(ContainerTest::DelegateContainer.has_service?(:immediate_service))
49
+ assert(ContainerTest::DelegateContainer.has_service?(:deferred_service))
50
+ assert(!ContainerTest::DelegateContainer.has_service?(:fake_service))
35
51
  end
36
52
 
37
53
  def test_service_object
38
- assert(@container.flag == true)
39
- assert(@container.service_object(:immediate_service) == $immediate_service)
40
- assert(@container.previous_flag.nil?)
41
- assert(@container.flag == true)
42
- assert(@container.service_object(:deferred_service) == $deferred_service)
43
- assert(@container.previous_flag == true)
44
- assert(@container.flag == false)
54
+ assert(@delegate_container.flag == true)
55
+ assert(@delegate_container.service_object(:immediate_service) == $immediate_service)
56
+ assert(@delegate_container.previous_flag.nil?)
57
+ assert(@delegate_container.flag == true)
58
+ assert(@delegate_container.service_object(:deferred_service) == $deferred_service)
59
+ assert(@delegate_container.previous_flag == true)
60
+ assert(@delegate_container.flag == false)
61
+ end
62
+
63
+ def test_direct_container
64
+ assert(ContainerTest::DirectContainer.has_export?(:findNodes))
65
+ assert(!ContainerTest::DirectContainer.has_export?(:fakeExport))
45
66
  end
46
67
  end
@@ -1,105 +1,108 @@
1
1
  require File.dirname(__FILE__) + '/abstract_unit'
2
2
 
3
- class InvocationTestService < ActionService::Base
4
- attr_accessor :before_invoked
5
- attr_accessor :after_invoked
6
- attr_accessor :only_invoked
7
- attr_accessor :invocation_result
8
-
9
- def initialize
10
- @before_invoked = nil
11
- @after_invoked = nil
12
- @only_invoked = nil
13
- @invocation_result = nil
14
- end
15
-
16
- def add(a, b)
17
- a + b
18
- end
19
-
20
- def transmogrify(str)
21
- str.upcase
22
- end
3
+ module InvocationTest
4
+ class Service < ActionService::Base
5
+ attr_accessor :before_invoked
6
+ attr_accessor :after_invoked
7
+ attr_accessor :only_invoked
8
+ attr_accessor :invocation_result
23
9
 
24
- def fail_with_reason
25
- end
26
-
27
- def fail_generic
28
- end
29
-
30
- def no_before
31
- 5
32
- end
33
-
34
- def no_after
35
- end
36
-
37
- def only_one
38
- end
39
-
40
- def only_two
41
- end
42
-
43
- def not_exported
44
- end
45
-
46
- export :add, :expects => [Integer, Integer], :returns => [Integer]
47
- export :transmogrify, :expects_and_returns => [String]
48
- export :fail_with_reason
49
- export :fail_generic
50
- export :no_before
51
- export :no_after
52
- export :only_one
53
- export :only_two
54
-
55
- before_invocation :intercept_before, :except => [:no_before]
56
- after_invocation :intercept_after, :except => [:no_after]
57
-
58
- before_invocation :intercept_only, :only => [:only_one, :only_two]
59
-
60
- protected
61
- def intercept_before(name, args)
62
- @before_invoked = name
63
- return [false, "permission denied"] if name == :fail_with_reason
64
- return false if name == :fail_generic
10
+ def initialize
11
+ @before_invoked = nil
12
+ @after_invoked = nil
13
+ @only_invoked = nil
14
+ @invocation_result = nil
65
15
  end
66
-
67
- def intercept_after(name, args, result)
68
- @after_invoked = name
69
- @invocation_result = result
16
+
17
+ def add(a, b)
18
+ a + b
70
19
  end
71
-
72
- def intercept_only(name, args)
73
- raise "Interception error" unless name == :only_one || name == :only_two
74
- @only_invoked = name
20
+
21
+ def transmogrify(str)
22
+ str.upcase
23
+ end
24
+
25
+ def fail_with_reason
26
+ end
27
+
28
+ def fail_generic
29
+ end
30
+
31
+ def no_before
32
+ 5
33
+ end
34
+
35
+ def no_after
36
+ end
37
+
38
+ def only_one
39
+ end
40
+
41
+ def only_two
42
+ end
43
+
44
+ def not_exported
75
45
  end
46
+
47
+ export :add, :expects => [Integer, Integer], :returns => [Integer]
48
+ export :transmogrify, :expects_and_returns => [String]
49
+ export :fail_with_reason
50
+ export :fail_generic
51
+ export :no_before
52
+ export :no_after
53
+ export :only_one
54
+ export :only_two
55
+
56
+ before_invocation :intercept_before, :except => [:no_before]
57
+ after_invocation :intercept_after, :except => [:no_after]
58
+
59
+ before_invocation :intercept_only, :only => [:only_one, :only_two]
60
+
61
+ protected
62
+ def intercept_before(name, args)
63
+ @before_invoked = name
64
+ return [false, "permission denied"] if name == :fail_with_reason
65
+ return false if name == :fail_generic
66
+ end
67
+
68
+ def intercept_after(name, args, result)
69
+ @after_invoked = name
70
+ @invocation_result = result
71
+ end
72
+
73
+ def intercept_only(name, args)
74
+ raise "Interception error" unless name == :only_one || name == :only_two
75
+ @only_invoked = name
76
+ end
77
+ end
76
78
  end
77
79
 
78
- class InvocationTest < Test::Unit::TestCase
80
+ class TC_Invocation < Test::Unit::TestCase
81
+ include ActionService::Invocation
79
82
 
80
83
  def setup
81
- @service = InvocationTestService.new
84
+ @service = InvocationTest::Service.new
82
85
  end
83
86
 
84
87
  def test_invocation
85
- assert(@service.perform_invocation(:add, [5, 10]) == 15)
86
- assert(@service.perform_invocation(:transmogrify, "hello") == "HELLO")
87
- assert_raises(ActionService::Invocation::InvocationError) do
88
- @service.perform_invocation(:not_exported)
88
+ assert(perform_invocation(:add, 5, 10) == 15)
89
+ assert(perform_invocation(:transmogrify, "hello") == "HELLO")
90
+ assert_raises(InvocationError) do
91
+ perform_invocation(:not_exported)
89
92
  end
90
- assert_raises(ActionService::Invocation::InvocationError) do
91
- @service.perform_invocation(:nonexistent_method_xyzzy)
93
+ assert_raises(InvocationError) do
94
+ perform_invocation(:nonexistent_method_xyzzy)
92
95
  end
93
96
  end
94
97
 
95
98
  def test_interceptor_registration
96
- assert(InvocationTestService.before_invocation_interceptors.length == 2)
97
- assert(InvocationTestService.after_invocation_interceptors.length == 1)
99
+ assert(InvocationTest::Service.before_invocation_interceptors.length == 2)
100
+ assert(InvocationTest::Service.after_invocation_interceptors.length == 1)
98
101
  end
99
102
 
100
103
  def test_interception
101
104
  assert(@service.before_invoked.nil? && @service.after_invoked.nil? && @service.only_invoked.nil? && @service.invocation_result.nil?)
102
- @service.perform_invocation(:add, [20, 50])
105
+ perform_invocation(:add, 20, 50)
103
106
  assert(@service.before_invoked == :add)
104
107
  assert(@service.after_invoked == :add)
105
108
  assert(@service.invocation_result == 70)
@@ -107,14 +110,14 @@ class InvocationTest < Test::Unit::TestCase
107
110
 
108
111
  def test_interception_canceling
109
112
  reason = nil
110
- @service.perform_invocation(:fail_with_reason){|r| reason = r}
113
+ perform_invocation(:fail_with_reason){|r| reason = r}
111
114
  assert(@service.before_invoked == :fail_with_reason)
112
115
  assert(@service.after_invoked.nil?)
113
116
  assert(@service.invocation_result.nil?)
114
117
  assert(reason == "permission denied")
115
118
  reason = true
116
119
  @service.before_invoked = @service.after_invoked = @service.invocation_result = nil
117
- @service.perform_invocation(:fail_generic){|r| reason = r}
120
+ perform_invocation(:fail_generic){|r| reason = r}
118
121
  assert(@service.before_invoked == :fail_generic)
119
122
  assert(@service.after_invoked.nil?)
120
123
  assert(@service.invocation_result.nil?)
@@ -122,12 +125,12 @@ class InvocationTest < Test::Unit::TestCase
122
125
  end
123
126
 
124
127
  def test_interception_except_conditions
125
- @service.perform_invocation(:no_before)
128
+ perform_invocation(:no_before)
126
129
  assert(@service.before_invoked.nil?)
127
130
  assert(@service.after_invoked == :no_before)
128
131
  assert(@service.invocation_result == 5)
129
132
  @service.before_invoked = @service.after_invoked = @service.invocation_result = nil
130
- @service.perform_invocation(:no_after)
133
+ perform_invocation(:no_after)
131
134
  assert(@service.before_invoked == :no_after)
132
135
  assert(@service.after_invoked.nil?)
133
136
  assert(@service.invocation_result.nil?)
@@ -135,10 +138,18 @@ class InvocationTest < Test::Unit::TestCase
135
138
 
136
139
  def test_interception_only_conditions
137
140
  assert(@service.only_invoked.nil?)
138
- @service.perform_invocation(:only_one)
141
+ perform_invocation(:only_one)
139
142
  assert(@service.only_invoked == :only_one)
140
143
  @service.only_invoked = nil
141
- @service.perform_invocation(:only_two)
144
+ perform_invocation(:only_two)
142
145
  assert(@service.only_invoked == :only_two)
143
146
  end
147
+
148
+ private
149
+ def perform_invocation(method_name, *args, &block)
150
+ public_method_name = @service.class.public_export_name(method_name)
151
+ args ||= []
152
+ request = InvocationRequest.new(ConcreteInvocation, public_method_name, method_name, args)
153
+ @service.perform_invocation(request, &block)
154
+ end
144
155
  end
@@ -13,21 +13,20 @@ module Foo
13
13
  end
14
14
 
15
15
  class FooFullProtocol < AbstractProtocol
16
- def request_supported?(request)
17
- true
16
+ def self.create_protocol_request(klass, request)
17
+ protocol = FooFullProtocol.new klass
18
+ ActionService::Protocol::ProtocolRequest.new(protocol, '', '', '', '')
18
19
  end
19
20
  end
20
21
 
21
22
  class FooMinimalProtocol < AbstractProtocol
22
- def request_supported?(request)
23
- true
23
+ def self.create_protocol_request(klass, request)
24
+ protocol = FooMinimalProtocol.new klass
25
+ ActionService::Protocol::ProtocolRequest.new(protocol, '', '', '', '')
24
26
  end
25
27
  end
26
28
 
27
29
  class FooMinimalProtocolTwo < AbstractProtocol
28
- def request_supported?(request)
29
- false
30
- end
31
30
  end
32
31
  end
33
32
 
@@ -39,16 +38,16 @@ class ProtocolRegistry
39
38
  header_and_body_protocols + body_only_protocols
40
39
  end
41
40
 
42
- def request_protocol
41
+ def protocol_request
43
42
  probe_request_protocol(nil)
44
43
  end
45
44
  end
46
45
 
47
46
 
48
- class ProtocolRegistryTest < Test::Unit::TestCase
47
+ class TC_ProtocolRegistry < Test::Unit::TestCase
49
48
  def test_registration
50
49
  registry = ProtocolRegistry.new
51
50
  assert(registry.all_protocols.length == 4)
52
- assert(registry.request_protocol.is_a?(Foo::FooFullProtocol))
51
+ assert(registry.protocol_request.protocol.is_a?(Foo::FooFullProtocol))
53
52
  end
54
53
  end