ruote-amqp 2.1.5 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,126 @@
1
+
2
+ require File.join(File.dirname(__FILE__), 'spec_helper')
3
+
4
+ require 'ruote/participant'
5
+
6
+
7
+ describe RuoteAMQP::Receiver do
8
+
9
+ after(:each) do
10
+ purge_engine
11
+ end
12
+
13
+ it "handles replies" do
14
+
15
+ pdef = Ruote.process_definition :name => 'test' do
16
+ set :field => 'foo', :value => 'foo'
17
+ sequence do
18
+ echo '${f:foo}'
19
+ amqp :queue => 'test3'
20
+ echo '${f:foo}'
21
+ end
22
+ end
23
+
24
+ @engine.register_participant(:amqp, RuoteAMQP::ParticipantProxy)
25
+
26
+ RuoteAMQP::Receiver.new(@engine)
27
+
28
+ wfid = @engine.launch(pdef)
29
+
30
+ workitem = nil
31
+
32
+ begin
33
+ Timeout::timeout(5) do
34
+
35
+ MQ.queue('test3', :durable => true).subscribe { |msg|
36
+ wi = Ruote::Workitem.new(Rufus::Json.decode(msg))
37
+ workitem = wi if wi.wfid == wfid
38
+ }
39
+
40
+ loop do
41
+ break unless workitem.nil?
42
+ sleep 0.1
43
+ end
44
+ end
45
+ rescue Timeout::Error
46
+ violated "Timeout waiting for message"
47
+ end
48
+
49
+ workitem.fields['foo'] = "bar"
50
+
51
+ MQ.queue('ruote_workitems', :durable => true).publish(Rufus::Json.encode(workitem.to_h), :persistent => true)
52
+
53
+ @engine.wait_for(wfid)
54
+
55
+ @engine.should_not have_errors
56
+ @engine.should_not have_remaining_expressions
57
+
58
+ @tracer.to_s.should == "foo\nbar"
59
+ end
60
+
61
+ it "launches processes" do
62
+
63
+ json = {
64
+ 'definition' => %{
65
+ Ruote.process_definition :name => 'test' do
66
+ sequence do
67
+ echo '${f:foo}'
68
+ end
69
+ end
70
+ },
71
+ 'fields' => { 'foo' => 'bar' }
72
+ }.to_json
73
+
74
+ RuoteAMQP::Receiver.new(@engine, :launchitems => true, :unsubscribe => true)
75
+
76
+ MQ.queue(
77
+ 'ruote_workitems', :durable => true
78
+ ).publish(
79
+ json, :persistent => true
80
+ )
81
+
82
+ sleep 0.5
83
+
84
+ @engine.should_not have_errors
85
+ @engine.should_not have_remaining_expressions
86
+
87
+ @tracer.to_s.should == 'bar'
88
+ end
89
+
90
+ it 'accepts a custom :queue' do
91
+
92
+ #@engine.noisy = true
93
+
94
+ RuoteAMQP::Receiver.new(
95
+ @engine, :queue => 'mario', :launchitems => true, :unsubscribe => true)
96
+
97
+ @engine.register_participant 'alpha', Ruote::StorageParticipant
98
+
99
+ json = Rufus::Json.encode({
100
+ 'definition' => "Ruote.define { alpha }"
101
+ })
102
+
103
+ MQ.queue(
104
+ 'ruote_workitems', :durable => true
105
+ ).publish(
106
+ json, :persistent => true
107
+ )
108
+
109
+ sleep 1
110
+
111
+ @engine.processes.size.should == 0
112
+ # nothing happened
113
+
114
+ MQ.queue(
115
+ 'mario', :durable => true
116
+ ).publish(
117
+ json, :persistent => true
118
+ )
119
+
120
+ sleep 1
121
+
122
+ @engine.processes.size.should == 1
123
+ # launch happened
124
+ end
125
+ end
126
+
@@ -1,12 +1,18 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+
2
+ require File.join(File.dirname(__FILE__), 'spec_helper')
3
+
2
4
 
