Amazon web services AWS Lambda测试用例

Amazon web services AWS Lambda测试用例,amazon-web-services,aws-sdk,aws-lambda,Amazon Web Services,Aws Sdk,Aws Lambda,我在这里使用Github项目: 我想编写测试,以便查看数据库中的存储是否正确,并查看函数的结果 我从上面的项目复制了这个Lambda函数: console.log('Loading function'); // dependencies var AWS = require('aws-sdk'); var crypto = require('crypto'); var util = require('util'); var config = require('./config.json');

我在这里使用Github项目:

我想编写测试,以便查看数据库中的存储是否正确,并查看函数的结果

我从上面的项目复制了这个Lambda函数:

console.log('Loading function');

// dependencies
var AWS = require('aws-sdk');
var crypto = require('crypto');
var util = require('util');
var config = require('./config.json');

// Get reference to AWS clients
var dynamodb = new AWS.DynamoDB();
var ses = new AWS.SES();

function computeHash(password, salt, fn) {
    // Bytesize
    var len = 128;
    var iterations = 4096;

    if (3 == arguments.length) {
        crypto.pbkdf2(password, salt, iterations, len, fn);
    } else {
        fn = salt;
        crypto.randomBytes(len, function(err, salt) {
            if (err) return fn(err);
            salt = salt.toString('base64');
            crypto.pbkdf2(password, salt, iterations, len, function(err, derivedKey) {
                if (err) return fn(err);
                fn(null, salt, derivedKey.toString('base64'));
            });
        });
    }
}

function storeUser(email, password, salt, fn) {
    // Bytesize
    var len = 128;
    crypto.randomBytes(len, function(err, token) {
        if (err) return fn(err);
        token = token.toString('hex');
        dynamodb.putItem({
            TableName: config.DDB_TABLE,
            Item: {
                email: {
                    S: email
                },
                passwordHash: {
                    S: password
                },
                passwordSalt: {
                    S: salt
                },
                verified: {
                    BOOL: false
                },
                verifyToken: {
                    S: token
                }
            },
            ConditionExpression: 'attribute_not_exists (email)'
        }, function(err, data) {
            if (err) return fn(err);
            else fn(null, token);
        });
    });
}

function sendVerificationEmail(email, token, fn) {
    var subject = 'Verification Email for ' + config.EXTERNAL_NAME;
    var verificationLink = config.VERIFICATION_PAGE + '?email=' + encodeURIComponent(email) + '&verify=' + token;
    ses.sendEmail({
        Source: config.EMAIL_SOURCE,
        Destination: {
            ToAddresses: [
                email
            ]
        },
        Message: {
            Subject: {
                Data: subject
            },
            Body: {
                Html: {
                    Data: '<html><head>'
                    + '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'
                    + '<title>' + subject + '</title>'
                    + '</head><body>'
                    + 'Please <a href="' + verificationLink + '">click here to verify your email address</a> or copy & paste the following link in a browser:'
                    + '<br><br>'
                    + '<a href="' + verificationLink + '">' + verificationLink + '</a>'
                    + '</body></html>'
                }
            }
        }
    }, fn);
}

exports.handler = function(event, context) {
    var email = event.email;
    var clearPassword = event.password;

    computeHash(clearPassword, function(err, salt, hash) {
        if (err) {
            context.fail('Error in hash: ' + err);
        } else {
            storeUser(email, hash, salt, function(err, token) {
                if (err) {
                    if (err.code == 'ConditionalCheckFailedException') {
                        // userId already found
                        context.succeed({
                            created: false
                        });
                    } else {
                        context.fail('Error in storeUser: ' + err);
                    }
                } else {
                    sendVerificationEmail(email, token, function(err, data) {
                        if (err) {
                            context.fail('Error in sendVerificationEmail: ' + err);
                        } else {
                            context.succeed({
                                created: true
                            });
                        }
                    });
                }
            });
        }
    });
}
console.log('Loading function');
//依赖关系
var AWS=要求('AWS-sdk');
var crypto=require('crypto');
var util=require('util');
var config=require('./config.json');
//获取对AWS客户端的引用
var dynamodb=新的AWS.dynamodb();
var ses=新的AWS.ses();
函数computeHash(密码,salt,fn){
//陈词滥调
var-len=128;
var迭代次数=4096次;
if(3==arguments.length){
pbkdf2(密码,salt,迭代,len,fn);
}否则{
fn=盐;
加密随机字节(len,函数(err,salt){
if(err)返回fn(err);
salt=salt.toString('base64');
pbkdf2(密码、salt、迭代、len、函数(err、derivedKey){
if(err)返回fn(err);
fn(null,salt,derivedKey.toString('base64');
});
});
}
}
函数storeUser(电子邮件、密码、salt、fn){
//陈词滥调
var-len=128;
加密随机字节(len,函数(err,令牌){
if(err)返回fn(err);
token=token.toString('hex');
发电机B.putItem({
TableName:config.DDB_TABLE,
项目:{
电邮:{
S:电子邮件
},
密码哈希:{
S:密码
},
密码salt:{
S:盐
},
核实:{
布尔:错
},
验证令牌:{
S:代币
}
},
条件表达式:“属性不存在(电子邮件)”
},函数(错误,数据){
if(err)返回fn(err);
else-fn(空,令牌);
});
});
}
功能sendVerificationEmail(电子邮件、令牌、fn){
var subject='验证电子邮件'+config.EXTERNAL_NAME;
var-verificationLink=config.VERIFICATION_PAGE+'?电子邮件='+encodeURIComponent(电子邮件)+'&verify='+token;
ses.sendEmail({
来源:config.EMAIL\u来源,
目的地:{
地址:[
电子邮件
]
},
信息:{
主题:{
资料来源:受试者
},
正文:{
Html:{
数据:“”
+ ''
+''主语+''
+ ''
+'请在浏览器中复制或粘贴以下链接:'
+“

” + '' + '' } } } },fn); } exports.handler=函数(事件、上下文){ var email=event.email; var clearPassword=event.password; computeHash(clearPassword,函数(err,salt,hash){ 如果(错误){ context.fail('哈希中的错误:'+err); }否则{ storeUser(电子邮件、哈希、salt、函数(错误、令牌){ 如果(错误){ 如果(err.code=='ConditionalCheckFailedException'){ //已找到用户ID 成功({ 创建:false }); }否则{ context.fail('storeUser中的错误:'+err); } }否则{ sendVerificationEmail(电子邮件、令牌、功能(错误、数据){ 如果(错误){ context.fail('sendVerificationEmail中的错误:'+err); }否则{ 成功({ 创造:真实 }); } }); } }); } }); }

我该如何测试这个呢?

我想你可以用