Amazon web services AWS Lambda测试用例
我在这里使用Github项目: 我想编写测试,以便查看数据库中的存储是否正确,并查看函数的结果 我从上面的项目复制了这个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');
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);
}否则{
成功({
创造:真实
});
}
});
}
});
}
});
}
我该如何测试这个呢?我想你可以用