lbspec 0.1.2 → 0.1.3

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.
@@ -23,6 +23,8 @@ RSpec::Matchers.define :transfer do |nodes|
23
23
  @vhost_port = 80
24
24
  @node_port = 0
25
25
  @request_node = nil
26
+ @include_str = nil
27
+ @output_request = ''
26
28
  @options = {}
27
29
 
28
30
  @capture_command = lambda do |port, prove|
@@ -39,41 +41,14 @@ RSpec::Matchers.define :transfer do |nodes|
39
41
  .exec_command("echo #{prove} | nc #{addr} #{port}", @request_node)
40
42
  end
41
43
  @http_request_command = lambda do |addr, port, path, prove|
42
- env, opt = '', ''
43
- opt << (@options[:timeout] ? " -m #{@options[:timeout]}" : '')
44
- opt << (@options[:proxy] ? %Q( -x "#{@options[:proxy]}") : '')
45
- if @options[:noproxy]
46
- env << %Q( no_proxy="#{@options[:noproxy]}")
47
- env << %Q( NO_PROXY="#{@options[:noproxy]}")
48
- end
49
- if @options[:header]
50
- header = @options[:header]
51
- header = [header] unless header.respond_to? :each
52
- header.each { |h| opt << %Q( -H '#{h}') }
53
- end
54
44
  uri = 'http://' + "#{addr}:#{port}#{path}?#{prove}"
