lbspec 0.2.0 → 0.2.1

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.md CHANGED
@@ -48,6 +48,31 @@ You can use following chains with `#transfer`.
48
48
  - Options which can be used in http or https request commands.
49
49
  - You can use `options` if you configure request commands or capture commands.
50
50
 
51
+ ### #respond
52
+ `#respond` tests if a virtual host on a load balancer respond as same as expected.
53
+
54
+ #### chains
55
+ You can use following chains with `#respond`.
56
+
57
+ - tcp
58
+ - Tests with tcp packets for the virtual host.
59
+ - udp
60
+ - Tests with udp packets for the virtual host.
61
+ - http
62
+ - Tests with an http request for the virtual host.
63
+ - https
64
+ - Tests with an https request for the virtual host.
65
+ - from
66
+ - Specifies which host sends to the virtual host.
67
+ - path
68
+ - Specifies a path for http or https requests.
69
+ - with
70
+ - Specifies a string included in requests.
71
+ - options
72
+ - Options which can be used in http or https request commands.
73
+ - You can use `options` if you configure request commands or capture commands.
74
+
75
+
51
76
  ## Requires
52
77
  * Users need to be able to login with ssh to the target nodes.
53
78
  * Users need to be able to `sudo` on the target nodes.
@@ -74,14 +99,17 @@ require_relative 'spec_helper'
74
99
 
75
100
  describe 'vhost_a' do
76
101
  it { should transfer('node_a') }
102
+ it { should respond('200 OK') }
77
103
  end
78
104
 
79
105
  describe 'vhost_b' do
80
106
  it { should transfer(['node_b','node_c']) }
107
+ it { should respond('200 OK') }
81
108
  end
82
109
 
83
110
  describe 'vhost_c:80' do
84
111
  it { should transfer(['node_b','node_c']).port(80) }
112
+ it { should respond('404') }
85
113
  end
86
114
 
87
115
  describe 'vhost_c:80' do
@@ -90,10 +118,12 @@ end
90
118
 
91
119
  describe 'vhost_c:80/test/' do
92
120
  it { should transfer('node_c').http }
121
+ it { should respond('200 OK').http }
93
122
  end
94
123
 
95
124
  describe 'vhost_c:443' do
