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.
- data/lib/lbspec/transfer.rb +35 -38
- data/lib/lbspec/util.rb +21 -2
- data/lib/lbspec/version.rb +1 -1
- data/spec/lbspec_transfer_spec.rb +14 -5
- metadata +4 -4
data/lib/lbspec/transfer.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
159
|
+
whole_data = ''
|
180
160
|
ch.on_data do |c, d|
|
181
|
-
|
182
|
-
|
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
|
-
|
196
|
+
@output_request =
|
197
|
+
send_request_application(vhost_addr, @vhost_port, @prove)
|
206
198
|
else
|
207
|
-
|
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 <<
|
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 <<
|
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
|
data/lib/lbspec/version.rb
CHANGED
@@ -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)
|
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(
|
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(
|
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(
|
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(
|
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.
|
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-
|
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: -
|
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: -
|
196
|
+
hash: -4298291710759407848
|
197
197
|
requirements: []
|
198
198
|
rubyforge_project:
|
199
199
|
rubygems_version: 1.8.21
|