|
3 | 3 |
|
4 | 4 | describe Kitchen::Driver::Ec2 do
|
5 | 5 |
|
6 |
| - let(:config) do |
7 |
| - { |
8 |
| - aws_ssh_key_id: 'larry', |
9 |
| - aws_access_key_id: 'secret', |
10 |
| - aws_secret_access_key: 'moarsecret', |
11 |
| - user_data: nil |
12 |
| - } |
13 |
| - end |
| 6 | + let(:config) do |
| 7 | + { |
| 8 | + aws_ssh_key_id: 'larry', |
| 9 | + aws_access_key_id: 'secret', |
| 10 | + aws_secret_access_key: 'moarsecret', |
| 11 | + user_data: nil |
| 12 | + } |
| 13 | + end |
14 | 14 |
|
15 |
| - let(:state) do |
16 |
| - {} |
17 |
| - end |
| 15 | + let(:state) do |
| 16 | + {} |
| 17 | + end |
18 | 18 |
|
19 |
| - let(:server) do |
20 |
| - double( |
21 |
| - :id => "123", |
22 |
| - :wait_for => nil, |
23 |
| - :dns_name => "server.example.com", |
24 |
| - :private_ip_address => '172.13.16.11', |
25 |
| - :public_ip_address => '213.225.123.134' |
26 |
| - ) |
27 |
| - end |
| 19 | + let(:server) do |
| 20 | + double( |
| 21 | + :id => "123", |
| 22 | + :wait_for => nil, |
| 23 | + :dns_name => "server.example.com", |
| 24 | + :private_ip_address => '172.13.16.11', |
| 25 | + :public_ip_address => '213.225.123.134' |
| 26 | + ) |
| 27 | + end |
28 | 28 |
|
29 |
| - let(:instance) do |
30 |
| - Kitchen::Instance.new( |
31 |
| - :platform => double(:name => "centos-6.4"), |
32 |
| - :suite => double(:name => "default"), |
33 |
| - :driver => driver, |
34 |
| - :provisioner => Kitchen::Provisioner::Dummy.new({}), |
35 |
| - :busser => double("busser"), |
36 |
| - :state_file => double("state_file") |
37 |
| - ) |
38 |
| - end |
| 29 | + let(:instance) do |
| 30 | + Kitchen::Instance.new( |
| 31 | + :platform => double(:name => "centos-6.4"), |
| 32 | + :suite => double(:name => "default"), |
| 33 | + :driver => driver, |
| 34 | + :provisioner => Kitchen::Provisioner::Dummy.new({}), |
| 35 | + :busser => double("busser"), |
| 36 | + :state_file => double("state_file") |
| 37 | + ) |
| 38 | + end |
39 | 39 |
|
40 |
| - let(:driver) do |
41 |
| - Kitchen::Driver::Ec2.new(config) |
42 |
| - end |
| 40 | + let(:driver) do |
| 41 | + Kitchen::Driver::Ec2.new(config) |
| 42 | + end |
43 | 43 |
|
44 |
| - let(:iam_creds) do |
45 |
| - { |
46 |
| - aws_access_key_id: 'iam_creds_access_key', |
47 |
| - aws_secret_access_key: 'iam_creds_secret_access_key', |
48 |
| - aws_session_token: 'iam_creds_session_token' |
49 |
| - } |
50 |
| - end |
| 44 | + let(:iam_creds) do |
| 45 | + { |
| 46 | + aws_access_key_id: 'iam_creds_access_key', |
| 47 | + aws_secret_access_key: 'iam_creds_secret_access_key', |
| 48 | + aws_session_token: 'iam_creds_session_token' |
| 49 | + } |
| 50 | + end |
51 | 51 |
|
52 | 52 | context 'Interface is set in config' do
|
53 | 53 | before do
|
|
160 | 160 | end
|
161 | 161 |
|
162 | 162 | context 'but they should not be used' do
|
163 |
| - context 'because :aws_access_key_id is set but not via #iam_creds' do |
| 163 | + shared_examples ':aws_session_token not set' do |
| 164 | + it 'does not set :aws_session_token via #iam_creds' do |
| 165 | + expect(driver[:aws_session_token]).to_not eq(iam_creds[:aws_session_token]) |
| 166 | + end |
| 167 | + end |
| 168 | + context 'because :aws_access_key_id is set from config' do |
164 | 169 | let(:aws_access_key_id) { 'secret' }
|
165 | 170 | before do
|
166 | 171 | config[:aws_access_key_id] = aws_access_key_id
|
167 | 172 | end
|
168 | 173 |
|
169 | 174 | it 'does not override :aws_access_key_id' do
|
170 |
| - expect(driver.send(:config)[:aws_access_key_id]).to eq(aws_access_key_id) |
| 175 | + expect(driver[:aws_access_key_id]).to eq(aws_access_key_id) |
171 | 176 | end
|
172 | 177 |
|
173 |
| - it 'does not set :aws_session_token via #iam_creds' do |
174 |
| - expect(driver.send(:config)[:aws_session_token]) |
175 |
| - .to_not eq(iam_creds[:aws_session_token]) |
176 |
| - end |
| 178 | + include_examples ':aws_session_token not set' |
177 | 179 | end
|
178 | 180 |
|
179 |
| - context 'because :aws_secret_access_key is set but not via #iam_creds' do |
| 181 | + context 'because :aws_secret_access_key is set from config' do |
180 | 182 | let(:aws_secret_access_key) { 'moarsecret' }
|
181 | 183 |
|
182 | 184 | before do
|
183 | 185 | config[:aws_secret_access_key] = aws_secret_access_key
|
184 | 186 | end
|
185 | 187 |
|
186 | 188 | it 'does not override :aws_secret_access_key' do
|
187 |
| - expect(driver.send(:config)[:aws_secret_access_key]).to eq(aws_secret_access_key) |
| 189 | + expect(driver[:aws_secret_access_key]).to eq(aws_secret_access_key) |
188 | 190 | end
|
189 | 191 |
|
190 |
| - it 'does not set :aws_session_token via #iam_creds' do |
191 |
| - expect(driver.send(:config)[:aws_session_token]) |
192 |
| - .to_not eq(iam_creds[:aws_session_token]) |
193 |
| - end |
| 192 | + include_examples ':aws_session_token not set' |
194 | 193 | end
|
195 | 194 |
|
196 |
| - context 'because :aws_session_token is set but not via #iam_creds' do |
| 195 | + context 'because :aws_session_token is set from config' do |
197 | 196 | let(:aws_session_token) { 'adifferentsessiontoken' }
|
198 | 197 | before do
|
199 | 198 | config[:aws_session_token] = aws_session_token
|
200 | 199 | end
|
201 | 200 | it 'does not override :aws_session_token' do
|
202 |
| - expect(driver.send(:config)[:aws_session_token]).to eq('adifferentsessiontoken') |
| 201 | + expect(driver[:aws_session_token]).to eq('adifferentsessiontoken') |
203 | 202 | end
|
204 | 203 | end
|
205 | 204 | end
|
|
213 | 212 | end
|
214 | 213 |
|
215 | 214 | it 'uses :aws_access_key_id from iam_creds' do
|
216 |
| - expect(driver.send(:config)[:aws_access_key_id]).to eq(iam_creds[:aws_access_key_id]) |
| 215 | + expect(driver[:aws_access_key_id]).to eq(iam_creds[:aws_access_key_id]) |
217 | 216 | end
|
218 | 217 |
|
219 | 218 | it 'uses :aws_secret_key_id from iam_creds' do
|
220 |
| - expect(driver.send(:config)[:aws_secret_key_id]).to eq(iam_creds[:aws_secret_key_id]) |
| 219 | + expect(driver[:aws_secret_key_id]).to eq(iam_creds[:aws_secret_key_id]) |
221 | 220 | end
|
222 | 221 |
|
223 | 222 | it 'uses :aws_session_token from iam_creds' do
|
224 |
| - expect(driver.send(:config)[:aws_session_token]).to eq(iam_creds[:aws_session_token]) |
| 223 | + expect(driver[:aws_session_token]).to eq(iam_creds[:aws_session_token]) |
225 | 224 | end
|
226 | 225 | end
|
227 | 226 | end
|
|
239 | 238 | end
|
240 | 239 | end
|
241 | 240 |
|
242 |
| - context 'when #fetch_credentials fails with NoMethodError' do |
243 |
| - it 'returns an empty hash' do |
244 |
| - allow(driver).to receive(:fetch_credentials).and_raise(NoMethodError) |
245 |
| - expect { driver.fetch_credentials }.to raise_error(NoMethodError) |
246 |
| - expect(driver.iam_creds).to eq({}) |
247 |
| - end |
248 |
| - end |
249 |
| - |
250 |
| - context 'when #fetch_credentials fails with ::StandardError' do |
251 |
| - it 'returns an empty hash' do |
252 |
| - allow(driver).to receive(:fetch_credentials).and_raise(::StandardError) |
253 |
| - expect { driver.fetch_credentials }.to raise_error(::StandardError) |
254 |
| - expect(driver.iam_creds).to eq({}) |
255 |
| - end |
256 |
| - end |
257 |
| - |
258 |
| - context 'when #fetch_credentials fails with Errno::EHOSTUNREACH' do |
259 |
| - it 'returns an empty hash' do |
260 |
| - allow(driver).to receive(:fetch_credentials).and_raise(Errno::EHOSTUNREACH) |
261 |
| - expect { driver.fetch_credentials }.to raise_error(Errno::EHOSTUNREACH) |
262 |
| - expect(driver.iam_creds).to eq({}) |
263 |
| - end |
264 |
| - end |
265 |
| - |
266 |
| - context 'when #fetch_credentials fails with Timeout::Error' do |
267 |
| - it 'returns an empty hash' do |
268 |
| - allow(driver).to receive(:fetch_credentials).and_raise(Timeout::Error) |
269 |
| - expect { driver.fetch_credentials }.to raise_error(Timeout::Error) |
270 |
| - expect(driver.iam_creds).to eq({}) |
| 241 | + errors = [NoMethodError, StandardError, Errno::EHOSTUNREACH, Errno::EHOSTDOWN] |
| 242 | + errors.each do |e| |
| 243 | + context "when #fetch_credentials fails with #{e}" do |
| 244 | + it 'returns an empty hash' do |
| 245 | + expect(driver).to receive(:fetch_credentials).and_raise(e) |
| 246 | + expect(driver.iam_creds).to eq({}) |
| 247 | + end |
271 | 248 | end
|
272 | 249 | end
|
273 | 250 | end
|
274 | 251 |
|
275 |
| - context 'when a metadata service is not available' do |
276 |
| - it 'will not call #fetch_credentials' do |
277 |
| - allow(Net::HTTP).to receive(:get) |
278 |
| - .with(URI.parse('http://169.254.169.254')).and_return(false) |
279 |
| - expect(driver).to_not receive(:fetch_credentials) |
| 252 | + context 'when Net::HTTP#get fails with Timeout::Error' do |
| 253 | + it 'returns an empty hash' do |
| 254 | + expect(Net::HTTP).to receive(:get) |
| 255 | + .with(URI.parse('http://169.254.169.254')).and_raise(Timeout::Error) |
| 256 | + expect(driver.iam_creds).to eq({}) |
280 | 257 | end
|
281 | 258 | end
|
282 | 259 | end
|
|
0 commit comments