ruote-stomp-maestrodev 2.2.2

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