ruote-stomp 2.2.0.a

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