diff --git a/lib/main.js b/lib/main.js index 4d7b6014..7e5bc6e8 100644 --- a/lib/main.js +++ b/lib/main.js @@ -464,49 +464,51 @@ Lambda.prototype._setRunTimeEnvironmentVars = function (program) { } } -Lambda.prototype._uploadExisting = (lambda, params, cb) => { - const request = lambda.updateFunctionCode({ - 'FunctionName': params.FunctionName, - 'ZipFile': params.Code.ZipFile, - 'Publish': params.Publish - }, (err, data) => { - if (err) { - return cb(err, data) - } - - return lambda.updateFunctionConfiguration({ +Lambda.prototype._uploadExisting = (lambda, params) => { + return new Promise((resolve, reject) => { + const request = lambda.updateFunctionCode({ 'FunctionName': params.FunctionName, - 'Description': params.Description, - 'Handler': params.Handler, - 'MemorySize': params.MemorySize, - 'Role': params.Role, - 'Timeout': params.Timeout, - 'Runtime': params.Runtime, - 'VpcConfig': params.VpcConfig, - 'Environment': params.Environment, - 'DeadLetterConfig': params.DeadLetterConfig, - 'TracingConfig': params.TracingConfig - }, (err, data) => { - return cb(err, data) + 'ZipFile': params.Code.ZipFile, + 'Publish': params.Publish + }, (err) => { + if (err) return reject(err) + + lambda.updateFunctionConfiguration({ + 'FunctionName': params.FunctionName, + 'Description': params.Description, + 'Handler': params.Handler, + 'MemorySize': params.MemorySize, + 'Role': params.Role, + 'Timeout': params.Timeout, + 'Runtime': params.Runtime, + 'VpcConfig': params.VpcConfig, + 'Environment': params.Environment, + 'DeadLetterConfig': params.DeadLetterConfig, + 'TracingConfig': params.TracingConfig + }, (err, data) => { + if (err) return reject(err) + resolve(data) + }) }) - }) - request.on('retry', (response) => { - console.log(response.error.message) - console.log('=> Retrying') + request.on('retry', (response) => { + console.log(response.error.message) + console.log('=> Retrying') + }) }) - - return request } -Lambda.prototype._uploadNew = (lambda, params, cb) => { - const request = lambda.createFunction(params, (err, data) => cb(err, data)) - request.on('retry', (response) => { - console.log(response.error.message) - console.log('=> Retrying') +Lambda.prototype._uploadNew = (lambda, params) => { + return new Promise((resolve, reject) => { + const request = lambda.createFunction(params, (err, data) => { + if (err) return reject(err) + resolve(data) + }) + request.on('retry', (response) => { + console.log(response.error.message) + console.log('=> Retrying') + }) }) - - return request } Lambda.prototype._readArchive = function (program, archiveCallback) { @@ -614,9 +616,9 @@ Lambda.prototype._listEventSourceMappings = function (lambda, params, cb) { }) } -Lambda.prototype._updateEventSources = (lambda, functionName, existingEventSourceList, eventSourceList, cb) => { +Lambda.prototype._updateEventSources = (lambda, functionName, existingEventSourceList, eventSourceList) => { if (eventSourceList == null) { - return new Promise(resolve => cb(null, [])) + return Promise.resolve([]) } const updateEventSourceList = [] // Checking new and update event sources @@ -697,15 +699,15 @@ Lambda.prototype._updateEventSources = (lambda, functionName, existingEventSourc } return Promise.resolve() })).then((data) => { - cb(null, data) + return Promise.resolve(data) }).catch((err) => { - cb(err) + return Promise.reject(err) }) } -Lambda.prototype._updateScheduleEvents = (scheduleEvents, functionArn, scheduleList, cb) => { +Lambda.prototype._updateScheduleEvents = (scheduleEvents, functionArn, scheduleList) => { if (scheduleList == null) { - return new Promise(resolve => cb(null, [])) + return Promise.resolve([]) } const paramsList = scheduleList.map((schedule) => @@ -720,9 +722,9 @@ Lambda.prototype._updateScheduleEvents = (scheduleEvents, functionArn, scheduleL // Since `scheduleEvents.add(params)` returns only `{}` if it succeeds // it is not very meaningful. // Therefore, return the params used for execution - cb(null, paramsList) + return Promise.resolve(paramsList) }).catch((err) => { - cb(err) + return Promise.reject(err) }) } @@ -815,44 +817,31 @@ Lambda.prototype.deploy = function (program) { }, (err) => { if (err) { // Function does not exist - return _this._uploadNew(lambda, params, function (err, results) { - if (err) { - throw err - } + return _this._uploadNew(lambda, params).then((results) => { console.log('=> Zip file(s) done uploading. Results follow: ') console.log(results) // This code is on its way to Promise. // From now on, callback will not be used. return Promise.all([ - new Promise((resolve, reject) => { - _this._updateEventSources( - lambda, - params.FunctionName, - [], - eventSourceList.EventSourceMappings, - (err, results) => { - if (err) return reject(err) - resolve(results) - } - ) - }), - new Promise((resolve, reject) => { - _this._updateScheduleEvents( - scheduleEvents, - results.FunctionArn, - eventSourceList.ScheduleEvents, - (err, results) => { - if (err) return reject(err) - resolve(results) - } - ) - }) + _this._updateEventSources( + lambda, + params.FunctionName, + [], + eventSourceList.EventSourceMappings + ), + _this._updateScheduleEvents( + scheduleEvents, + results.FunctionArn, + eventSourceList.ScheduleEvents + ) ]).then((results) => { cb(null, results) }).catch((err) => { cb(err) }) + }).catch((err) => { + return Promise.reject(err) }) } @@ -867,36 +856,23 @@ Lambda.prototype.deploy = function (program) { // This code is on its way to Promise. // From now on, callback will not be used. return Promise.all([ - new Promise((resolve, reject) => { - _this._uploadExisting(lambda, params, (err, results) => { - if (err) { - throw err - } - console.log('=> Zip file(s) done uploading. Results follow: ') - console.log(results) - _this._updateScheduleEvents( - scheduleEvents, - results.FunctionArn, - eventSourceList.ScheduleEvents, - (err, results) => { - if (err) return reject(err) - resolve(results) - } - ) - }) - }), - new Promise((resolve, reject) => { - _this._updateEventSources( - lambda, - params.FunctionName, - existingEventSourceList, - eventSourceList.EventSourceMappings, - (err, results) => { - if (err) return reject(err) - resolve(results) - } + _this._uploadExisting(lambda, params).then((results) => { + console.log('=> Zip file(s) done uploading. Results follow: ') + console.log(results) + return _this._updateScheduleEvents( + scheduleEvents, + results.FunctionArn, + eventSourceList.ScheduleEvents ) - }) + }).catch((err) => { + return Promise.reject(err) + }), + _this._updateEventSources( + lambda, + params.FunctionName, + existingEventSourceList, + eventSourceList.EventSourceMappings + ) ]).then((results) => { cb(null, results) }).catch((err) => { diff --git a/test/main.js b/test/main.js index 5cc0518a..a6700e7d 100644 --- a/test/main.js +++ b/test/main.js @@ -858,77 +858,53 @@ describe('lib/main', function () { after(() => fs.unlinkSync('event_sources.json')) - it('program.eventSourceFile is empty value', (done) => { + it('program.eventSourceFile is empty value', () => { program.eventSourceFile = '' const eventSourceList = lambda._eventSourceList(program) - lambda._updateEventSources( + return lambda._updateEventSources( awsLambda, '', [], - eventSourceList.EventSourceMappings, - (err, results) => { - assert.isNull(err) - assert.deepEqual(results, []) - done() - } - ) + eventSourceList.EventSourceMappings + ).then((results) => { + assert.deepEqual(results, []) + }) }) it('simple test with mock (In case of new addition)', () => { program.eventSourceFile = 'event_sources.json' const eventSourceList = lambda._eventSourceList(program) - return new Promise((resolve) => { - lambda._updateEventSources( - awsLambda, - 'functionName', - [], - eventSourceList.EventSourceMappings, - (err, results) => resolve({ err: err, results: results }) - ) - }).then((actual) => { - const expected = { - err: null, - results: [lambdaMockSettings.createEventSourceMapping] - } - assert.deepEqual(actual, expected) + return lambda._updateEventSources( + awsLambda, + 'functionName', + [], + eventSourceList.EventSourceMappings + ).then((results) => { + assert.deepEqual(results, [lambdaMockSettings.createEventSourceMapping]) }) }) it('simple test with mock (In case of deletion)', () => { - return new Promise((resolve) => { - lambda._updateEventSources( - awsLambda, - 'functionName', - lambdaMockSettings.listEventSourceMappings.EventSourceMappings, - {}, - (err, results) => resolve({ err: err, results: results }) - ) - }).then((actual) => { - const expected = { - err: null, - results: [lambdaMockSettings.deleteEventSourceMapping] - } - assert.deepEqual(actual, expected) + return lambda._updateEventSources( + awsLambda, + 'functionName', + lambdaMockSettings.listEventSourceMappings.EventSourceMappings, + {} + ).then((results) => { + assert.deepEqual(results, [lambdaMockSettings.deleteEventSourceMapping]) }) }) it('simple test with mock (In case of update)', () => { program.eventSourceFile = 'event_sources.json' const eventSourceList = lambda._eventSourceList(program) - return new Promise((resolve) => { - lambda._updateEventSources( - awsLambda, - 'functionName', - lambdaMockSettings.listEventSourceMappings.EventSourceMappings, - eventSourceList.EventSourceMappings, - (err, results) => resolve({ err: err, results: results }) - ) - }).then((actual) => { - const expected = { - err: null, - results: [lambdaMockSettings.updateEventSourceMapping] - } - assert.deepEqual(actual, expected) + return lambda._updateEventSources( + awsLambda, + 'functionName', + lambdaMockSettings.listEventSourceMappings.EventSourceMappings, + eventSourceList.EventSourceMappings + ).then((results) => { + assert.deepEqual(results, [lambdaMockSettings.updateEventSourceMapping]) }) }) }) @@ -956,63 +932,50 @@ describe('lib/main', function () { after(() => fs.unlinkSync('event_sources.json')) - it('program.eventSourceFile is empty value', (done) => { + it('program.eventSourceFile is empty value', () => { program.eventSourceFile = '' const eventSourceList = lambda._eventSourceList(program) - lambda._updateScheduleEvents( + return lambda._updateScheduleEvents( schedule, '', - eventSourceList.ScheduleEvents, - (err, results) => { - assert.isNull(err) - assert.deepEqual(results, []) - done() - } - ) + eventSourceList.ScheduleEvents + ).then((results) => { + assert.deepEqual(results, []) + }) }) it('simple test with mock', () => { program.eventSourceFile = 'event_sources.json' const eventSourceList = lambda._eventSourceList(program) const functionArn = 'arn:aws:lambda:us-west-2:XXX:function:node-lambda-test-function' - return new Promise((resolve) => { - lambda._updateScheduleEvents( - schedule, - functionArn, - eventSourceList.ScheduleEvents, - (err, results) => resolve({ err: err, results: results }) - ) - }).then((actual) => { - const expected = { - err: null, - results: [Object.assign( - eventSourcesJsonValue.ScheduleEvents[0], - { FunctionArn: functionArn } - )] - } - assert.deepEqual(actual, expected) + return lambda._updateScheduleEvents( + schedule, + functionArn, + eventSourceList.ScheduleEvents + ).then((results) => { + const expected = [Object.assign( + eventSourcesJsonValue.ScheduleEvents[0], + { FunctionArn: functionArn } + )] + assert.deepEqual(results, expected) }) }) }) describe('_uploadNew', () => { - it('simple test with mock', (done) => { + it('simple test with mock', () => { const params = lambda._params(program, null) - lambda._uploadNew(awsLambda, params, (err, results) => { - assert.isNull(err) + return lambda._uploadNew(awsLambda, params, (results) => { assert.deepEqual(results, lambdaMockSettings.createFunction) - done() }) }) }) describe('_uploadExisting', () => { - it('simple test with mock', (done) => { + it('simple test with mock', () => { const params = lambda._params(program, null) - lambda._uploadExisting(awsLambda, params, (err, results) => { - assert.isNull(err) + return lambda._uploadExisting(awsLambda, params).then((results) => { assert.deepEqual(results, lambdaMockSettings.updateFunctionConfiguration) - done() }) }) })