From 28aa3bf822e8232ef4a4f2e926d6871f2999df81 Mon Sep 17 00:00:00 2001 From: Michael Newton Date: Fri, 8 Apr 2016 20:52:53 -0400 Subject: [PATCH 1/2] Added support for new lambda callback function. See: https://aws.amazon.com/about-aws/whats-new/2016/04/aws-lambda-supports-node-js-4-3/ --- utils/invoke_task.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/utils/invoke_task.js b/utils/invoke_task.js index 293014f..a9db0b9 100644 --- a/utils/invoke_task.js +++ b/utils/invoke_task.js @@ -97,9 +97,13 @@ invokeTask.getHandler = function (grunt) { identity: identity }; + var callback = function(error, object) { + context.done(error, object); + }; + var lambda = invokeTask.loadFunction(options.file_name); var event = JSON.parse(fs.readFileSync(path.resolve(options.event), "utf8")); - lambda[options.handler](event, context); + lambda[options.handler](event, context, callback); }; }; From 6637a13e066c09c4a6233f5f72387abaca7493d3 Mon Sep 17 00:00:00 2001 From: Michael Newton Date: Sun, 10 Apr 2016 15:10:29 -0400 Subject: [PATCH 2/2] Added unit tests for lambda invoke callback function. --- test/unit/invoke_task_test.js | 90 +++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/test/unit/invoke_task_test.js b/test/unit/invoke_task_test.js index 4a56831..e116477 100644 --- a/test/unit/invoke_task_test.js +++ b/test/unit/invoke_task_test.js @@ -447,4 +447,94 @@ invokeTaskTests.testNoIdentity = function(test) { gruntMock.execute(invokeTask.getHandler, harnessParams); }; +invokeTaskTests.testCallbackSucceed = function(test) { + test.expect(4); + + setLambdaFunction(function(event, context, callback) { + callback(null, 'My Message'); + }); + + var invokeTask = require('../../utils/invoke_task'); + var harnessParams = { + options: {}, + callback: function(harness) { + test.equal(harness.status, true); + test.equal(harness.output.length, 5); + test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[4], 'My Message'); + test.done(); + } + }; + gruntMock.execute(invokeTask.getHandler, harnessParams); +}; + +invokeTaskTests.testCallbackWithObjectStatus = function(test) { + test.expect(4); + + setLambdaFunction(function(event, context, callback) { + callback(null, {some: "object"}); + }); + + var invokeTask = require('../../utils/invoke_task'); + + var harnessParams = { + options: {}, + callback: function(harness) { + test.equal(harness.status, true); + test.equal(harness.output.length, 5); + test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[4], '{"some":"object"}'); + test.done(); + } + }; + gruntMock.execute(invokeTask.getHandler, harnessParams); +}; + +invokeTaskTests.testCallbackUndefined = function(test) { + test.expect(4); + + setLambdaFunction(function(event, context, callback) { + var notDefined; + callback(notDefined, 'My Message'); + }); + + var invokeTask = require('../../utils/invoke_task'); + + var harnessParams = { + options: {}, + callback: function(harness) { + test.equal(harness.status, true); + test.equal(harness.output.length, 5); + test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[4], 'My Message'); + test.done(); + } + }; + gruntMock.execute(invokeTask.getHandler, harnessParams); +}; + +invokeTaskTests.testCallbackError = function(test) { + test.expect(4); + + setLambdaFunction(function(event, context, callback) { + var error = {message: 'Some Error'}; + callback(error, 'My Message'); + }); + + var invokeTask = require('../../utils/invoke_task'); + + var harnessParams = { + options: {}, + callback: function(harness) { + test.equal(harness.status, false); + test.equal(harness.output.length, 5); + test.equal(harness.output[2], 'Failure! Message:'); + test.equal(harness.output[4], '{"message":"Some Error"}'); + test.done(); + } + }; + gruntMock.execute(invokeTask.getHandler, harnessParams); +}; + + module.exports = invokeTaskTests; \ No newline at end of file