3
5
  describe RuoteAMQP do
4
- it "should use persistent messages by default" do
6
+
7
+ it "uses persistent messages by default" do
8
+
5
9
  RuoteAMQP.use_persistent_messages?.should be_true
6
10
  end
7
11
 
8
- it "should allow switching to transient messages" do
12
+ it "allows switching to transient messages" do
13
+
9
14
  RuoteAMQP.use_persistent_messages = false
10
15
  RuoteAMQP.use_persistent_messages?.should be_false
11
16
  end
12
17
  end
18
+
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,15 @@
1
+
1
2
  require 'rubygems'
2
- gem 'rspec'
3
- require 'spec'
3
+ require 'rspec'
4
4
 
5
- $:.unshift(File.dirname(__FILE__) + '/../lib')
6
- $:.unshift('../ruote/lib')
5
+ $:.unshift(File.join(File.dirname(__FILE__), '../lib'))
6
+ $:.unshift(File.join(File.dirname(__FILE__), '../../ruote/lib'))
7
7
 
8
- # For the tests to work you need to use the AMQP gem built from
9
- # http://github.com/kennethkalmer/amqp.git
10
- gem 'amqp', '=0.6.6'
8
+ #gem 'amqp', '=0.6.7'
11
9
 
12
10
  require 'fileutils'
13
11
  require 'json'
12
+ require 'timeout'
14
13
 
15
14
  require 'ruote/engine'
16
15
  require 'ruote/worker'
@@ -18,7 +17,10 @@ require 'ruote/storage/hash_storage'
18
17
  require 'ruote/log/test_logger'
19
18
 
20
19
  require 'ruote-amqp'
21
- require 'spec/ruote'
20
+
21
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |path|
22
+ require(path)
23
+ }
22
24
 
23
25
 
24
26
  # AMQP magic worked here
@@ -29,9 +31,9 @@ AMQP.settings[:pass] = 'ruote'
29
31
 
30
32
  #AMQP.logging = true
31
33
 
32
- Spec::Runner.configure do |config|
34
+ RSpec.configure do |config|
33
35
 
34
- config.include( RuoteSpecHelpers )
36
+ config.include(RuoteSpecHelpers)
35
37
 
36
38
  config.before(:each) do
37
39
  @tracer = Tracer.new
@@ -39,12 +41,9 @@ Spec::Runner.configure do |config|
39
41
  @engine = Ruote::Engine.new(
40
42
  Ruote::Worker.new(
41
43
  Ruote::HashStorage.new(
42
- 's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ]
43
- )
44
- )
45
- )
44
+ 's_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ])))
46
45
 
47
- @engine.add_service( 'tracer', @tracer )
46
+ @engine.add_service('tracer', @tracer)
48
47
  end
49
48
 
50
49
  config.after(:each) do
@@ -53,9 +52,9 @@ Spec::Runner.configure do |config|
53
52
  end
54
53
 
55
54
  config.after(:all) do
56
- base = File.expand_path( File.dirname(__FILE__) + '/..' )
57
- FileUtils.rm_rf( base + '/logs' )
58
- FileUtils.rm_rf( base + '/work' )
55
+ base = File.expand_path(File.dirname(__FILE__) + '/..')
56
+ FileUtils.rm_rf(base + '/logs')
57
+ FileUtils.rm_rf(base + '/work')
59
58
  end
60
59
  end
61
60
 
@@ -77,3 +76,4 @@ class Tracer
77
76
  @trace << "#{s}\n"
78
77
  end
79
78
  end
