UNPKG

lambda-tester

Version:

Unit/Integration tests for AWS Lambda handlers

112 lines (69 loc) 1.84 kB
'use strict'; 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; } };