/
metadata_service.spec.coffee
66 lines (59 loc) · 2.34 KB
/
metadata_service.spec.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
helpers = require('./helpers')
url = require('url')
http = require('http')
AWS = helpers.AWS
describe 'AWS.MetadataService', ->
describe 'loadCredentials', ->
[server, port, service] = [null, 1024 + parseInt(Math.random() * 100), null]
beforeEach ->
service = new AWS.MetadataService(host: '127.0.0.1:' + port)
server = http.createServer (req, res) ->
re = new RegExp('^/latest/meta-data/iam/security-credentials/(.*)$')
match = url.parse(req.url).pathname.match(re)
if match
res.writeHead(200, 'Content-Type': 'text/plain')
if match[1] == ''
res.write('TestingRole\n')
res.write('TestingRole2\n')
else
data = '{"Code":"Success","AccessKeyId":"KEY","SecretAccessKey":"SECRET","Token":"TOKEN"}'
res.write(data)
else
res.writeHead(404, {})
res.end()
server.listen(port)
afterEach -> server.close() if server
it 'should load credentials from metadata service', ->
[err, data] = [null, null]
runs ->
service.loadCredentials (e, d) -> [err, data] = [e, d]
waitsFor -> err || data
runs ->
expect(err).toBe(null)
expect(data.Code).toEqual('Success')
expect(data.AccessKeyId).toEqual('KEY')
expect(data.SecretAccessKey).toEqual('SECRET')
expect(data.Token).toEqual('TOKEN')
it 'should fail if server is not up', ->
server.close(); server = null
service = new AWS.MetadataService(host: '255.255.255.255')
service.httpOptions.timeout = 10
[err, data] = [null, null]
runs ->
service.loadCredentials (e, d) -> [err, data] = [e, d]
waitsFor -> err || data
runs ->
expect(err instanceof Error).toBe(true)
expect(data).toEqual(null)