pipeline_toolkit 1.2.7 → 1.2.8
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.
- data/README.markdown +4 -3
- data/lib/pipeline_toolkit/cli/msg_sink_cli.rb +2 -0
- data/lib/pipeline_toolkit/cucumber.rb +2 -2
- data/lib/pipeline_toolkit/cucumber/{in_out_process.rb → io_process.rb} +6 -6
- data/lib/pipeline_toolkit/cucumber/machine.rb +10 -13
- data/lib/pipeline_toolkit/cucumber/machine_steps.rb +2 -2
- data/lib/pipeline_toolkit/cucumber/pipeline_io.rb +37 -0
- data/lib/pipeline_toolkit/message_pusher.rb +1 -1
- data/lib/pipeline_toolkit/message_sink.rb +6 -2
- metadata +5 -5
- data/lib/pipeline_toolkit/cucumber/msg_sub_process.rb +0 -34
data/README.markdown
CHANGED
@@ -96,13 +96,14 @@ Pipeline toolkit also includes pre-canned cucumber steps for you to test your ma
|
|
96
96
|
|
97
97
|
Given I run this machine:
|
98
98
|
When I input these messages:
|
99
|
+
When I input these messages with ack_ids:
|
99
100
|
Then these messages are passed on:
|
100
101
|
Then these messages are acknowledged:
|
101
102
|
|
102
103
|
Given an amqp server running at "localhost" on port 1234
|
103
|
-
Given amqp queue "
|
104
|
-
When I input these messages to exchange "
|
105
|
-
Then these messages are on queue "
|
104
|
+
Given amqp queue "queue-name" is empty
|
105
|
+
When I input these messages to exchange "queue-name"
|
106
|
+
Then these messages are on queue "queue-name"
|
106
107
|
|
107
108
|
The steps are defined in the following files, so have a look at them to get more details
|
108
109
|
|
@@ -17,6 +17,8 @@ Message Sink
|
|
17
17
|
msg_sink
|
18
18
|
EOL
|
19
19
|
|
20
|
+
opt :acknowledge, "If flag is set then messages are acknowledged", :type => :flag, :short => :a
|
21
|
+
opt :out, "If flag is set then messages are printed to stdout in plain-text", :type => :flag, :short => :o
|
20
22
|
opt :env, "The environment to run (development, production)", :default => "development", :short => :e
|
21
23
|
end
|
22
24
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'pipeline_toolkit/cucumber/amqp'
|
2
|
-
require 'pipeline_toolkit/cucumber/
|
2
|
+
require 'pipeline_toolkit/cucumber/io_process'
|
3
|
+
require 'pipeline_toolkit/cucumber/pipeline_io'
|
3
4
|
require 'pipeline_toolkit/cucumber/machine'
|
4
|
-
require 'pipeline_toolkit/cucumber/msg_sub_process'
|
5
5
|
|
6
6
|
require 'pipeline_toolkit/cucumber/machine_steps'
|
7
7
|
require 'pipeline_toolkit/cucumber/amqp_steps'
|
@@ -5,7 +5,7 @@ module PipelineToolkit
|
|
5
5
|
|
6
6
|
# Provides an interface for running and interacting with a stdin/stdout process which
|
7
7
|
# talks messages.
|
8
|
-
class
|
8
|
+
class IOProcess
|
9
9
|
|
10
10
|
def run(command)
|
11
11
|
@process = BackgroundProcess.run("ruby -rubygems bin/#{command}")
|
@@ -23,13 +23,13 @@ module PipelineToolkit
|
|
23
23
|
@process.pid
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
# Gets the raw output of the process
|
27
|
+
def get_output(number, timeout = 5)
|
28
|
+
lines = []
|
28
29
|
get_lines(@process.stdout, number, timeout) do |line|
|
29
|
-
|
30
|
-
output_msgs << msg
|
30
|
+
lines << line
|
31
31
|
end
|
32
|
-
|
32
|
+
lines
|
33
33
|
end
|
34
34
|
|
35
35
|
private
|
@@ -5,29 +5,22 @@ module PipelineToolkit
|
|
5
5
|
module Cucumber
|
6
6
|
|
7
7
|
# Provides an interface for running and interacting with a pipeline_toolkit machine.
|
8
|
-
class Machine <
|
8
|
+
class Machine < IOProcess
|
9
|
+
include PipelineIO
|
9
10
|
|
10
11
|
attr_reader :use_acknowledgements
|
11
12
|
|
12
13
|
def run(command, use_acknowledgements = true)
|
13
14
|
super(command)
|
14
|
-
|
15
|
+
|
15
16
|
@use_acknowledgements = use_acknowledgements
|
16
|
-
setup_system
|
17
|
+
setup_system
|
17
18
|
end
|
18
19
|
|
19
20
|
def kill
|
20
21
|
destroy_sys_pipe
|
21
22
|
super
|
22
23
|
end
|
23
|
-
|
24
|
-
def input_messages(messages)
|
25
|
-
messages.each do |message|
|
26
|
-
store_acknowledgement(message) if use_acknowledgements
|
27
|
-
@process.stdin.puts(MessageCoder.encode(message))
|
28
|
-
@process.stdin.flush
|
29
|
-
end
|
30
|
-
end
|
31
24
|
|
32
25
|
def get_acknowledged_messages(number, timeout = 5)
|
33
26
|
output_msgs = []
|
@@ -50,6 +43,10 @@ module PipelineToolkit
|
|
50
43
|
# send sys_message
|
51
44
|
input_messages([message])
|
52
45
|
|
46
|
+
# first message should be system one
|
47
|
+
@sys_setup = get_messages(1).first
|
48
|
+
raise "Expecting first message to be system message, got instead: #{@sys_setup.inspect}" if @sys_setup[:msg_type] != "system"
|
49
|
+
|
53
50
|
# get pipe_desc off sys_pipe
|
54
51
|
get_lines(@sys_pipe, 1, 5)
|
55
52
|
end
|
@@ -64,9 +61,9 @@ module PipelineToolkit
|
|
64
61
|
@sys_pipe = File.new(name, "r+")
|
65
62
|
end
|
66
63
|
|
67
|
-
def
|
64
|
+
def simulate_ack_id(message)
|
65
|
+
super(message)
|
68
66
|
@messages_to_ack ||= {}
|
69
|
-
message[:ack_id] = "#{Time.now.to_i}_#{rand(9999)}"
|
70
67
|
@messages_to_ack[message[:ack_id]] = message
|
71
68
|
end
|
72
69
|
|
@@ -9,8 +9,8 @@ After do
|
|
9
9
|
@process.kill unless @process.nil?
|
10
10
|
end
|
11
11
|
|
12
|
-
When /^I input these messages
|
13
|
-
@process.input_messages(messages.hashes)
|
12
|
+
When /^I input these messages with(out)? ack_ids?:$/ do |without_acks_ids, messages|
|
13
|
+
@process.input_messages(messages.hashes, !without_acks_ids)
|
14
14
|
end
|
15
15
|
|
16
16
|
Then /^these messages are passed on:$/ do |expected_msgs|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'pipeline_toolkit'
|
2
|
+
require 'background_process'
|
3
|
+
|
4
|
+
module PipelineToolkit
|
5
|
+
module Cucumber
|
6
|
+
|
7
|
+
# Provides IO methods for reading and writting pipeline messages to an IOProcess. NB: It is assumed that the module
|
8
|
+
# is being included in a IOProcess or subclass of.
|
9
|
+
module PipelineIO
|
10
|
+
|
11
|
+
# Gets output from process, and decodes it into a pipeline message
|
12
|
+
def get_messages(number, timeout = 5)
|
13
|
+
output_msgs = []
|
14
|
+
get_lines(@process.stdout, number, timeout) do |line|
|
15
|
+
msg = MessageCoder.decode(line)
|
16
|
+
output_msgs << msg
|
17
|
+
end
|
18
|
+
output_msgs
|
19
|
+
end
|
20
|
+
|
21
|
+
def input_messages(messages, simulate_acks = false)
|
22
|
+
messages.each do |message|
|
23
|
+
simulate_ack_id(message) if simulate_acks
|
24
|
+
@process.stdin.puts(MessageCoder.encode(message))
|
25
|
+
@process.stdin.flush
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def simulate_ack_id(message)
|
32
|
+
message[:ack_id] = "#{Time.now.to_i}_#{rand(9999)}"
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -49,7 +49,7 @@ module PipelineToolkit
|
|
49
49
|
def process_standard(message)
|
50
50
|
DefaultLogger.debug("MessagePusher#process_standard(message)") if options[:env] == "development"
|
51
51
|
publish(message)
|
52
|
-
acknowledge(message) if options[:ack]
|
52
|
+
acknowledge(message) if options[:ack] && message[:ack_id]
|
53
53
|
end
|
54
54
|
|
55
55
|
end
|
@@ -2,9 +2,13 @@ module PipelineToolkit
|
|
2
2
|
|
3
3
|
class MessageSink
|
4
4
|
include MessageCommand
|
5
|
-
|
5
|
+
|
6
6
|
def process_standard(message)
|
7
|
-
|
7
|
+
if @options[:out]
|
8
|
+
$stdout.puts(message.inspect)
|
9
|
+
$stdout.flush
|
10
|
+
end
|
11
|
+
acknowledge(message) if @options[:acknowledge]
|
8
12
|
end
|
9
13
|
|
10
14
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 1.2.
|
8
|
+
- 8
|
9
|
+
version: 1.2.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Aisha Fenton
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-29 00:00:00 +12:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -169,10 +169,10 @@ files:
|
|
169
169
|
- lib/pipeline_toolkit/cucumber.rb
|
170
170
|
- lib/pipeline_toolkit/cucumber/amqp.rb
|
171
171
|
- lib/pipeline_toolkit/cucumber/amqp_steps.rb
|
172
|
-
- lib/pipeline_toolkit/cucumber/
|
172
|
+
- lib/pipeline_toolkit/cucumber/io_process.rb
|
173
173
|
- lib/pipeline_toolkit/cucumber/machine.rb
|
174
174
|
- lib/pipeline_toolkit/cucumber/machine_steps.rb
|
175
|
-
- lib/pipeline_toolkit/cucumber/
|
175
|
+
- lib/pipeline_toolkit/cucumber/pipeline_io.rb
|
176
176
|
- lib/pipeline_toolkit/default_logger.rb
|
177
177
|
- lib/pipeline_toolkit/handlers/message_handler.rb
|
178
178
|
- lib/pipeline_toolkit/message_coder.rb
|
@@ -1,34 +0,0 @@
|
|
1
|
-
|
2
|
-
module PipelineToolkit
|
3
|
-
module Cucumber
|
4
|
-
|
5
|
-
# Provides an interface for running and interacting with a msg_subscribe process.
|
6
|
-
class MsgSubProcess < InOutProcess
|
7
|
-
|
8
|
-
def run(command)
|
9
|
-
super(command)
|
10
|
-
self.setup_pipe
|
11
|
-
end
|
12
|
-
|
13
|
-
def setup_pipe
|
14
|
-
# first message should be system one
|
15
|
-
msg = get_messages(1).first
|
16
|
-
raise "Expecting first message to be system message, got instead: #{msg.inspect}" if msg[:msg_type] != "system"
|
17
|
-
@system_setup = msg
|
18
|
-
@ack_pipe = File.open(msg[:sys_pipe], "w")
|
19
|
-
end
|
20
|
-
|
21
|
-
def acknowledge_message(message)
|
22
|
-
ack_message = {:msg_type => "ack", :ack_id => message[:ack_id]}
|
23
|
-
@ack_pipe.syswrite(MessageCoder.encode(ack_message) << "\n")
|
24
|
-
end
|
25
|
-
|
26
|
-
def kill
|
27
|
-
@ack_pipe.close
|
28
|
-
super
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|