%PDF- %PDF-
| Direktori : /home/opti/workflow/node_modules/aws-sdk/test/ |
| Current File : /home/opti/workflow/node_modules/aws-sdk/test/browser.spec.coffee |
helpers = require('./helpers')
AWS = helpers.AWS
config = {}
try
config = require('./configuration')
s3 = new AWS.S3(AWS.util.merge(config, config.s3))
dynamodb = new AWS.DynamoDB(AWS.util.merge(config, config.dynamodb))
sqs = new AWS.SQS(AWS.util.merge(config, config.sqs))
sns = new AWS.SNS(AWS.util.merge(config, config.sns))
sts = new AWS.STS(AWS.util.merge(config, config.sts))
uniqueName = (prefix) ->
if prefix
prefix + '-' + AWS.util.date.getDate().getTime()
else
AWS.util.date.getDate().getTime().toString()
eventually = (condition, next, done) ->
options = delay: 0, backoff: 500, maxTime: 10
delay = options.delay
started = AWS.util.date.getDate()
id = 0
nextFn = ->
now = AWS.util.date.getDate()
if (now - started < options.maxTime * 1000)
next (err, data) ->
if condition(err, data)
done(err, data)
else
timeoutFn = ->
clearInterval(id)
delay += options.backoff
nextFn()
id = setInterval(timeoutFn, delay)
nextFn()
noError = (err) -> expect(err).toEqual(null)
integration = (label, fn) ->
if label.match(/\(no phantomjs\)/) and navigator.userAgent.match(/phantomjs/i)
return
it label, ->
done = false
runs -> fn(-> done = true)
waitsFor -> done == true
integrationTests = (fn) ->
if config.accessKeyId and AWS.util.isBrowser()
describe 'Integration tests', fn
integrationTests ->
describe 'Request.abort', ->
it 'can abort a request', ->
err = null
done = null
runs ->
req = s3.putObject Key: 'key', Body: 'body'
req.on 'complete', (resp) -> done = true; err = resp.error
req.on 'send', (resp) -> resp.request.abort()
req.send()
waitsFor -> done
runs ->
expect(err.name).toEqual('RequestAbortedError')
describe 'XHR', ->
it 'does not emit http events if networking issue occurs', ->
err = null
done = null
httpHeaders = false; httpData = false; httpError = false; httpDone = false
runs ->
svc = new AWS.S3(accessKeyId: 'akid', secretAccessKey: 'secret', maxRetries: 0)
date = AWS.util.date.iso8601().replace(/[^0-9]/g,'')
req = svc.getObject(Bucket:'invalidbucket' + date, Key: 'foo')
req.on 'httpHeaders', -> httpHeaders = true
req.on 'httpData', -> httpData = true
req.on 'httpDone', -> httpDone = true
req.on 'httpError', -> httpError = true
req.on 'complete', (resp) -> done = true; err = resp.error
req.send()
waitsFor -> done
runs ->
expect(httpHeaders).toEqual(false)
expect(httpData).toEqual(false)
expect(httpDone).toEqual(false)
expect(httpError).toEqual(true)
expect(err.name).toEqual('NetworkingError')
integration 'can send synchronous requests (no phantomjs)', (done) ->
key = uniqueName('test')
opts = AWS.util.merge(config, config.s3)
opts.httpOptions = xhrAsync: false
svc = new AWS.S3(opts)
resp1 = svc.putObject(Key: key, Body: 'body').send()
resp2 = svc.getObject(Key: key).send()
expect(resp2.data.Body.toString()).toEqual('body')
svc.deleteObject(Key: key).send()
done()
describe 'AWS.S3', ->
testWrite = (done, body, compareFn) ->
key = uniqueName('test')
s3.putObject {Key: key, Body: body}, (err, data) ->
noError(err)
s3.getObject {Key: key}, (err, data) ->
noError(err)
if compareFn
compareFn(data)
else
expect(data.Body.toString()).toEqual(body)
s3.deleteObject(Key: key).send(done)
integration 'GETs and PUTs objects to a bucket (no phantomjs)', (done) ->
testWrite done, 'ƒoo'
integration 'writes typed array data (no phantomjs)', (done) ->
testWrite done, new Uint8Array([2, 4, 8]), (data) ->
expect(data.Body[0]).toEqual(2)
expect(data.Body[1]).toEqual(4)
expect(data.Body[2]).toEqual(8)
integration 'writes blobs (no phantomjs)', (done) ->
testWrite done, new Blob(['a', 'b', 'c']), (data) ->
expect(data.Body[0]).toEqual(97)
expect(data.Body[1]).toEqual(98)
expect(data.Body[2]).toEqual(99)
integration 'writes with charset', (done) ->
key = uniqueName('test')
body = 'body string'
s3.putObject {Key: key, Body: body, ContentType: 'text/html'}, (err, data) ->
noError(err)
s3.deleteObject(Key: key).send(done)
s3.putObject {Key: key, Body: body, ContentType: 'text/html; charset=utf-8'}, (err, data) ->
noError(err)
s3.deleteObject(Key: key).send(done)
describe 'progress events', ->
integration 'emits http(Upload|Download)Progress events (no phantomjs)', (done) ->
data = []
progress = []
key = uniqueName('test')
body = new Blob([new Array(512 * 1024).join('x')])
req = s3.putObject(Key: key, Body: body)
req.on 'httpUploadProgress', (p) -> progress.push(p)
req.send (err, data) ->
noError(err)
expect(progress.length > 1).toEqual(true)
expect(progress[0].total).toEqual(body.size)
expect(progress[0].loaded > 10).toEqual(true)
progress = []
req = s3.getObject(Key: key)
req.on 'httpDownloadProgress', (p) -> progress.push(p)
req.send (err, data) ->
noError(err)
expect(progress.length > 1).toEqual(true)
expect(progress[0].total).toEqual(body.size)
expect(progress[0].loaded > 10).toEqual(true)
s3.deleteObject(Key: key).send()
done()
describe 'AWS.DynamoDB', ->
integration 'writes and reads from a table', (done) ->
key = uniqueName('test')
dynamodb.putItem {Item: {id: {S: key}, data: {S: 'ƒoo'}}}, (err, data) ->
noError(err)
dynamodb.getItem {Key: {id: {S: key}}}, (err, data) ->
noError(err)
expect(data.Item.data.S).toEqual('ƒoo')
dynamodb.deleteItem({Key: {id: {S: key}}}).send(done)
describe 'AWS.STS', ->
integration 'gets a session token', (done) ->
sts.getSessionToken (err, data) ->
noError(err)
expect(data.Credentials.AccessKeyId).not.toEqual('')
done()
describe 'AWS.SQS', ->
integration 'posts and receives messages on a queue', (done) ->
name = uniqueName('aws-sdk-js')
msg = 'ƒoo'
sqs.createQueue {QueueName: name}, (err, data) ->
url = data.QueueUrl
sqs = new AWS.SQS(sqs.config)
sqs.config.params = QueueUrl: url
eventually ((err) -> err == null),
((cb) -> sqs.getQueueUrl({QueueName: name}, cb)), ->
sqs.sendMessage {MessageBody:msg}, (err, data) ->
noError(err)
eventually ((err, data) -> data.Messages[0].Body == msg),
((cb) -> sqs.receiveMessage(cb)), (err, data) ->
noError(err)
expect(data.Messages[0].MD5OfBody).toEqual(AWS.util.crypto.md5(msg, 'hex'))
sqs.deleteQueue(done)
describe 'AWS.SNS', ->
integration 'creates and deletes topics', (done) ->
sns.createTopic {Name: uniqueName('aws-sdk-js')}, (err, data) ->
noError(err)
arn = data.TopicArn
sns = new AWS.SNS(sns.config)
sns.config.params = TopicArn: arn
sns.listTopics (err, data) ->
expect(data.Topics.filter((o) -> o.TopicArn == arn)).not.toEqual(null)
sns.deleteTopic(done)