79
+
@@ -0,0 +1,29 @@
1
+
2
+ module RuoteSpecHelpers
3
+
4
+ def purge_engine
5
+
6
+ # TODO : adapt to ruote 2.1.10
7
+ end
8
+
9
+ def run_definition(pdef)
10
+
11
+ wfid = @engine.launch(pdef)
12
+
13
+ #r = @engine.wait_for(wfid)
14
+ #@engine.wait_for(wfid) if r['action'] == 'ceased'
15
+ # # make sure to wait for 'terminated'
16
+ @engine.wait_for(:inactive)
17
+
18
+ @engine.should_not have_errors
19
+ @engine.should_not have_remaining_expressions
20
+
21
+ purge_engine
22
+ end
23
+
24
+ def noisy(on = true)
25
+
26
+ @engine.context.logger.noisy = on
27
+ end
28
+ end
29
+
@@ -1,10 +1,10 @@
1
1
 
2
- Spec::Matchers.define :have_errors do |*args|
2
+ RSpec::Matchers.define :have_errors do |*args|
3
3
 
4
4
  match do |engine|
5
5
 
6
6
  @ps = if wfid = args.shift
7
- engine.processes( wfid )
7
+ engine.processes(wfid)
8
8
  else
9
9
  engine.processes.first
10
10
  end
@@ -13,21 +13,21 @@ Spec::Matchers.define :have_errors do |*args|
13
13
  end
14
14
 
15
15
  failure_message_for_should do |engine|
16
+
16
17
  "Expected engine to have errors, but didn't"
17
18
  end
19
+
18
20
  failure_message_for_should_not do |engine|
21
+
19
22
  "Expected the engine to not have errors, but it did.\n" +
20
- @ps.errors.map { |e|
21
- " * error: #{e.error_class} #{e.error_message} " +
22
- "\n\"#{e.error_backtrace.join("\n")}\""
23
- }.join("\n")
23
+ @ps.errors.map { |e| " * error: #{e.message}\n\"#{e.trace}\"" }.join("\n")
24
24
  end
25
+
25
26
  description do
26
- #
27
27
  end
28
28
  end
29
29
 
30
- Spec::Matchers.define :have_remaining_expressions do
30
+ RSpec::Matchers.define :have_remaining_expressions do
31
31
 
32
32
  match do |engine|
33
33
 
@@ -35,11 +35,16 @@ Spec::Matchers.define :have_remaining_expressions do
35
35
  end
36
36
 
37
37
  failure_message_for_should do |engine|
38
+
38
39
  "Expected engine to have processes remaining, but it didn't"
39
40
  end
41
+
40
42
  failure_message_for_should_not do |engine|
41
- "Expected engine to have no processes remaining, but it did.#{engine.storage.get_many('expressions').inspect}"
43
+
44
+ "Expected engine to have no processes remaining, but it did." +
45
+ "#{engine.storage.get_many('expressions').inspect}"
42
46
  end
47
+
43
48
  description do
44
49
  end
45
50
  end
@@ -1,31 +1,49 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+
2
+ require File.join(File.dirname(__FILE__), 'spec_helper')
3
+
4
+ #
5
+ # NOTE : RuoteAMQP::WorkitemListener has been depreacted in favour of
6
+ # RuoteAMQP::Receiver
7
+ #
8
+
2
9
 
3
10
  describe RuoteAMQP::WorkitemListener do
4
11
 
5
- it "should handle replies" do
12
+ after(:each) do
13
+ purge_engine
14
+ end
15
+
16
+ it "handles replies" do
6
17
 
7
18
  pdef = Ruote.process_definition :name => 'test' do
8
19
  set :field => 'foo', :value => 'foo'
9
20
  sequence do
10
21
  echo '${f:foo}'
11
- amqp :queue => 'test3'
22
+ amqp :queue => 'test7'
12
23
  echo '${f:foo}'
13
24
  end
14
25
  end
15
26
 
16
- @engine.register_participant( :amqp, RuoteAMQP::Participant )
27
+ @engine.register_participant(:amqp, RuoteAMQP::ParticipantProxy)
17
28
 
18
- RuoteAMQP::WorkitemListener.new( @engine )
29
+ RuoteAMQP::WorkitemListener.new(@engine, :unsubscribe => true)
19
30
 
