mirror of
https://github.com/mgerb/mywebsite
synced 2026-01-12 02:42:48 +00:00
203 lines
5.7 KiB
JavaScript
203 lines
5.7 KiB
JavaScript
'use strict';
|
|
|
|
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
|
|
var chai = require('chai');
|
|
var expect = chai.expect;
|
|
var directTransport = require('../src/direct-transport');
|
|
var SMTPServer = require('smtp-server').SMTPServer;
|
|
chai.config.includeStack = true;
|
|
|
|
var PORT_NUMBER = 8712;
|
|
|
|
function MockBuilder(envelope, message) {
|
|
this.envelope = envelope;
|
|
this.message = message;
|
|
this._headers = [];
|
|
}
|
|
|
|
MockBuilder.prototype.getEnvelope = function() {
|
|
return this.envelope;
|
|
};
|
|
|
|
MockBuilder.prototype.createReadStream = function() {
|
|
return this.message;
|
|
};
|
|
|
|
MockBuilder.prototype.getHeader = function() {
|
|
return 'teretere';
|
|
};
|
|
|
|
describe('SMTP Transport Tests', function() {
|
|
this.timeout(100 * 1000);
|
|
|
|
var server;
|
|
var retryCount = 0;
|
|
|
|
beforeEach(function(done) {
|
|
server = new SMTPServer({
|
|
disabledCommands: ['STARTTLS', 'AUTH'],
|
|
|
|
onData: function(stream, session, callback) {
|
|
stream.on('data', function() {});
|
|
stream.on('end', function() {
|
|
var err;
|
|
if (/retry@/.test(session.envelope.mailFrom.address) && retryCount++ < 3) {
|
|
err = new Error('Please try again later');
|
|
err.responseCode = 451;
|
|
callback(err);
|
|
} else {
|
|
callback(null, 'OK');
|
|
}
|
|
});
|
|
},
|
|
|
|
onMailFrom: function(address, session, callback) {
|
|
if (/invalid@/.test(address.address)) {
|
|
return callback(new Error('Invalid sender'));
|
|
}
|
|
return callback(); // Accept the address
|
|
},
|
|
onRcptTo: function(address, session, callback) {
|
|
if (/invalid@/.test(address.address)) {
|
|
return callback(new Error('Invalid recipient'));
|
|
}
|
|
return callback(); // Accept the address
|
|
},
|
|
logger: false
|
|
});
|
|
|
|
server.listen(PORT_NUMBER, done);
|
|
});
|
|
|
|
afterEach(function(done) {
|
|
server.close(done);
|
|
});
|
|
|
|
it('Should expose version number', function() {
|
|
var client = directTransport();
|
|
expect(client.name).to.exist;
|
|
expect(client.version).to.exist;
|
|
});
|
|
|
|
it('Should send mail', function(done) {
|
|
var client = directTransport({
|
|
port: PORT_NUMBER,
|
|
debug: false
|
|
});
|
|
|
|
client.on('log', console.log);
|
|
|
|
var chunks = [],
|
|
message = new Array(1024).join('teretere, vana kere\n');
|
|
|
|
server.on('data', function(connection, chunk) {
|
|
chunks.push(chunk);
|
|
});
|
|
|
|
server.on('dataReady', function(connection, callback) {
|
|
var body = Buffer.concat(chunks);
|
|
expect(body.toString()).to.equal(message.trim().replace(/\n/g, '\r\n'));
|
|
callback(null, true);
|
|
});
|
|
|
|
client.send({
|
|
data: {},
|
|
message: new MockBuilder({
|
|
from: 'test@[127.0.0.1]',
|
|
to: 'test@[127.0.0.1]'
|
|
}, message)
|
|
}, function(err, info) {
|
|
expect(err).to.not.exist;
|
|
expect(info.accepted).to.deep.equal(['test@[127.0.0.1]']);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Should retry mail', function(done) {
|
|
var client = directTransport({
|
|
port: PORT_NUMBER,
|
|
debug: false,
|
|
retryDelay: 1000
|
|
});
|
|
|
|
client.on('log', console.log);
|
|
|
|
client.send({
|
|
data: {},
|
|
message: new MockBuilder({
|
|
from: 'retry@[127.0.0.1]',
|
|
to: ['test@[127.0.0.1]', 'test2@[127.0.0.1]']
|
|
}, 'test')
|
|
}, function(err, info) {
|
|
expect(err).to.not.exist;
|
|
expect(info.pending.length).to.equal(1);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Should reject mail', function(done) {
|
|
var client = directTransport({
|
|
port: PORT_NUMBER,
|
|
debug: false,
|
|
retryDelay: 1000
|
|
});
|
|
|
|
client.on('log', console.log);
|
|
|
|
client.send({
|
|
data: {},
|
|
message: new MockBuilder({
|
|
from: 'invalid@[127.0.0.1]',
|
|
to: ['test@[127.0.0.1]', 'test2@[127.0.0.1]']
|
|
}, 'test')
|
|
}, function(err) {
|
|
expect(err).to.exist;
|
|
expect(err.errors[0].recipients).to.deep.equal(['test@[127.0.0.1]', 'test2@[127.0.0.1]']);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Should resolve MX', function(done) {
|
|
var client = directTransport({
|
|
port: PORT_NUMBER,
|
|
debug: false,
|
|
retryDelay: 1000
|
|
});
|
|
|
|
client._resolveMx('kreata.ee', function(err, list) {
|
|
expect(err).to.not.exist;
|
|
expect(list.sort(function(a, b) {
|
|
return a.priority - b.priority;
|
|
})).to.deep.equal([{
|
|
exchange: 'aspmx.l.google.com',
|
|
priority: 10
|
|
}, {
|
|
exchange: 'alt1.aspmx.l.google.com',
|
|
priority: 20
|
|
}, {
|
|
exchange: 'alt2.aspmx.l.google.com',
|
|
priority: 30
|
|
}]);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('Should resolve A', function(done) {
|
|
var client = directTransport({
|
|
port: PORT_NUMBER,
|
|
debug: false,
|
|
retryDelay: 1000
|
|
});
|
|
|
|
client._resolveMx('localhost.kreata.ee', function(err, list) {
|
|
expect(err).to.not.exist;
|
|
expect(list).to.deep.equal([{
|
|
priority: 0,
|
|
exchange: '127.0.0.1'
|
|
}]);
|
|
done();
|
|
});
|
|
});
|
|
});
|