Skip to content

Commit ac3d1c4

Browse files
author
James Awesome
committed
Correct order of stubbing to allow iam_creds to work in test suite
1 parent 16302ab commit ac3d1c4

File tree

1 file changed

+53
-19
lines changed

1 file changed

+53
-19
lines changed

spec/create_spec.rb

+53-19
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,13 @@
4949
}
5050
end
5151

52+
context 'Interface is set in config' do
5253
before do
5354
instance
5455
allow(driver).to receive(:create_server).and_return(server)
5556
allow(driver).to receive(:wait_for_sshd)
5657
end
5758

58-
context 'Interface is set in config' do
59-
6059
it 'derives hostname from DNS when specified in the .kitchen.yml' do
6160
config[:interface] = 'dns'
6261
driver.create(state)
@@ -83,6 +82,11 @@
8382
end
8483

8584
context 'Interface is derived automatically' do
85+
before do
86+
instance
87+
allow(driver).to receive(:create_server).and_return(server)
88+
allow(driver).to receive(:wait_for_sshd)
89+
end
8690

8791
let(:server) do
8892
double(:id => "123",
@@ -122,6 +126,11 @@
122126
end
123127

124128
context 'user_data implementation is working' do
129+
before do
130+
instance
131+
allow(driver).to receive(:create_server).and_return(server)
132+
allow(driver).to receive(:wait_for_sshd)
133+
end
125134

126135
it 'user_data is not defined' do
127136
driver.create(state)
@@ -137,16 +146,28 @@
137146
end
138147

139148
context 'When #iam_creds returns values' do
140-
context 'but they should not be used' do
141-
before do
142-
allow(ENV).to receive(:[]).and_return(nil)
143-
allow(driver).to receive(:iam_creds).and_return(iam_creds)
144-
allow(Net::HTTP).to receive(:get).with(URI.parse('http://169.254.169.254')).and_return(true)
145-
end
149+
let(:config) do
150+
{
151+
aws_ssh_key_id: 'larry',
152+
user_data: nil
153+
}
154+
end
155+
156+
before do
157+
allow(ENV).to receive(:[]).and_return(nil)
158+
allow(driver).to receive(:iam_creds).and_return(iam_creds)
159+
instance
160+
end
146161

162+
context 'but they should not be used' do
147163
context 'because :aws_access_key_id is set but not via #iam_creds' do
164+
let(:aws_access_key_id) { 'secret' }
165+
before do
166+
config[:aws_access_key_id] = aws_access_key_id
167+
end
168+
148169
it 'does not override :aws_access_key_id' do
149-
expect(driver.send(:config)[:aws_access_key_id]).to eq(config[:aws_access_key_id])
170+
expect(driver.send(:config)[:aws_access_key_id]).to eq(aws_access_key_id)
150171
end
151172

152173
it 'does not set :aws_session_token via #iam_creds' do
@@ -155,9 +176,15 @@
155176
end
156177
end
157178

158-
context 'because :aws_access_key_id is set but not via #iam_creds' do
179+
context 'because :aws_secret_access_key is set but not via #iam_creds' do
180+
let(:aws_secret_access_key) { 'moarsecret' }
181+
182+
before do
183+
config[:aws_secret_access_key] = aws_secret_access_key
184+
end
185+
159186
it 'does not override :aws_secret_access_key' do
160-
expect(driver.send(:config)[:aws_secret_access_key]).to eq(config[:aws_secret_access_key])
187+
expect(driver.send(:config)[:aws_secret_access_key]).to eq(aws_secret_access_key)
161188
end
162189

163190
it 'does not set :aws_session_token via #iam_creds' do
@@ -167,7 +194,10 @@
167194
end
168195

169196
context 'because :aws_session_token is set but not via #iam_creds' do
170-
before { config[:aws_session_token] = 'adifferentsessiontoken' }
197+
let(:aws_session_token) { 'adifferentsessiontoken' }
198+
before do
199+
config[:aws_session_token] = aws_session_token
200+
end
171201
it 'does not override :aws_session_token' do
172202
expect(driver.send(:config)[:aws_session_token]).to eq('adifferentsessiontoken')
173203
end
@@ -182,11 +212,6 @@
182212
}
183213
end
184214

185-
before do
186-
allow(ENV).to receive(:[]).and_return(nil)
187-
allow(driver).to receive(:iam_creds).and_return(iam_creds)
188-
end
189-
190215
it 'uses :aws_access_key_id from iam_creds' do
191216
expect(driver.send(:config)[:aws_access_key_id]).to eq(iam_creds[:aws_access_key_id])
192217
end
@@ -204,40 +229,44 @@
204229
describe '#iam_creds' do
205230
context 'when a metadata service is available' do
206231
before do
207-
allow(Net::HTTP).to receive(:get).with(URI.parse('http://169.254.169.254')).and_return(true)
232+
allow(Net::HTTP).to receive(:get).and_return(true)
208233
end
209234

210235
context 'and #fetch_credentials returns valid iam credentials' do
211236
it '#iam_creds retuns the iam credentials from fetch_credentials' do
212237
allow(driver).to receive(:fetch_credentials).and_return(iam_creds)
213-
expect(driver.send(:iam_creds)).to eq(iam_creds)
238+
expect(driver.iam_creds).to eq(iam_creds)
214239
end
215240
end
216241

217242
context 'when #fetch_credentials fails with NoMethodError' do
218243
it 'returns an empty hash' do
219244
allow(driver).to receive(:fetch_credentials).and_raise(NoMethodError)
245+
expect { driver.fetch_credentials }.to raise_error(NoMethodError)
220246
expect(driver.iam_creds).to eq({})
221247
end
222248
end
223249

224250
context 'when #fetch_credentials fails with ::StandardError' do
225251
it 'returns an empty hash' do
226252
allow(driver).to receive(:fetch_credentials).and_raise(::StandardError)
253+
expect { driver.fetch_credentials }.to raise_error(::StandardError)
227254
expect(driver.iam_creds).to eq({})
228255
end
229256
end
230257

231258
context 'when #fetch_credentials fails with Errno::EHOSTUNREACH' do
232259
it 'returns an empty hash' do
233260
allow(driver).to receive(:fetch_credentials).and_raise(Errno::EHOSTUNREACH)
261+
expect { driver.fetch_credentials }.to raise_error(Errno::EHOSTUNREACH)
234262
expect(driver.iam_creds).to eq({})
235263
end
236264
end
237265

238266
context 'when #fetch_credentials fails with Timeout::Error' do
239267
it 'returns an empty hash' do
240268
allow(driver).to receive(:fetch_credentials).and_raise(Timeout::Error)
269+
expect { driver.fetch_credentials }.to raise_error(Timeout::Error)
241270
expect(driver.iam_creds).to eq({})
242271
end
243272
end
@@ -253,6 +282,11 @@
253282
end
254283

255284
describe '#block_device_mappings' do
285+
before do
286+
instance
287+
allow(driver).to receive(:create_server).and_return(server)
288+
allow(driver).to receive(:wait_for_sshd)
289+
end
256290
let(:connection) { double(Fog::Compute) }
257291
let(:image) { double('Image', :root_device_name => 'name') }
258292
before do

0 commit comments

Comments
 (0)