lambda-tester
Version:
Unit/Integration tests for AWS Lambda handlers
112 lines (69 loc) • 1.84 kB
JavaScript
;
const dgram = require( 'dgram' );
const createTraceId = require( './trace_id' );
var server = null;
function processMessage( msg ) {
try {
let packet = msg.toString();
let parts = packet.split( '\n', 2 );
server._segments.push( JSON.parse( parts[1] ) );
}
catch( err ) {
console.log( 'error while processing message:', err );
}
}
async function createServer( port = 2000 ) {
if( !process.env.LAMBDA_TASK_ROOT ) {
process.env.LAMBDA_TASK_ROOT = require( 'app-root-path' );
}
process.env.AWS_XRAY_DAEMON_ADDRESS = `127.0.0.1:${port}`;
process.env._X_AMZN_TRACE_ID = createTraceId();
return new Promise( (resolve, reject) => {
try {
if( server ) {
throw new Error( 'server already running' );
}
server = dgram.createSocket( 'udp4' );
server._segments =[];
server.on( 'error', ( err ) => {
console.log( `server error:\n${err.stack}` );
server.close();
server = null;
});
server.on( 'message', processMessage );
server.bind( port, '127.0.0.1', () => {
resolve();
});
}
catch( err ) {
reject( err );
}
});
}
async function start() {
return createServer();
}
async function stop() {
return new Promise( (resolve) => {
if( !server ) {
return resolve();
}
server.close( () => {
server = null;
resolve();
});
});
}
function reset() {
if( server ) {
server._segments = [];
}
}
module.exports = {
start,
stop,
reset,
get segments() {
return server._segments;
}
};