ruote-stomp-maestrodev 2.2.2

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,126 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ require 'ruote/participant'
4
+
5
+ describe RuoteStomp::Receiver do
6
+
7
+ after(:each) do
8
+ purge_engine
9
+ end
10
+
11
+ it "handles replies" do
12
+ pdef = Ruote.process_definition :name => 'test' do
13
+ set :field => 'foo', :value => 'foo'
14
+ sequence do
15
+ echo '${f:foo}'
16
+ stomp :queue => '/queue/test3'
17
+ echo '${f:foo}'
18
+ end
19
+ end
20
+
21
+ @engine.register_participant(:stomp, RuoteStomp::ParticipantProxy)
22
+
23
+ receiver = RuoteStomp::Receiver.new(@engine, :ignore_disconnect_on_process => true)
24
+
25
+ wfid = @engine.launch(pdef)
26
+
27
+ workitem = nil
28
+
29
+ begin
30
+ Timeout::timeout(5) do
31
+
32
+ $stomp.subscribe("/queue/test3") do |message|
33
+ wi = Ruote::Workitem.new(Rufus::Json.decode(message.body))
34
+ workitem = wi if wi.wfid == wfid
35
+ end
36
+
37
+ loop do
38
+ break unless workitem.nil?
39
+ sleep 0.1
40
+ end
41
+ end
42
+ rescue Timeout::Error
43
+ fail "Timeout waiting for message"
44
+ end
45
+
46
+ workitem.fields['foo'] = "bar"
47
+
48
+ $stomp.send '/queue/ruote_workitems', Rufus::Json.encode(workitem.to_h)
49
+
50
+ @engine.wait_for(wfid)
51
+
52
+ @engine.should_not have_errors
53
+ @engine.should_not have_remaining_expressions
54
+
55
+ @tracer.to_s.should == "foo\nbar"
56
+ receiver.stop
57
+ end
58
+
59
+ it "launches processes" do
60
+
61
+ json = {
62
+ 'definition' => %{
63
+ Ruote.process_definition :name => 'test' do
64
+ sequence do
65
+ echo '${f:foo}'
66
+ end
67
+ end
68
+ },
69
+ 'fields' => { 'foo' => 'bar' }
70
+ }.to_json
71
+
72
+ receiver = RuoteStomp::Receiver.new(@engine, {:launchitems => true, :unsubscribe => true, :ignore_disconnect_on_process => true})
73
+
74
+ finished_processing = false
75
+
76
+ $stomp.send('/queue/ruote_workitems', json) do |r|
77
+ finished_processing = true
78
+ end
79
+
80
+ begin
81
+ Timeout::timeout(20) do
82
+ while @tracer.to_s.empty?
83
+ print "*"
84
+ sleep 1
85
+ end
86
+ end
87
+ rescue Timeout::Error
88
+ fail "Timeout waiting for message"
89
+ end
90
+
91
+ Thread.pass until finished_processing
92
+
93
+ @engine.should_not have_errors
94
+ @engine.should_not have_remaining_expressions
95
+
96
+ @tracer.to_s.should == 'bar'
97
+ receiver.stop
98
+ end
99
+
100
+ it 'accepts a custom :queue' do
101
+
102
+ RuoteStomp::Receiver.new(
103
+ @engine, :queue => '/queue/mario', :launchitems => true, :unsubscribe => true, :ignore_disconnect_on_process => true)
104
+
105
+ @engine.register_participant 'alpha', Ruote::StorageParticipant
106
+
107
+ json = Rufus::Json.encode({
108
+ 'definition' => "Ruote.define { alpha }"
109
+ })
110
+
111
+ $stomp.send '/queue/ruote_workitems', json
112
+
113
+ sleep 1
114
+
115
+ @engine.processes.size.should == 0
116
+ # nothing happened
117
+
118
+ $stomp.send '/queue/mario', json
119
+
120
+ sleep 1
121
+
122
+ @engine.processes.size.should == 1
123
+ # launch happened
124
+ end
125
+ end
126
+
@@ -0,0 +1,14 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe RuoteStomp do
4
+
5
+ it "uses persistent messages by default" do
6
+ RuoteStomp.use_persistent_messages?.should be_true
7
+ end
8
+
9
+ it "allows switching to transient messages" do
10
+ RuoteStomp.use_persistent_messages = false
11
+ RuoteStomp.use_persistent_messages?.should be_false
12
+ end
13
+ end
14
+
@@ -0,0 +1,97 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+
4
+ $:.unshift(File.join(File.dirname(__FILE__), '../lib'))
5
+ $:.unshift(File.join(File.dirname(__FILE__), '../../ruote/lib'))
6
+
7
+ require 'fileutils'
8
+ require 'json'
9
+ require 'timeout'
10
+
11
+ require 'ruote/engine'
12
+ require 'ruote/worker'
13
+ require 'ruote/storage/hash_storage'
14
+ require 'ruote/log/test_logger'
15
+ #require 'stomp_server'
16
+
17
+ require 'ruote-stomp'
18
+
19
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |path|
20
+ require(path)
21
+ }
22
+
23
+ # No Stomp auth is configured/required.
24
+ # test = Thread.new do
25
+ # EventMachine::run do
26
+ # config = StompServer::Configurator.new
27
+ # stomp = StompServer::Run.new(config.opts)
28
+ # stomp.start
29
+ #
30
+ # puts "Stomp protocol handler starting on #{config.opts[:host]} port #{config.opts[:port]}"
31
+ # EventMachine.start_server(config.opts[:host],
32
+ # config.opts[:port],
33
+ # StompServer::Protocols::Stomp) do |s|
34
+ # s.instance_eval {
35
+ # @@auth_required = false
36
+ # @@queue_manager = stomp.queue_manager
37
+ # @@topic_manager = stomp.topic_manager
38
+ # @@stompauth = stomp.stompauth
39
+ # }
40
+ # end
41
+ # end
42
+ # end
43
+
44
+ STOMP.settings[:user] = ""
45
+ STOMP.settings[:passcode] = ""
46
+ STOMP.settings[:host] = "127.0.0.1"
47
+ STOMP.settings[:port] = 61613
48
+ STOMP.settings[:reliable] = true
49
+
50
+ RSpec.configure do |config|
51
+
52
+ # config.fail_fast = true
53
+
54
+ config.include(RuoteSpecHelpers)
55
+
56
+ config.before(:each) do
57
+ @tracer = Tracer.new
58
+ @engine = Ruote::Engine.new(
59
+ Ruote::Worker.new(
60
+ Ruote::HashStorage.new('s_logger' => [ 'ruote/log/test_logger', 'Ruote::TestLogger' ])
61
+ )
62
+ )
63
+
64
+ @engine.add_service('tracer', @tracer)
65
+ #@engine.noisy = true
66
+ end
67
+
68
+ config.after(:each) do
69
+ @engine.context.storage.purge!
70
+ @engine.shutdown
71
+ end
72
+
73
+ config.after(:all) do
74
+ base = File.expand_path(File.dirname(__FILE__) + '/..')
75
+ FileUtils.rm_rf(base + '/logs')
76
+ FileUtils.rm_rf(base + '/work')
77
+ end
78
+ end
79
+
80
+ class Tracer
81
+ def initialize
82
+ @trace = ''
83
+ end
84
+ def to_s
85
+ @trace.to_s.strip
86
+ end
87
+ def << s
88
+ @trace << s
89
+ end
90
+ def clear
91
+ @trace = ''
92
+ end
93
+ def puts s
94
+ @trace << "#{s}\n"
95
+ end
96
+ end
97
+
@@ -0,0 +1,27 @@
1
+ module RuoteSpecHelpers
2
+
3
+ def purge_engine
4
+
5
+ # TODO : adapt to ruote 2.1.10
6
+ end
7
+
8
+ def run_definition(pdef)
9
+
10
+ wfid = @engine.launch(pdef)
11
+
12
+ #r = @engine.wait_for(wfid)
13
+ #@engine.wait_for(wfid) if r['action'] == 'ceased'
14
+ # # make sure to wait for 'terminated'
15
+ @engine.wait_for(:inactive)
16
+
17
+ @engine.should_not have_errors
18
+ @engine.should_not have_remaining_expressions
19
+
20
+ purge_engine
21
+ end
22
+
23
+ def noisy(on = true)
24
+ @engine.context.logger.noisy = on
25
+ end
26
+ end
27
+
@@ -0,0 +1,45 @@
1
+ RSpec::Matchers.define :have_errors do |*args|
2
+
3
+ match do |engine|
4
+
5
+ @ps = if wfid = args.shift
6
+ engine.processes(wfid)
7
+ else
8
+ engine.processes.first
9
+ end
10
+
11
+ @ps ? (@ps.errors.size != 0) : false
12
+ end
13
+
14
+ failure_message_for_should do |engine|
15
+ "Expected engine to have errors, but didn't"
16
+ end
17
+
18
+ failure_message_for_should_not do |engine|
19
+ "Expected the engine to not have errors, but it did.\n" +
20
+ @ps.errors.map { |e| " * error: #{e.message}\n\"#{e.trace}\"" }.join("\n")
21
+ end
22
+
23
+ description do
24
+ end
25
+ end
26
+
27
+ RSpec::Matchers.define :have_remaining_expressions do
28
+
29
+ match do |engine|
30
+ (engine.storage.get_many('expressions').size != 0)
31
+ end
32
+
33
+ failure_message_for_should do |engine|
34
+ "Expected engine to have processes remaining, but it didn't"
35
+ end
36
+
37
+ failure_message_for_should_not do |engine|
38
+ "Expected engine to have no processes remaining, but it did." +
39
+ "#{engine.storage.get_many('expressions').inspect}"
40
+ end
41
+
42
+ description do
43
+ end
44
+ end
45
+
@@ -0,0 +1,62 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ #
4
+ # NOTE : RuoteStomp::WorkitemListener has been depreacted in favour of
5
+ # RuoteStomp::Receiver
6
+ #
7
+
8
+ describe RuoteStomp::WorkitemListener do
9
+
10
+ after(:each) do
11
+ purge_engine
12
+ end
13
+
14
+ it "handles replies" do
15
+
16
+ pdef = Ruote.process_definition :name => 'test' do
17
+ set :field => 'foo', :value => 'foo'
18
+ sequence do
19
+ echo '${f:foo}'
20
+ stomp :queue => '/queue/test7'
21
+ echo '${f:foo}'
22
+ end
23
+ end
24
+
25
+ @engine.register_participant(:stomp, RuoteStomp::ParticipantProxy)
26
+
27
+ RuoteStomp::WorkitemListener.new(@engine, :unsubscribe => true, :ignore_disconnect_on_process => true)
28
+
29
+ wfid = @engine.launch(pdef)
30
+
31
+ workitem = nil
32
+
33
+ begin
34
+ Timeout::timeout(5) do
35
+
36
+ $stomp.subscribe("/queue/test7") do |message|
37
+ wi = Ruote::Workitem.new(Rufus::Json.decode(message.body))
38
+ workitem = wi if wi.wfid == wfid
39
+ end
40
+
41
+ loop do
42
+ break unless workitem.nil?
43
+ sleep 0.1
44
+ end
45
+ end
46
+ rescue Timeout::Error
47
+ fail "Timeout waiting for message"
48
+ end
49
+
50
+ workitem.fields['foo'] = 'bar'
51
+
52
+ $stomp.send '/queue/ruote_workitems', Rufus::Json.encode(workitem.to_h)
53
+
54
+ @engine.wait_for(wfid)
55
+
56
+ @engine.should_not have_errors
57
+ @engine.should_not have_remaining_expressions
58
+
59
+ @tracer.to_s.should == "foo\nbar"
60
+ end
61
+ end
62
+
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruote-stomp-maestrodev
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.2.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kit Plummer
9
+ - Brian Sam-Bodden
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-04-03 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: onstomp
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.4
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: 1.0.4
31
+ - !ruby/object:Gem::Dependency
32
+ name: ruote
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: 2.2.0
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 2.2.0
47
+ - !ruby/object:Gem::Dependency
48
+ name: json
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: parslet
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: rake
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: rspec
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: 2.6.0
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: 2.6.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: stompserver
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ~>
117
+ - !ruby/object:Gem::Version
118
+ version: 0.9.9
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ version: 0.9.9
127
+ description: Stomp participant/listener pair for ruote 2.2
128
+ email:
129
+ - kplummer@maestrodev.com
130
+ - bsbodden@integrallis.com
131
+ executables: []
132
+ extensions: []
133
+ extra_rdoc_files: []
134
+ files:
135
+ - Rakefile
136
+ - lib/ruote-stomp/launchitem_listener.rb
137
+ - lib/ruote-stomp/participant.rb
138
+ - lib/ruote-stomp/receiver.rb
139
+ - lib/ruote-stomp/version.rb
140
+ - lib/ruote-stomp/workitem_listener.rb
141
+ - lib/ruote-stomp.rb
142
+ - spec/launchitem_listener_spec.rb
143
+ - spec/participant_spec.rb
144
+ - spec/receiver_spec.rb
145
+ - spec/ruote_stomp_spec.rb
146
+ - spec/spec_helper.rb
147
+ - spec/support/ruote_helpers.rb
148
+ - spec/support/ruote_matchers.rb
149
+ - spec/workitem_listener_spec.rb
150
+ - ruote-stomp.gemspec
151
+ - CHANGELOG.txt
152
+ - CREDITS.txt
153
+ - PostInstall.txt
154
+ - TODO.txt
155
+ - README.rdoc
156
+ homepage: http://ruote.rubyforge.org
157
+ licenses: []
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ requirements: []
175
+ rubyforge_project: ruote
176
+ rubygems_version: 1.8.25
177
+ signing_key:
178
+ specification_version: 3
179
+ summary: Stomp participant/listener pair for ruote 2.2
180
+ test_files: []
181
+ has_rdoc: