aboutsummaryrefslogtreecommitdiffstats
path: root/tools/node_modules/nodemailer/node_modules/simplesmtp/test/server.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/nodemailer/node_modules/simplesmtp/test/server.js')
-rw-r--r--tools/node_modules/nodemailer/node_modules/simplesmtp/test/server.js590
1 files changed, 590 insertions, 0 deletions
diff --git a/tools/node_modules/nodemailer/node_modules/simplesmtp/test/server.js b/tools/node_modules/nodemailer/node_modules/simplesmtp/test/server.js
new file mode 100644
index 0000000..32b1ec8
--- /dev/null
+++ b/tools/node_modules/nodemailer/node_modules/simplesmtp/test/server.js
@@ -0,0 +1,590 @@
+var testCase = require('nodeunit').testCase,
+ runClientMockup = require("rai").runClientMockup,
+ simplesmtp = require("../index"),
+ netlib = require("net");
+
+var PORT_NUMBER = 8397;
+
+// monkey patch net and tls to support nodejs 0.4
+if(!netlib.connect && netlib.createConnection){
+ netlib.connect = netlib.createConnection;
+}
+
+exports["General tests"] = {
+ setUp: function (callback) {
+
+ this.smtp = new simplesmtp.createServer({
+ SMTPBanner: "SCORPIO",
+ name: "MYRDO",
+ maxSize: 1234
+ });
+ this.smtp.listen(PORT_NUMBER, function(err){
+ if(err){
+ throw err;
+ }else{
+ callback();
+ }
+ });
+
+ },
+ tearDown: function (callback) {
+ this.smtp.end(callback);
+ },
+ "QUIT": function(test){
+ var cmds = ["QUIT"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("221",resp.toString("utf-8").trim().substr(0,3));
+ test.done();
+ });
+
+ },
+ "HELO": function(test){
+ var cmds = ["HELO FOO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("250",resp.toString("utf-8").trim().substr(0,3));
+ test.done();
+ });
+
+ },
+ "HELO fails": function(test){
+ var cmds = ["HELO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "EHLO": function(test){
+ var cmds = ["EHLO FOO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ resp = resp.toString("utf-8").trim();
+ var lines = resp.split("\r\n");
+ for(var i=0; i<lines.length-1; i++){
+ test.equal("250-", lines[i].substr(0,4));
+ }
+ test.equal("250 ", lines[i].substr(0,4));
+ test.done();
+ });
+ },
+ "EHLO fails": function(test){
+ var cmds = ["EHLO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "HELO after STARTTLS": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "HELO FOO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("250",resp.toString("utf-8").trim().substr(0,3));
+ test.done();
+ });
+ },
+ "HELO fails after STARTTLS": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "HELO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "EHLO after STARTTLS": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "HELO FOO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ resp = resp.toString("utf-8").trim();
+ var lines = resp.split("\r\n");
+ for(var i=0; i<lines.length-1; i++){
+ test.equal("250-", lines[i].substr(0,4));
+ }
+ test.equal("250 ", lines[i].substr(0,4));
+ test.done();
+ });
+ },
+ "EHLO fails after STARTTLS": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH fails if not required": function(test){
+ var cmds = ["EHLO FOO", "AUTH LOGIN"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH fails if not required TLS": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "AUTH LOGIN"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "Custom Greeting banner": function(test){
+ var client = netlib.connect(PORT_NUMBER, function(){
+ client.on("data", function(chunk){
+ test.equal("SCORPIO", (chunk || "").toString().trim().split(" ").pop());
+ client.end();
+ });
+ client.on('end', function() {
+ test.done();
+ });
+ });
+ },
+ "HELO name": function(test){
+ var cmds = ["HELO FOO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("MYRDO",resp.toString("utf-8").trim().substr(4).split(" ").shift());
+ test.done();
+ });
+ },
+ "EHLO name": function(test){
+ var cmds = ["EHLO FOO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("MYRDO",resp.toString("utf-8").trim().substr(4).split(" ").shift());
+ test.done();
+ });
+ },
+ "MAXSIZE": function(test){
+ var cmds = ["EHLO FOO"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.ok(resp.toString("utf-8").trim().match(/^250[\- ]SIZE 1234$/mi));
+ test.done();
+ });
+ }
+};
+
+exports["EHLO setting"] = {
+ setUp: function (callback) {
+
+ this.smtp = new simplesmtp.createServer({
+ disableEHLO: true
+ });
+ this.smtp.listen(PORT_NUMBER, function(err){
+ if(err){
+ throw err;
+ }else{
+ callback();
+ }
+ });
+
+ },
+ tearDown: function (callback) {
+ this.smtp.end(callback);
+ },
+ "Disable EHLO": function(test){
+ runClientMockup(PORT_NUMBER, "localhost", ["EHLO foo"], function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ runClientMockup(PORT_NUMBER, "localhost", ["HELO foo"], function(resp){
+ test.equal("2",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ });
+
+ }
+};
+
+exports["Client disconnect"] = {
+
+ "Client disconnect": function(test){
+
+ var smtp = new simplesmtp.createServer(),
+ clientEnvelope;
+ smtp.listen(PORT_NUMBER, function(err){
+ if(err){
+ throw err;
+ }
+
+ runClientMockup(PORT_NUMBER, "localhost", ["EHLO foo", "MAIL FROM:<andris@node.ee>", "RCPT TO:<andris@node.ee>", "DATA"], function(resp){
+ test.equal("3",resp.toString("utf-8").trim().substr(0,1));
+ });
+
+ });
+ smtp.on("startData", function(envelope){
+ clientEnvelope = envelope;
+ });
+ smtp.on("close", function(envelope){
+ test.equal(envelope, clientEnvelope);
+ smtp.end(function(){});
+ test.done();
+ });
+
+ }
+};
+
+exports["Require AUTH"] = {
+ setUp: function (callback) {
+
+ this.smtp = new simplesmtp.createServer({requireAuthentication: true});
+ this.smtp.listen(PORT_NUMBER, function(err){
+ if(err){
+ throw err;
+ }else{
+ callback();
+ }
+ });
+
+ this.smtp.on("authorizeUser", function(envelope, username, password, callback){
+ callback(null, username=="andris" && password=="test");
+ });
+
+ },
+ tearDown: function (callback) {
+ this.smtp.end(callback);
+ },
+ "Fail without AUTH": function(test){
+ var cmds = ["EHLO FOO", "MAIL FROM:<andris@node.ee>"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "Unknown AUTH": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH CRAM"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH fails before STARTTLS": function(test){
+ var cmds = ["EHLO FOO", "AUTH LOGIN"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH LOGIN": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH LOGIN"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("3",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH LOGIN Invalid login": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH LOGIN",
+ new Buffer("inv").toString("base64"),
+ new Buffer("alid").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH LOGIN Invalid username": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH LOGIN",
+ new Buffer("inv").toString("base64"),
+ new Buffer("test").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH LOGIN Invalid password": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH LOGIN",
+ new Buffer("andris").toString("base64"),
+ new Buffer("alid").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH LOGIN Login success": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH LOGIN",
+ new Buffer("andris").toString("base64"),
+ new Buffer("test").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("2",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("3",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN Invalid login": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN "+
+ new Buffer("inv\u0000inv\u0000alid").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN Invalid user": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN "+
+ new Buffer("inv\u0000inv\u0000test").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN Invalid password": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN "+
+ new Buffer("andris\u0000andris\u0000alid").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN Login success": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN "+
+ new Buffer("andris\u0000andris\u0000test").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("2",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN Yet another login success": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN",
+ new Buffer("andris\u0000andris\u0000test").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("2",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ }
+};
+
+exports["Enable AUTH"] = {
+ setUp: function (callback) {
+
+ this.smtp = new simplesmtp.createServer({enableAuthentication: true});
+ this.smtp.listen(PORT_NUMBER, function(err){
+ if(err){
+ throw err;
+ }else{
+ callback();
+ }
+ });
+
+ this.smtp.on("authorizeUser", function(envelope, username, password, callback){
+ callback(null, username=="andris" && password=="test");
+ });
+
+ },
+ tearDown: function (callback) {
+ this.smtp.end(callback);
+ },
+ "Pass without AUTH": function(test){
+ var cmds = ["EHLO FOO", "MAIL FROM:<andris@node.ee>"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("2",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "Unknown AUTH": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH CRAM"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH fails before STARTTLS": function(test){
+ var cmds = ["EHLO FOO", "AUTH LOGIN"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH LOGIN": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH LOGIN"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("3",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH LOGIN Invalid login": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH LOGIN",
+ new Buffer("inv").toString("base64"),
+ new Buffer("alid").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH LOGIN Invalid username": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH LOGIN",
+ new Buffer("inv").toString("base64"),
+ new Buffer("test").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH LOGIN Invalid password": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH LOGIN",
+ new Buffer("andris").toString("base64"),
+ new Buffer("alid").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH LOGIN Login success": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH LOGIN",
+ new Buffer("andris").toString("base64"),
+ new Buffer("test").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("2",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("3",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN Invalid login": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN "+
+ new Buffer("inv\u0000inv\u0000alid").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN Invalid user": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN "+
+ new Buffer("inv\u0000inv\u0000test").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN Invalid password": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN "+
+ new Buffer("andris\u0000andris\u0000alid").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN Login success": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN "+
+ new Buffer("andris\u0000andris\u0000test").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("2",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "AUTH PLAIN Yet another login success": function(test){
+ var cmds = ["EHLO FOO", "STARTTLS", "EHLO FOO", "AUTH PLAIN",
+ new Buffer("andris\u0000andris\u0000test").toString("base64")];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("2",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ }
+};
+
+exports["ignoreTLS"] = {
+ setUp: function (callback) {
+
+ this.smtp = new simplesmtp.createServer({requireAuthentication: true, ignoreTLS: true});
+ this.smtp.listen(PORT_NUMBER, function(err){
+ if(err){
+ throw err;
+ }else{
+ callback();
+ }
+ });
+
+ this.smtp.on("authorizeUser", function(envelope, username, password, callback){
+ callback(null, username=="d3ph" && password=="test");
+ });
+ },
+ tearDown: function (callback) {
+ this.smtp.end(callback);
+ },
+ "Fail without AUTH": function(test){
+ var cmds = ["EHLO FOO", "MAIL FROM:<d3ph.ru@gmail.com>"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "Fail MAIL FROM without HELO": function(test){
+ var cmds = ["MAIL FROM:<d3ph.ru@gmail.com>"];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("5",resp.toString("utf-8").trim().substr(0,1));
+ test.done();
+ });
+ },
+ "Success AUTH & SEND MAIL with <CR><LF>.<CR><LF>": function(test){
+ var cmds = ["EHLO FOO",
+ "AUTH PLAIN",
+ new Buffer("\u0000d3ph\u0000test").toString("base64"),
+ "MAIL FROM:<d3ph@github.com>",
+ "RCPT TO:<andris@node.ee>",
+ "DATA",
+ "Test mail\015\012.\015\012",
+ ];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ var resp = resp.toString("utf-8").trim();
+ test.equal("2",resp.substr(0,1));
+ test.ok(resp.match('FOOBARBAZ'));
+ test.done();
+ });
+ }
+};
+
+exports["Sending mail listen for dataReady"] = {
+ setUp: function (callback) {
+ var data = "";
+
+ this.smtp = new simplesmtp.createServer({ignoreTLS: true});
+ this.smtp.listen(PORT_NUMBER, function(err){
+ if(err){
+ throw err;
+ }else{
+ callback();
+ }
+ });
+
+ this.smtp.on("authorizeUser", function(envelope, username, password, callback){
+ callback(null, username=="d3ph" && password=="test");
+ });
+
+ this.smtp.on("data", function(envelope, chunk){
+ data += chunk;
+ });
+
+ this.smtp.on("dataReady", function(envelope, callback){
+ if (data.match('spam')) {
+ callback(true);
+ } else {
+ callback(null, '#ID');
+ }
+ });
+ },
+ tearDown: function (callback) {
+ this.smtp.end(callback);
+ },
+ "Fail send mail if body contains 'spam'": function(test){
+ var cmds = ["EHLO FOO",
+ "MAIL FROM:<d3ph@github.com>",
+ "RCPT TO:<andris@node.ee>",
+ "DATA",
+ "Test mail with spam!\015\012.\015\012",
+ ];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ test.equal("550 FAILED",resp.toString("utf-8").trim());
+ test.done();
+ });
+ },
+ "Create #ID for mail": function(test){
+ var cmds = ["EHLO FOO",
+ "MAIL FROM:<d3ph@github.com>",
+ "RCPT TO:<andris@node.ee>",
+ "DATA",
+ "Clear mail body\015\012.\015\012",
+ ];
+ runClientMockup(PORT_NUMBER, "localhost", cmds, function(resp){
+ var resp = resp.toString("utf-8").trim();
+ test.equal("2",resp.substr(0,1));
+ test.ok(resp.match('#ID'));
+ test.done();
+ });
+ }
+}
+