96
125
  it { should transfer(['node_b','node_c']).port(80).https.path('/test/' }
126
+ it { should respond('200 OK').https.path('/test/') }
97
127
  end
98
128
 
99
129
  describe 'vhost_c:443/test/' do
@@ -101,6 +131,9 @@ describe 'vhost_c:443/test/' do
101
131
  should transfer(['node_b','node_c']).port(80).https
102
132
  .options(ignore_valid_ssl: true)
103
133
  end
134
+ it do should respond('200 OK').path('/test/').https
135
+ .options(ignore_valid_ssl: true)
136
+ end
104
137
  end
105
138
 
106
139
  describe 'vhost_c:80/test/' do
@@ -15,7 +15,7 @@ module Lbspec
15
15
  @options = options[:options] ? options[:options] : {}
16
16
  end
17
17
 
18
- def send(prove)
18
+ def send(prove = nil)
19
19
  if @application
20
20
  send_application(prove)
21
21
  else
@@ -54,11 +54,11 @@ module Lbspec
54
54
  opt << (options[:ignore_valid_ssl] ? ' -k' : '')
55
55
  opt << (options[:proxy] ? %Q( -x "#{options[:proxy]}") : '')
56
56
  if options[:noproxy]
57
- env << %Q( no_proxy="#{options[:noproxy]}")
58
- env << %Q( NO_PROXY="#{options[:noproxy]}")
57
+ env << %Q(no_proxy="#{options[:noproxy]}" )
58
+ env << %Q(NO_PROXY="#{options[:noproxy]}" )
59
59
  end
60
60
  opt << header_option(options[:header])
61
- %Q(#{env} curl -o /dev/null -s #{opt} '#{uri}')
61
+ %Q(#{env}curl -i -s #{opt} '#{uri}')
62
62
  end
63
63
 
64
64
  def header_option(header)
@@ -0,0 +1,88 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'net/ssh'
3
+ require 'rspec/core'
4
+ require 'rspec/expectations'
5
+ require 'lbspec'
6
+
7
+ RSpec::Matchers.define :respond do |expect|
8
+
9
+ @expect = expect
10
+ @protocol = :tcp
11
+ @application = nil
12
+ @path = nil
13
+ @string = nil
14
+ @chain_str = ''
15
+ @options = {}
16
+ @output_request = ''
17
+
18
+ match do |vhost|
19
+ request =
20
+ Lbspec::Request.new(vhost, @from,
21
+ protocol: @protocol, application: @application,
22
+ path: @path, options: @options)
23
+ @output_request = request.send(@string)
24
+ @output_request.include?(expect)
25
+ end
26
+
27
+ chain :tcp do
28
+ @protocol = :tcp
29
+ @application = nil
30
+ @chain_str << ' tcp'
31
+ end
32
+
33
+ chain :udp do
34
+ @protocol = :udp
35
+ @application = nil
36
+ @chain_str << ' udp'
37
+ end
38
+
39
+ chain :http do
40
+ @protocol = :tcp
41
+ @application = :http
42
+ @chain_str << ' http'
43
+ end
44
+
45
+ chain :https do
46
+ @protocol = :tcp
47
+ @application = :https
48
+ @chain_str << ' https'
49
+ end
50
+
51
+ chain :from do |from|
52
+ @from = from
53
+ @chain_str << " from #{from}"
54
+ end
55
+
56
+ chain :path do |path|
57
+ @path = path
58
+ @chain_str << " via #{path}"
59
+ end
60
+
61
+ chain :with do |string|
62
+ @string = string
63
+ @chain_str << " via #{string}"
64
+ end
65
+
66
+ chain :options do |options|
67
+ @options = options
68
+ end
69
+
70
+ description do
71
+ "respond #{@expect} #{@chain_str}"
72
+ end
73
+
74
+ failure_message_for_should do |vhost|
75
+ result = "expected #{vhost} to respond #{@expect}"
76
+ result << result_string
77
+ end
78
+
79
+ failure_message_for_should_not do |vhost|
80
+ result = "expected #{vhost} not to respond #{@expect}"
81
+ result << result_string
82
+ end
83
+
84
+ def result_string
85
+ result = ", but did.\n" + "requested:\n"
86
+ result << request_str.gsub(/^/, ' ')
87
+ end
88
+ end
data/lib/lbspec/util.rb CHANGED
@@ -17,7 +17,7 @@ module Lbspec
17
17
  end
18
18
 
19
19
  def self.exec_command(command, node = nil)
20
- output = command
20
+ output = command + "\n"
21
21
  if node
22
22
  Net::SSH.start(node, nil, config: true) do |ssh|
23
23
  output << ssh.exec!(command).to_s
@@ -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.2.0'
4
+ VERSION = '0.2.1'
5
5
  end
data/lib/lbspec.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'lbspec/version'
3
3
  require 'lbspec/transfer'
4
+ require 'lbspec/respond'
4
5
  require 'lbspec/request'
5
6
  require 'lbspec/capture'
6
7
  require 'lbspec/util'
@@ -0,0 +1,61 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+ require 'net/ssh'
4
+
5
+ describe '#respond' do
6
+
7
+ context 'http/https' do
8
+ it 'should test vhost_a responds with 200 OK' do
9
+ Lbspec::Util.stub(:exec_command).and_return '200 OK'
10
+ 'vhost_a'.should respond('200 OK')
11
+ end
12
+ it 'should test vhost:80 responds with 200 OK by request with options' do
13
+ Lbspec::Util.stub(:exec_command).and_return '200 OK'
14
+ 'vhost_a:443'.should respond('200 OK').http.path('/test')
15
+ end
16
+ it 'should test vhost:443 responds with 404 by request with options' do
17
+ Lbspec::Util.stub(:exec_command).and_return '404 Not Found'
18
+ 'vhost_a:443'.should respond('404').https.path('/test')
19
+ .options(ignore_valid_ssl: false, timeout: 5)
20
+ end
21
+ it 'should test vhost:443 responds by requests from specified host' do
22
+ Lbspec::Util.stub(:exec_command).and_return '200 OK'
23
+ 'vhost_a:443'.should respond('200 OK')
24
+ .https.path('/test').from('node_a')
25
+ end
26
+ it 'should test vhost:443 does not respond 404' do
27
+ Lbspec::Util.stub(:exec_command).and_return '200 OK'
28
+ 'vhost_a:443'.should_not respond('404')
29
+ .https.path('/test').from('node_a')
30
+ end
31
+ it 'should test vhost:443/test does not respond 404' do
32
+ Lbspec::Util.stub(:exec_command).and_return '200 OK'
33
+ 'vhost_a:443/test'.should_not respond('404')
34
+ .https.from('node_a')
35
+ end
36
+ it 'should test vhost:443/test does not respond 404' do
37
+ Lbspec::Util.stub(:exec_command).and_return '200 OK'
38
+ 'vhost_a:443/test'.should_not respond('404')
39
+ .https.from('node_a')
40
+ end
41
+ end
42
+ context 'tcp/udp' do
43
+ it 'should test vhost:25/tcp respond 220' do
44
+ Lbspec::Util.stub(:exec_command).and_return '220'
45
+ 'vhost_a:25'.should respond('220')
46
+ .tcp.with('HELO test.example.com')
47
+ end
48
+ it 'should test vhost:53/udp respond ' do
49
+ Lbspec::Util.stub(:exec_command).and_return '220'
50
+ 'vhost_a:25'.should respond('220')
51
+ .udp.with('HELO test.example.com')
52
+ end
53
+ end
54
+ context 'description works with 200 OK' do
55
+ subject { 'vhost_a' }
56
+ it do
57
+ Lbspec::Util.stub(:exec_command).and_return '200 OK'
58
+ should respond('200 OK')
59
+ end
60
+ end
61
+ end
@@ -2,105 +2,103 @@
2
2
  require 'spec_helper'
3
3
  require 'net/ssh'
4
4
 
5
- describe Lbspec do
6
- describe '#transfer' do
7
- before(:each) do
8
- key = Lbspec::Util.create_prove
9
- include_str = 'X-Test: 1'
10
- Lbspec::Util.stub(:create_prove).and_return(key)
11
- channel_connected = double('channel_connected')
12
- channel_connected.stub(:request_pty).and_yield(channel_connected, true)
13
- channel_connected.stub(:exec).and_yield(channel_connected, nil, nil)
14
- channel_connected.stub(:on_data)
15
- .and_yield(nil, key + include_str)
16
- .and_yield(nil, key + include_str)
17
- ssh_connected = double('ssh_connected')
18
- ssh_connected.stub(:open_channel).and_yield(channel_connected)
19
- ssh_connected.stub(:closed?).and_return(false)
20
- ssh_connected.stub(:close)
21
- ssh_connected.stub(:exec!).and_return(true)
22
- Net::SSH.stub(:start).and_yield(ssh_connected).and_return(ssh_connected)
23
- Kernel.stub(:system).and_return true
24
- Kernel.stub(:`).and_return(key + include_str) # `
25
- end
5
+ describe '#transfer' do
6
+ before(:each) do
7
+ key = Lbspec::Util.create_prove
8
+ include_str = 'X-Test: 1'
9
+ Lbspec::Util.stub(:create_prove).and_return(key)
10
+ channel_connected = double('channel_connected')
11
+ channel_connected.stub(:request_pty).and_yield(channel_connected, true)
12
+ channel_connected.stub(:exec).and_yield(channel_connected, nil, nil)
13
+ channel_connected.stub(:on_data)
14
+ .and_yield(nil, key + include_str)
15
+ .and_yield(nil, key + include_str)
16
+ ssh_connected = double('ssh_connected')
17
+ ssh_connected.stub(:open_channel).and_yield(channel_connected)
18
+ ssh_connected.stub(:closed?).and_return(false)
19
+ ssh_connected.stub(:close)
20
+ ssh_connected.stub(:exec!).and_return(true)
21
+ Net::SSH.stub(:start).and_yield(ssh_connected).and_return(ssh_connected)
22
+ Kernel.stub(:system).and_return true
23
+ Kernel.stub(:`).and_return(key + include_str) # `
24
+ end
26
25
 
27
- it 'should test transfer a node' do
28
- 'vhost_a'.should transfer('node_a')
29
- end
30
- it 'should test transfer nodes' do
31
- 'vhost_a'.should transfer(%w(node_a node_b))
32
- end
33
- it 'should test transfer a node on port 80' do
34
- 'vhost_a'.should transfer('node_a').port(80)
35
- end
36
- it 'should test transfer vhost:80 and a node on port 80' do
37
- 'vhost_a:80'.should transfer('node_a').port(80)
38
- end
39
- it 'should test transfer vhost:80 and a node on port 80/tcp' do
40
- 'vhost_a:80'.should transfer('node_a').port(80).tcp
41
- end
42
- it 'should test transfer vhost:80 and a node on port 53/tcp' do
43
- 'vhost_a:80'.should transfer('node_a').port(53).udp
44
- end
45
- it 'should test transfer vhost:80 and a node with http' do
46
- 'vhost_a:80'.should transfer('node_a').http
47
- end
48
- it 'should test transfer vhost:443 and a node with https' do
49
- 'vhost_a:443'.should transfer('node_a').port(80).https
50
- end
51
- it 'should test transfer vhost:443 and a node:80 with https' do
52
- 'vhost_a:443'.should transfer('node_a').port(80).https
53
- end
54
- it 'should test transfer vhost:443 and a node with https /test' do
55
- 'vhost_a:443/test'.should transfer('node_a').https
56
- end
57
- it 'should test transfer vhost:443 with options for requests' do
58
- 'vhost_a:443'.should transfer('node_a').https.path('/test')
59
- .options(ignore_valid_ssl: true)
60
- 'vhost_a:443/test'.should transfer('node_a').https
61
- .options(ignore_valid_ssl: false, timeout: 5)
26
+ it 'should test transfer a node' do
27
+ 'vhost_a'.should transfer('node_a')
28
+ end
29
+ it 'should test transfer nodes' do
30
+ 'vhost_a'.should transfer(%w(node_a node_b))
31
+ end
32
+ it 'should test transfer a node on port 80' do
33
+ 'vhost_a'.should transfer('node_a').port(80)
34
+ end
35
+ it 'should test transfer vhost:80 and a node on port 80' do
36
+ 'vhost_a:80'.should transfer('node_a').port(80)
37
+ end
38
+ it 'should test transfer vhost:80 and a node on port 80/tcp' do
39
+ 'vhost_a:80'.should transfer('node_a').port(80).tcp
40
+ end
41
+ it 'should test transfer vhost:80 and a node on port 53/tcp' do
42
+ 'vhost_a:80'.should transfer('node_a').port(53).udp
43
+ end
44
+ it 'should test transfer vhost:80 and a node with http' do
45
+ 'vhost_a:80'.should transfer('node_a').http
46
+ end
47
+ it 'should test transfer vhost:443 and a node with https' do
48
+ 'vhost_a:443'.should transfer('node_a').port(80).https
49
+ end
50
+ it 'should test transfer vhost:443 and a node:80 with https' do
51
+ 'vhost_a:443'.should transfer('node_a').port(80).https
52
+ end
53
+ it 'should test transfer vhost:443 and a node with https /test' do
54
+ 'vhost_a:443/test'.should transfer('node_a').https
55
+ end
56
+ it 'should test transfer vhost:443 with options for requests' do
57
+ 'vhost_a:443'.should transfer('node_a').https.path('/test')
58
+ .options(ignore_valid_ssl: true)
59
+ 'vhost_a:443/test'.should transfer('node_a').https
60
+ .options(ignore_valid_ssl: false, timeout: 5)
61
+ end
62
+ it 'should test transfer vhost:443 requests from specified host' do
63
+ 'vhost_a:443/test'.should transfer('node_a')
64
+ .https.from('node_a')
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
72
+
73
+ describe 'request_command' do
74
+ it 'should create single header options for http' do
75
+ Lbspec::Util.should_receive(:exec_command)
76
+ .with(/ -H.*/, nil)
77
+ Lbspec::Util.should_not_receive(:exec_command)
78
+ .with(/ -H.* -H/, nil)
79
+ 'vhost_a:443'.should transfer('node_a').http
80
+ .options(header: 'X-Test1:1')
62
81
  end
63
- it 'should test transfer vhost:443 requests from specified host' do
64
- 'vhost_a:443/test'.should transfer('node_a')
65
- .https.from('node_a')
82
+ it 'should create single header options for https' do
83
+ Lbspec::Util.should_receive(:exec_command)
84
+ .with(/ -H.*/, nil)
85
+ Lbspec::Util.should_not_receive(:exec_command)
86
+ .with(/ -H.* -H/, nil)
87
+ 'vhost_a:443'.should transfer('node_a').https
88
+ .options(header: 'X-Test1:1')
66
89
  end
67
- it 'should test transfer vhost:80 and a node with http includes ' do
68
- 'vhost_a:80'.should transfer('node_a').http
69
- .include('X-Test: 1')
70
- 'vhost_a:80'.should transfer('node_a').http
71
- .include(/Test:/)
90
+ it 'should create multi header options for http' do
91
+ Lbspec::Util.should_receive(:exec_command)
92
+ .with(/ -H.* -H/, nil)
93
+ 'vhost_a:443'.should transfer('node_a').http
94
+ .options(header: %w(X-Test1:1 X-Test2:2))
72
95
  end
73
-
74
- describe 'request_command' do
75
- it 'should create single header options for http' do
76
- Lbspec::Util.should_receive(:exec_command)
77
- .with(/ -H.*/, nil)
78
- Lbspec::Util.should_not_receive(:exec_command)
79
- .with(/ -H.* -H/, nil)
80
- 'vhost_a:443'.should transfer('node_a').http
81
- .options(header: 'X-Test1:1')
82
- end
83
- it 'should create single header options for https' do
84
- Lbspec::Util.should_receive(:exec_command)
85
- .with(/ -H.*/, nil)
86
- Lbspec::Util.should_not_receive(:exec_command)
87
- .with(/ -H.* -H/, nil)
88
- 'vhost_a:443'.should transfer('node_a').https
89
- .options(header: 'X-Test1:1')
90
- end
91
- it 'should create multi header options for http' do
92
- Lbspec::Util.should_receive(:exec_command)
93
- .with(/ -H.* -H/, nil)
94
- 'vhost_a:443'.should transfer('node_a').http
95
- .options(header: %w(X-Test1:1 X-Test2:2))
96
- end
97
- it 'should create multi header options for https' do
98
- Lbspec::Util.should_receive(:exec_command)
99
- .with(/ -H.* -H/, nil)
100
- 'vhost_a:443'.should transfer('node_a').https
101
- .options(header: %w(X-Test1:1 X-Test2:2))
102
- end
96
+ it 'should create multi header options for https' do
97
+ Lbspec::Util.should_receive(:exec_command)
98
+ .with(/ -H.* -H/, nil)
99
+ 'vhost_a:443'.should transfer('node_a').https
100
+ .options(header: %w(X-Test1:1 X-Test2:2))
103
101
  end
104
-
105
102
  end
103
+
106
104
  end
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.2.0
4
+ version: 0.2.1
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-30 00:00:00.000000000 Z
12
+ date: 2014-04-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -162,12 +162,14 @@ files:
162
162
  - lib/lbspec.rb
163
163
  - lib/lbspec/capture.rb
164
164
  - lib/lbspec/request.rb
165
+ - lib/lbspec/respond.rb
165
166
  - lib/lbspec/transfer.rb
166
167
  - lib/lbspec/util.rb
167
168
  - lib/lbspec/version.rb
168
169
  - rubocop-todo.yml
169
170
  - sample/lb_spec.rb
170
171
  - sample/spec_helper.rb
172
+ - spec/lbspec_respond_spec.rb
171
173
  - spec/lbspec_spec.rb
172
174
  - spec/lbspec_transfer_spec.rb
173
175
  - spec/spec_helper.rb
@@ -186,7 +188,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
186
188
  version: '0'
187
189
  segments:
188
190
  - 0
189
- hash: -1301553932859158891
191
+ hash: -4421484859760496342
190
192
  required_rubygems_version: !ruby/object:Gem::Requirement
191
193
  none: false
192
194
  requirements:
@@ -195,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
197
  version: '0'
196
198
  segments:
197
199
  - 0
198
- hash: -1301553932859158891
200
+ hash: -4421484859760496342
199
201
  requirements: []
200
202
  rubyforge_project:
201
203
  rubygems_version: 1.8.21
@@ -203,6 +205,7 @@ signing_key:
203
205
  specification_version: 3
204
206
  summary: Easily test your Loadbalancers with RSpec.
205
207
  test_files:
208
+ - spec/lbspec_respond_spec.rb
206
209
  - spec/lbspec_spec.rb
207
210
  - spec/lbspec_transfer_spec.rb
208
211
  - spec/spec_helper.rb