55
- Lbspec::Util
56
- .exec_command(%Q(#{env} curl -o /dev/null -s #{opt} '#{uri}'),
57
- @request_node)
45
+ command = Lbspec::Util.build_curl_command(uri, @options)
46
+ Lbspec::Util.exec_command(command, @request_node)
58
47
  end
59
48
  @https_request_command = lambda do |addr, port, path, prove|
60
- env, opt = '', ''
61
- opt << (@options[:timeout] ? " -m #{@options[:timeout]}" : '')
62
- opt << (@options[:ignore_valid_ssl] ? ' -k' : '')
63
- opt << (@options[:proxy] ? %Q( -x "#{@options[:proxy]}") : '')
64
- if @options[:noproxy]
65
- env << %Q( no_proxy="#{@options[:noproxy]}")
66
- env << %Q( NO_PROXY="#{@options[:noproxy]}")
67
- end
68
- if @options[:header]
69
- header = @options[:header]
70
- header = [header] unless header.respond_to? :each
71
- header.each { |h| opt << %Q( -H '#{h}') }
72
- end
73
49
  uri = 'https://' + "#{addr}:#{port}#{path}?#{prove}"
74
- Lbspec::Util
75
- .exec_command(%Q(#{env} curl -o /dev/null -s #{opt} '#{uri}'),
76
- @request_node)
50
+ command = Lbspec::Util.build_curl_command(uri, @options)
51
+ Lbspec::Util.exec_command(command, @request_node)
77
52
  end
78
53
 
79
54
  @result = false
@@ -126,6 +101,11 @@ RSpec::Matchers.define :transfer do |nodes|
126
101
  @chain_str << " from #{from}"
127
102
  end
128
103
 
104
+ chain :include do |str|
105
+ @include_str = str
106
+ @chain_str << " including #{str}"
107
+ end
108
+
129
109
  chain :options do |options|
130
110
  @options = options
131
111
  end
@@ -176,14 +156,25 @@ RSpec::Matchers.define :transfer do |nodes|
176
156
  def exec_capture(channel)
177
157
  command = capture_command(@node_port, @prove)
178
158
  channel.exec command do |ch, stream, data|
179
- num_match = 0
159
+ whole_data = ''
180
160
  ch.on_data do |c, d|
181
- num_match += 1 if /#{@prove}/ =~ d
182
- @result = true if num_match > 0
161
+ whole_data << d
162
+ patterns = [@prove]
163
+ patterns << @include_str if @include_str
164
+ @result = match_all?(whole_data, patterns)
183
165
  end
184
166
  end
185
167
  end
186
168
 
169
+ def match_all?(string, patterns)
170
+ num_patterns, num_match = 0, 0
171
+ patterns.each do |pat|
172
+ num_patterns += 1
173
+ num_match += 1 if /#{pat}/ =~ string
174
+ end
175
+ num_match == num_patterns
176
+ end
177
+
187
178
  def capture_command(port, prove)
188
179
  @capture_command[port, prove]
189
180
  end
@@ -202,9 +193,11 @@ RSpec::Matchers.define :transfer do |nodes|
202
193
  vhost_addr, vhost_port = addr_port[:addr], addr_port[:port]
203
194
  @vhost_port = vhost_port if vhost_port > 0
204
195
  if @application
205
- send_request_application(vhost_addr, @vhost_port, @prove)
196
+ @output_request =
197
+ send_request_application(vhost_addr, @vhost_port, @prove)
206
198
  else
207
- send_request_transport(vhost_addr, @vhost_port, @prove)
199
+ @output_request =
200
+ send_request_transport(vhost_addr, @vhost_port, @prove)
208
201
  end
209
202
  end
210
203
 
@@ -234,13 +227,17 @@ RSpec::Matchers.define :transfer do |nodes|
234
227
  result = "expected #{vhost} to transfer requests to"
235
228
  result << nodes.to_s
236
229
  result << @chain_str
237
- result << ', but did not.'
230
+ result << ", but did not.\n"
231
+ result << "requested:\n"
232
+ result << @output_request
238
233
  end
239
234
 
240
235
  failure_message_for_should_not do |vhost|
241
236
  result = "expected #{vhost} not to transfer requests to"
242
237
  result << nodes.to_s
243
238
  result << @chain_str
244
- result << ', but did.'
239
+ result << ", but did.\n"
240
+ result << "requested:\n"
241
+ result << @output_request
245
242
  end
246
243
  end
data/lib/lbspec/util.rb CHANGED
@@ -14,13 +14,32 @@ module Lbspec
14
14
  port = splits.last.to_i if /\d+/ =~ splits.last
15
15
  { addr: addr, port: port }
16
16
  end
17
+ def self.build_curl_command(uri, options)
18
+ env, opt = '', ''
19
+ opt << (options[:timeout] ? " -m #{options[:timeout]}" : '')
20
+ opt << (options[:ignore_valid_ssl] ? ' -k' : '')
21
+ opt << (options[:proxy] ? %Q( -x "#{options[:proxy]}") : '')
22
+ if options[:noproxy]
23
+ env << %Q( no_proxy="#{options[:noproxy]}")
24
+ env << %Q( NO_PROXY="#{options[:noproxy]}")
25
+ end
26
+ opt << header_option(options[:header])
27
+ %Q(#{env} curl -o /dev/null -s #{opt} '#{uri}')
28
+ end
29
+ def self.header_option(header)
30
+ opt = ''
31
+ header = [header] unless header.respond_to? :each
32
+ header.each { |h| opt << %Q( -H '#{h}') }
33
+ opt
34
+ end
17
35
  def self.exec_command(command, node = nil)
36
+ output = command
18
37
  if node
19
38
  Net::SSH.start(node, nil, config: true) do |ssh|
20
- ssh.exec!(command)
39
+ output << ssh.exec!(command).to_s
21
40
  end
22
41
  else
23
- `#{command}`
42
+ output << `#{command}`.to_s
24
43
  end
25
44
  end
26
45
  end
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  # Lbspec is an RSpec plugin for easy Loadbalancer testing.
3
3
  module Lbspec
4
- VERSION = '0.1.2'
4
+ VERSION = '0.1.3'
5
5
  end
@@ -6,11 +6,14 @@ describe Lbspec do
6
6
  describe '#transfer' do
7
7
  before(:each) do
8
8
  key = Lbspec::Util.create_prove
9
+ include_str = 'X-Test: 1'
9
10
  Lbspec::Util.stub(:create_prove).and_return(key)
10
11
  channel_connected = double('channel_connected')
11
12
  channel_connected.stub(:request_pty).and_yield(channel_connected, true)
12
13
  channel_connected.stub(:exec).and_yield(channel_connected, nil, nil)
13
- channel_connected.stub(:on_data).and_yield(nil, key).and_yield(nil, key)
14
+ channel_connected.stub(:on_data)
15
+ .and_yield(nil, key + include_str)
16
+ .and_yield(nil, key + include_str)
14
17
  ssh_connected = double('ssh_connected')
15
18
  ssh_connected.stub(:open_channel).and_yield(channel_connected)
16
19
  ssh_connected.stub(:closed?).and_return(false)
@@ -60,6 +63,12 @@ describe Lbspec do
60
63
  'vhost_a:443'.should transfer('node_a')
61
64
  .https.path('/test').from('node_a')
62
65
  end
66
+ it 'should test transfer vhost:80 and a node with http includes ' do
67
+ 'vhost_a:80'.should transfer('node_a').http
68
+ .include('X-Test: 1')
69
+ 'vhost_a:80'.should transfer('node_a').http
70
+ .include(/Test:/)
71
+ end
63
72
 
64
73
  describe 'request_command' do
65
74
  it 'should create single header options for http' do
@@ -68,7 +77,7 @@ describe Lbspec do
68
77
  Lbspec::Util.should_not_receive(:exec_command)
69
78
  .with(/ -H.* -H/, nil)
70
79
  'vhost_a:443'.should transfer('node_a').http
71
- .options({ header: 'X-Test1:1' })
80
+ .options(header: 'X-Test1:1')
72
81
  end
73
82
  it 'should create single header options for https' do
74
83
  Lbspec::Util.should_receive(:exec_command)
@@ -76,19 +85,19 @@ describe Lbspec do
76
85
  Lbspec::Util.should_not_receive(:exec_command)
77
86
  .with(/ -H.* -H/, nil)
78
87
  'vhost_a:443'.should transfer('node_a').https
79
- .options({ header: 'X-Test1:1' })
88
+ .options(header: 'X-Test1:1')
80
89
  end
81
90
  it 'should create multi header options for http' do
82
91
  Lbspec::Util.should_receive(:exec_command)
83
92
  .with(/ -H.* -H/, nil)
84
93
  'vhost_a:443'.should transfer('node_a').http
85
- .options({ header: %w(X-Test1:1 X-Test2:2) })
94
+ .options(header: %w(X-Test1:1 X-Test2:2))
86
95
  end
87
96
  it 'should create multi header options for https' do
88
97
  Lbspec::Util.should_receive(:exec_command)
89
98
  .with(/ -H.* -H/, nil)
90
99
  'vhost_a:443'.should transfer('node_a').https
91
- .options({ header: %w(X-Test1:1 X-Test2:2) })
100
+ .options(header: %w(X-Test1:1 X-Test2:2))
92
101
  end
93
102
  end
94
103
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lbspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-25 00:00:00.000000000 Z
12
+ date: 2014-03-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -184,7 +184,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
184
184
  version: '0'
185
185
  segments:
186
186
  - 0
187
- hash: -3855103968202962501
187
+ hash: -4298291710759407848
188
188
  required_rubygems_version: !ruby/object:Gem::Requirement
189
189
  none: false
190
190
  requirements:
@@ -193,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
193
  version: '0'
194
194
  segments:
195
195
  - 0
196
- hash: -3855103968202962501
196
+ hash: -4298291710759407848
197
197
  requirements: []
198
198
  rubyforge_project:
199
199
  rubygems_version: 1.8.21