mountebank-test
Version:
Over the wire test doubles
78 lines (68 loc) • 2.46 kB
JavaScript
;
var AbstractServer = require('../abstractServer'),
smtp = require('simplesmtp'),
Q = require('q'),
logger = require('winston'),
inherit = require('../../util/inherit'),
combinators = require('../../util/combinators'),
util = require('util'),
events = require('events'),
SmtpRequest = require('./smtpRequest');
function createServer () {
var result = inherit.from(events.EventEmitter, {
errorHandler: combinators.noop,
formatRequestShort: function (request) {
return util.format('Envelope from: %s to: %s', request.from, JSON.stringify(request.to));
},
formatRequest: combinators.identity,
formatResponse: combinators.noop,
respond: function (smtpRequest, originalRequest) { originalRequest.accept(); },
metadata: combinators.constant({}),
addStub: combinators.noop,
stubs: []
}),
requestHandler = function (request) {
result.emit('request', { remoteAddress: request.remoteAddress }, request);
},
server = smtp.createSimpleServer({ disableDNSValidation: true }, requestHandler);
server.server.SMTPServer.on('connect', function (raiSocket) {
result.emit('connection', raiSocket.socket);
});
result.close = function (callback) {
server.server.end(combinators.noop);
callback();
};
result.listen = function (port) {
var deferred = Q.defer();
server.listen(port, function () { deferred.resolve(server.server.SMTPServer._server.address().port); });
return deferred.promise;
};
return result;
}
function initialize (recordRequests, debug) {
var implementation = {
protocolName: 'smtp',
createServer: createServer,
Request: SmtpRequest
},
noOpValidator = {
create: function () {
return {
validate: function () {
return Q({
isValid: true,
errors: []
});
}
};
}
};
return {
name: implementation.protocolName,
create: AbstractServer.implement(implementation, recordRequests, debug, logger).create,
Validator: noOpValidator
};
}
module.exports = {
initialize: initialize
};