20
- fei = @engine.launch pdef
31
+ #@engine.noisy = true
32
+
33
+ wfid = @engine.launch(pdef)
34
+
35
+ workitem = nil
21
36
 
22
37
  begin
23
38
  Timeout::timeout(5) do
24
- @msg = nil
25
- MQ.queue('test3').subscribe { |msg| @msg = msg }
39
+
40
+ MQ.queue('test7', :durable => true).subscribe { |msg|
41
+ wi = Ruote::Workitem.new(Rufus::Json.decode(msg))
42
+ workitem = wi if wi.wfid == wfid
43
+ }
26
44
 
27
45
  loop do
28
- break unless @msg.nil?
46
+ break unless workitem.nil?
29
47
  sleep 0.1
30
48
  end
31
49
  end
@@ -33,19 +51,16 @@ describe RuoteAMQP::WorkitemListener do
33
51
  violated "Timeout waiting for message"
34
52
  end
35
53
 
36
- wi = Ruote::Workitem.new( Rufus::Json.decode( @msg ) )
37
- wi.fields['foo'] = "bar"
54
+ workitem.fields['foo'] = 'bar'
38
55
 
39
- MQ.queue( wi.fields['params']['reply_queue'] ).publish( Rufus::Json.encode( wi.to_h ) )
56
+ MQ.queue('ruote_workitems', :durable => true).publish(Rufus::Json.encode(workitem.to_h), :persistent => true)
40
57
 
41
- @engine.context.logger.wait_for( fei )
58
+ @engine.wait_for(wfid)
42
59
 
43
60
  @engine.should_not have_errors
44
61
  @engine.should_not have_remaining_expressions
45
62
 
46
63
  @tracer.to_s.should == "foo\nbar"
47
-
48
- purge_engine
49
64
  end
50
65
  end
51
66
 
metadata CHANGED
@@ -1,126 +1,152 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruote-amqp
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.5
4
+ hash: 7
5
+ prerelease:
6
+ segments:
7
+ - 2
8
+ - 2
9
+ - 0
10
+ version: 2.2.0
5
11
  platform: ruby
6
12
  authors:
7
- - kenneth.kalmer@gmail.com
13
+ - Kenneth Kalmer
14
+ - John Mettraux
8
15
  autorequire:
9
16
  bindir: bin
10
17
  cert_chain: []
11
18
 
12
- date: 2010-02-04 00:00:00 +02:00
19
+ date: 2011-03-01 00:00:00 +09:00
13
20
  default_executable:
14
21
  dependencies:
15
22
  - !ruby/object:Gem::Dependency
16
- name: rufus-json
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ name: amqp
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
20
27
  requirements:
21
- - - ">="
28
+ - - "="
22
29
  - !ruby/object:Gem::Version
23
- version: 0.1.0
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: amqp
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ - 7
34
+ - 0
35
+ version: 0.7.0
27
36
  type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: ruote
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
30
43
  requirements:
31
44
  - - ">="
32
45
  - !ruby/object:Gem::Version
33
- version: 0.6.6
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: ruote
46
+ hash: 7
47
+ segments:
48
+ - 2
49
+ - 2
50
+ - 0
51
+ version: 2.2.0
37
52
  type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ name: rake
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
58
+ none: false
40
59
  requirements:
41
60
  - - ">="
42
61
  - !ruby/object:Gem::Version
43
- version: 2.1.5
44
- version:
62
+ hash: 3
63
+ segments:
64
+ - 0
65
+ version: "0"
66
+ type: :development
67
+ version_requirements: *id003
45
68
  - !ruby/object:Gem::Dependency
46
69
  name: rspec
47
- type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
50
73
  requirements:
51
74
  - - ">="
52
75
  - !ruby/object:Gem::Version
