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.
@@ -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
 
@@ -1,3 +1,5 @@
1
+ require 'simplecov' and SimpleCov.start if ENV['COVERAGE']
2
+
1
3
  require_relative '../lib/silver_spurs'
2
4
  require 'rack/test'
3
5
 
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.1
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-03-26 00:00:00.000000000 Z
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: