silver_spurs 1.0.1 → 1.0.2
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/.gitignore +1 -0
- data/.rspec +2 -0
- data/.simplecov +4 -0
- data/.travis.yml +6 -0
- data/README.md +55 -8
- data/Rakefile +18 -0
- data/lib/silver_spurs/asyncifier.rb +3 -3
- data/lib/silver_spurs/client.rb +10 -8
- data/lib/silver_spurs/client/bootstrap_run.rb +1 -4
- data/lib/silver_spurs/knife_interface.rb +1 -1
- data/lib/silver_spurs/version.rb +1 -1
- data/silver_spurs.gemspec +1 -0
- data/spec/lib/silver_spurs/app_spec.rb +192 -9
- data/spec/lib/silver_spurs/asyncifier_spec.rb +509 -0
- data/spec/lib/silver_spurs/client/bootstrap_run_spec.rb +162 -0
- data/spec/lib/silver_spurs/client_spec.rb +113 -0
- data/spec/lib/silver_spurs/knife_interface_spec.rb +26 -1
- data/spec/spec_helper.rb +2 -0
- metadata +33 -3
@@ -0,0 +1,162 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'silver_spurs/client'
|
3
|
+
|
4
|
+
describe SilverSpurs::BootstrapRun do
|
5
|
+
describe :status do
|
6
|
+
|
7
|
+
it 'should send HEAD requests' do
|
8
|
+
response = double('response')
|
9
|
+
response.stub(:code).and_return 201
|
10
|
+
RestClient.should_receive(:head).and_return response
|
11
|
+
|
12
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
13
|
+
bootstrap.status
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when the service returns a 201' do
|
17
|
+
before :each do
|
18
|
+
response = double('response')
|
19
|
+
response.stub(:code).and_return 201
|
20
|
+
RestClient.stub(:head).and_return response
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should return :success' do
|
24
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
25
|
+
bootstrap.status.should eq :success
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when the service returns a 202' do
|
30
|
+
before :each do
|
31
|
+
response = double('response')
|
32
|
+
response.stub(:code).and_return 202
|
33
|
+
RestClient.stub(:head).and_return response
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should return :processing' do
|
37
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
38
|
+
bootstrap.status.should eq :processing
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'when the service returns a 550' do
|
43
|
+
before :each do
|
44
|
+
response = double('response')
|
45
|
+
response.stub(:code).and_return 550
|
46
|
+
RestClient.stub(:head).and_return response
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should return :failed' do
|
50
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
51
|
+
bootstrap.status.should eq :failed
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'when the service returns a 404' do
|
56
|
+
before :each do
|
57
|
+
response = double('response')
|
58
|
+
response.stub(:code).and_return 404
|
59
|
+
RestClient.stub(:head).and_return response
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should throw an exception' do
|
63
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
64
|
+
expect {bootstrap.status}.to raise_error
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'when the server responds with an unknown code' do
|
69
|
+
before :each do
|
70
|
+
response = double('response')
|
71
|
+
response.stub(:code).and_return 500
|
72
|
+
RestClient.stub(:head).and_return response
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'should throw an exception' do
|
76
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
77
|
+
expect {bootstrap.status}.to raise_error
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
describe :log do
|
84
|
+
it 'should send GET requests to the service' do
|
85
|
+
response = double('response')
|
86
|
+
response.stub(:code).and_return 201
|
87
|
+
response.stub(:body).and_return 'logslogslogs'
|
88
|
+
RestClient.should_receive(:get).and_return response
|
89
|
+
|
90
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
91
|
+
bootstrap.log
|
92
|
+
end
|
93
|
+
|
94
|
+
context 'when there is a non-error response' do
|
95
|
+
|
96
|
+
shared_context 'returns the body' do |response_code|
|
97
|
+
context "when the service returns #{response_code}" do
|
98
|
+
before :each do
|
99
|
+
response = double('response')
|
100
|
+
response.stub(:body).and_return 'logslogslogs'
|
101
|
+
response.stub(:code).and_return response_code
|
102
|
+
RestClient.stub(:get).and_return response
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'should return the body' do
|
106
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
107
|
+
bootstrap.log.should eq 'logslogslogs'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
include_context 'returns the body', 201
|
113
|
+
include_context 'returns the body', 202
|
114
|
+
include_context 'returns the body', 550
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'when there is an error response' do
|
118
|
+
shared_context 'throws an exception' do |response_code|
|
119
|
+
context "when the service returns #{response_code}" do
|
120
|
+
before :each do
|
121
|
+
response = double('response')
|
122
|
+
response.stub(:code).and_return response_code
|
123
|
+
RestClient.stub(:get).and_return response
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'should throw an exception' do
|
127
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
128
|
+
expect {bootstrap.log}.to raise_error
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
include_context 'throws an exception', 404
|
134
|
+
include_context 'throws an exception', 500
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
describe :no_exception_for_550 do
|
140
|
+
context 'when the response code is 550' do
|
141
|
+
it 'should return the response' do
|
142
|
+
response = double('response')
|
143
|
+
response.stub(:code).and_return 550
|
144
|
+
|
145
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
146
|
+
bootstrap.send(:no_exception_for_550, response, nil, nil).should eq response
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
context 'when the response code is something else' do
|
151
|
+
it 'should continue normal processing' do
|
152
|
+
response = double('response')
|
153
|
+
response.stub(:code).and_return 404
|
154
|
+
response.should_receive(:return!)
|
155
|
+
|
156
|
+
bootstrap = SilverSpurs::BootstrapRun.new 'http://localhost'
|
157
|
+
bootstrap.send(:no_exception_for_550, response, nil, nil)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'silver_spurs/client'
|
3
|
+
|
4
|
+
describe SilverSpurs::Client do
|
5
|
+
describe :start_bootstrap do
|
6
|
+
context 'the service returns a redirect' do
|
7
|
+
it 'should return a BootStrapRun' do
|
8
|
+
response = double('response')
|
9
|
+
response.stub(:code).and_return 303
|
10
|
+
response.stub(:headers).and_return({:location => '/bootstrap/query/your_mom'})
|
11
|
+
|
12
|
+
request = double('request')
|
13
|
+
request.stub(:put).and_return response
|
14
|
+
|
15
|
+
resource = double('resource')
|
16
|
+
resource.stub(:[]).and_return request
|
17
|
+
|
18
|
+
client = SilverSpurs::Client.new 'http://localhost'
|
19
|
+
client.stub(:spur_host).and_return resource
|
20
|
+
|
21
|
+
SilverSpurs::BootstrapRun.should_receive(:new)
|
22
|
+
|
23
|
+
client.start_bootstrap('10.0.1.2', 'your_mom')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'the service returns something else' do
|
28
|
+
it 'should throw an exception' do
|
29
|
+
response = double('response')
|
30
|
+
response.stub(:code).and_return 404
|
31
|
+
response.stub(:headers).and_return({:location => '/bootstrap/query/your_mom'})
|
32
|
+
|
33
|
+
request = double('request')
|
34
|
+
request.stub(:put).and_return response
|
35
|
+
|
36
|
+
resource = double('resource')
|
37
|
+
resource.stub(:[]).and_return request
|
38
|
+
|
39
|
+
client = SilverSpurs::Client.new 'http://localhost'
|
40
|
+
client.stub(:spur_host).and_return resource
|
41
|
+
|
42
|
+
SilverSpurs::BootstrapRun.should_not_receive(:new)
|
43
|
+
|
44
|
+
expect {client.start_bootstrap('10.0.1.2', 'your_mom')}.to raise_error
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
describe :parameterize_hash do
|
51
|
+
it 'should turn a hash into qstring params' do
|
52
|
+
params = {:hot_dog => :mustard, :hamburger => 'with cheese'}
|
53
|
+
expected = 'hamburger=with%20cheese&hot_dog=mustard'
|
54
|
+
|
55
|
+
client = SilverSpurs::Client.new 'http://localhost'
|
56
|
+
client.send(:parameterize_hash, params).should eq expected
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe :extract_extra_params do
|
61
|
+
it 'should query KnifeInterface for which params are supported' do
|
62
|
+
SilverSpurs::KnifeInterface.should_receive(:supported_arguments).and_return []
|
63
|
+
|
64
|
+
client = SilverSpurs::Client.new 'http://localhost'
|
65
|
+
client.send(:extract_extra_params, {:foo=>:bar})
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should filter out params which are not supported by KnifeInterface' do
|
69
|
+
SilverSpurs::KnifeInterface.stub(:supported_arguments).and_return [:foo, :bar]
|
70
|
+
|
71
|
+
params = {:foo=>:foo, :bar=>:bar, :hamburger=>:hamburger}
|
72
|
+
expected = {:foo=>:foo, :bar=>:bar}
|
73
|
+
|
74
|
+
client = SilverSpurs::Client.new 'http://localhost'
|
75
|
+
client.send(:extract_extra_params, params).should eq expected
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
describe :spur_host do
|
81
|
+
it 'should return a new rest resource' do
|
82
|
+
RestClient::Resource.should_receive(:new)
|
83
|
+
|
84
|
+
client = SilverSpurs::Client.new 'http://localhost'
|
85
|
+
client.send(:spur_host)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
describe :dont_redirect_for_303 do
|
90
|
+
context 'when the response code is 303' do
|
91
|
+
it 'should return the response' do
|
92
|
+
response = double('response')
|
93
|
+
response.stub(:code).and_return 303
|
94
|
+
|
95
|
+
client = SilverSpurs::Client.new 'http://localhost'
|
96
|
+
client.send(:dont_redirect_for_303, response, nil, nil).should eq response
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'when the response code is something else' do
|
101
|
+
it 'should continue normal processing' do
|
102
|
+
response = double('response')
|
103
|
+
response.stub(:code).and_return 404
|
104
|
+
response.should_receive(:return!)
|
105
|
+
|
106
|
+
client = SilverSpurs::Client.new 'http://localhost'
|
107
|
+
client.send(:dont_redirect_for_303, response, nil, nil)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
@@ -81,7 +81,32 @@ describe SilverSpurs::KnifeInterface do
|
|
81
81
|
end
|
82
82
|
|
83
83
|
end
|
84
|
-
end
|
85
84
|
|
85
|
+
describe 'supported_arguments' do
|
86
|
+
|
87
|
+
it 'includes all of the keys form BOOTSTRAP_ARGS_MAP' do
|
88
|
+
SilverSpurs::KnifeInterface::BOOTSTRAP_ARGS_MAP.each do |k,v|
|
89
|
+
SilverSpurs::KnifeInterface.supported_arguments.should include k
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
describe 'bootstrap_command' do
|
96
|
+
|
97
|
+
it 'expands the arguments into a "knife bootstrap -FLAG VALUE HOST" pattern' do
|
98
|
+
ip = '1.2.3.4'
|
99
|
+
node_name = 'noodles'
|
100
|
+
user = 'user'
|
101
|
+
key = 'key'
|
102
|
+
options = {:distro => 'suse', :run_list => 'recipe[world_one]'}
|
103
|
+
expected = "knife bootstrap --no-host-key-verify -i '#{key}' -x '#{user}' -N '#{node_name}' -d 'suse' -r 'recipe[world_one]' #{ip}"
|
104
|
+
SilverSpurs::KnifeInterface.bootstrap_command(ip, node_name, user, key, options).should eq expected
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
end
|
86
111
|
|
87
112
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: silver_spurs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
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: 2013-
|
12
|
+
date: 2013-04-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
@@ -171,6 +171,22 @@ dependencies:
|
|
171
171
|
- - ! '>='
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: rake
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
type: :development
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
174
190
|
description: This is a simple REST service to kick off bootstrap processes. It is
|
175
191
|
intended for use in a VPC-type environment with limited access.
|
176
192
|
email:
|
@@ -180,6 +196,9 @@ extensions: []
|
|
180
196
|
extra_rdoc_files: []
|
181
197
|
files:
|
182
198
|
- .gitignore
|
199
|
+
- .rspec
|
200
|
+
- .simplecov
|
201
|
+
- .travis.yml
|
183
202
|
- Gemfile
|
184
203
|
- Guardfile
|
185
204
|
- LICENSE
|
@@ -195,6 +214,9 @@ files:
|
|
195
214
|
- lib/silver_spurs/version.rb
|
196
215
|
- silver_spurs.gemspec
|
197
216
|
- spec/lib/silver_spurs/app_spec.rb
|
217
|
+
- spec/lib/silver_spurs/asyncifier_spec.rb
|
218
|
+
- spec/lib/silver_spurs/client/bootstrap_run_spec.rb
|
219
|
+
- spec/lib/silver_spurs/client_spec.rb
|
198
220
|
- spec/lib/silver_spurs/knife_interface_spec.rb
|
199
221
|
- spec/spec_helper.rb
|
200
222
|
homepage: http://github.com/christian-blades-cb/silver_spurs
|
@@ -209,12 +231,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
231
|
- - ! '>='
|
210
232
|
- !ruby/object:Gem::Version
|
211
233
|
version: '0'
|
234
|
+
segments:
|
235
|
+
- 0
|
236
|
+
hash: 1092412529978158920
|
212
237
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
213
238
|
none: false
|
214
239
|
requirements:
|
215
240
|
- - ! '>='
|
216
241
|
- !ruby/object:Gem::Version
|
217
242
|
version: '0'
|
243
|
+
segments:
|
244
|
+
- 0
|
245
|
+
hash: 1092412529978158920
|
218
246
|
requirements: []
|
219
247
|
rubyforge_project:
|
220
248
|
rubygems_version: 1.8.25
|
@@ -223,6 +251,8 @@ specification_version: 3
|
|
223
251
|
summary: RESTful service to kick off chef bootstraps
|
224
252
|
test_files:
|
225
253
|
- spec/lib/silver_spurs/app_spec.rb
|
254
|
+
- spec/lib/silver_spurs/asyncifier_spec.rb
|
255
|
+
- spec/lib/silver_spurs/client/bootstrap_run_spec.rb
|
256
|
+
- spec/lib/silver_spurs/client_spec.rb
|
226
257
|
- spec/lib/silver_spurs/knife_interface_spec.rb
|
227
258
|
- spec/spec_helper.rb
|
228
|
-
has_rdoc:
|