53
- version: "0"
54
- version:
55
- description:
56
- email: kenneth.kalmer@gmail.com
76
+ hash: 5
77
+ segments:
78
+ - 2
79
+ - 2
80
+ - 1
81
+ version: 2.2.1
82
+ type: :development
83
+ version_requirements: *id004
84
+ description: "\n\
85
+ AMQP participant/listener pair for ruote 2.1\n "
86
+ email:
87
+ - kenneth.kalmer@gmail.com
88
+ - jmettraux@gmail.com
57
89
  executables: []
58
90
 
59
91
  extensions: []
60
92
 
61
- extra_rdoc_files:
62
- - History.txt
63
- - Manifest.txt
64
- - PostInstall.txt
65
- - README.rdoc
66
- - TODO.txt
93
+ extra_rdoc_files: []
94
+
67
95
  files:
68
- - .gitignore
69
- - History.txt
70
- - Manifest.txt
71
- - PostInstall.txt
72
- - README.rdoc
73
96
  - Rakefile
74
- - TODO.txt
75
- - lib/ruote-amqp.rb
76
97
  - lib/ruote-amqp/launchitem_listener.rb
77
98
  - lib/ruote-amqp/participant.rb
99
+ - lib/ruote-amqp/receiver.rb
100
+ - lib/ruote-amqp/version.rb
78
101
  - lib/ruote-amqp/workitem_listener.rb
79
- - lib/spec/ruote.rb
80
- - lib/spec/ruote_example_group.rb
81
- - lib/spec/ruote_helpers.rb
82
- - lib/spec/ruote_matchers.rb
83
- - ruote-amqp.gemspec
84
- - script/console
85
- - script/destroy
86
- - script/generate
102
+ - lib/ruote-amqp.rb
87
103
  - spec/launchitem_listener_spec.rb
88
104
  - spec/participant_spec.rb
105
+ - spec/receiver_spec.rb
89
106
  - spec/ruote_amqp_spec.rb
90
- - spec/spec.opts
91
107
  - spec/spec_helper.rb
108
+ - spec/support/ruote_helpers.rb
109
+ - spec/support/ruote_matchers.rb
92
110
  - spec/workitem_listener_spec.rb
111
+ - ruote-amqp.gemspec
112
+ - CHANGELOG.txt
113
+ - CREDITS.txt
114
+ - PostInstall.txt
115
+ - TODO.txt
116
+ - README.rdoc
93
117
  has_rdoc: true
94
- homepage: http://github.com/kennethkalmer/ruote-amqp
118
+ homepage: http://ruote.rubyforge.org
95
119
  licenses: []
96
120
 
97
121
  post_install_message:
98
- rdoc_options:
99
- - --charset=UTF-8
122
+ rdoc_options: []
123
+
100
124
  require_paths:
101
125
  - lib
102
126
  required_ruby_version: !ruby/object:Gem::Requirement
127
+ none: false
103
128
  requirements:
104
129
  - - ">="
105
130
  - !ruby/object:Gem::Version
131
+ hash: 3
132
+ segments:
133
+ - 0
106
134
  version: "0"
107
- version:
108
135
  required_rubygems_version: !ruby/object:Gem::Requirement
136
+ none: false
109
137
  requirements:
110
138
  - - ">="
111
139
  - !ruby/object:Gem::Version
140
+ hash: 3
141
+ segments:
142
+ - 0
112
143
  version: "0"
113
- version:
114
144
  requirements: []
115
145
 
116
- rubyforge_project:
117
- rubygems_version: 1.3.5
146
+ rubyforge_project: ruote
147
+ rubygems_version: 1.5.0
118
148
  signing_key:
119
149
  specification_version: 3
120
150
  summary: AMQP participant/listener pair for ruote 2.1
121
- test_files:
122
- - spec/launchitem_listener_spec.rb
123
- - spec/participant_spec.rb
124
- - spec/ruote_amqp_spec.rb
125
- - spec/spec_helper.rb
126
- - spec/workitem_listener_spec.rb
151
+ test_files: []
152
+