aboutsummaryrefslogtreecommitdiffstats
path: root/tools/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/test/rai.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/test/rai.js')
-rw-r--r--tools/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/test/rai.js589
1 files changed, 589 insertions, 0 deletions
diff --git a/tools/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/test/rai.js b/tools/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/test/rai.js
new file mode 100644
index 0000000..a1af00b
--- /dev/null
+++ b/tools/node_modules/nodemailer/node_modules/simplesmtp/node_modules/rai/test/rai.js
@@ -0,0 +1,589 @@
+var RAIServer = require("../lib/rai").RAIServer,
+ testCase = require('nodeunit').testCase,
+ utillib = require("util"),
+ netlib = require("net"),
+ crypto = require("crypto"),
+ tlslib = require("tls");
+
+var PORT_NUMBER = 8397;
+
+// monkey patch net and tls to support nodejs 0.4
+if(!netlib.connect && netlib.createConnection){
+ netlib.connect = netlib.createConnection;
+}
+
+if(!tlslib.connect && tlslib.createConnection){
+ tlslib.connect = tlslib.createConnection;
+}
+
+exports["General tests"] = {
+ "Create and close a server": function(test){
+ var server = new RAIServer();
+ server.listen(PORT_NUMBER, function(err){
+ test.ifError(err);
+ server.end(function(){
+ test.ok(1, "Server closed");
+ test.done();
+ });
+ });
+ },
+ "Create a secure server": function(test){
+ var server = new RAIServer({secureConnection: true});
+ server.listen(PORT_NUMBER, function(err){
+ test.ifError(err);
+ server.end(function(){
+ test.ok(1, "Server closed");
+ test.done();
+ });
+ });
+ },
+ "Duplicate server fails": function(test){
+ var server = new RAIServer();
+ server.listen(PORT_NUMBER, function(err){
+ test.ifError(err);
+
+ var duplicate = new RAIServer();
+ duplicate.listen(PORT_NUMBER, function(err){
+ test.ok(err, "Responds with error");
+ server.end(function(){
+ test.ok(1, "Server closed");
+ test.done();
+ });
+ });
+
+ });
+ },
+ "Connection event": function(test){
+ var server = new RAIServer();
+ test.expect(3);
+ server.listen(PORT_NUMBER, function(err){
+
+ server.on("connect", function(socket){
+ test.ok(socket, "Client connected");
+
+ socket.on("end", function(){
+ test.ok(1, "Connection closed");
+
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ test.ok(1, "Connected to server");
+ client.end();
+ });
+
+ });
+ },
+ "Close client socket": function(test){
+ var server = new RAIServer();
+ test.expect(4);
+ server.listen(PORT_NUMBER, function(err){
+
+ server.on("connect", function(socket){
+ test.ok(socket, "Client connected");
+
+ socket.on("end", function(){
+ test.ok(1, "Connection closed");
+
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+
+ socket.end();
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ test.ok(1, "Connected to server");
+ });
+ client.on("end", function(){
+ test.ok(1, "Connection closed by host");
+ });
+
+ });
+ },
+ "Send data to client": function(test){
+ var server = new RAIServer();
+ server.listen(PORT_NUMBER, function(err){
+
+ server.on("connect", function(socket){
+
+ socket.send("HELLO");
+
+ socket.on("end", function(){
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ client.on("data", function(chunk){
+ test.equal(chunk.toString(), "HELLO\r\n");
+ client.end();
+ });
+ });
+
+ });
+ }
+};
+
+exports["Secure connection"] = {
+ "STARTTLS with event": function(test){
+ var server = new RAIServer();
+ server.listen(PORT_NUMBER, function(err){
+
+ test.expect(2);
+
+ server.on("connect", function(socket){
+
+ socket.startTLS();
+ socket.on("tls", function(){
+ test.ok(1, "Secure connection opened");
+ socket.send("TEST");
+ });
+
+ socket.on("end", function(){
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ var sslcontext = crypto.createCredentials();
+ var pair = tlslib.createSecurePair(sslcontext, false);
+
+ pair.encrypted.pipe(client);
+ client.pipe(pair.encrypted);
+ pair.fd = client.fd;
+
+ pair.on("secure", function(){
+ pair.cleartext.on("data", function(chunk){
+ test.equal(chunk.toString(), "TEST\r\n");
+ pair.cleartext.end();
+ });
+ });
+ });
+
+ });
+ },
+ "STARTTLS Callback": function(test){
+ var server = new RAIServer();
+ server.listen(PORT_NUMBER, function(err){
+
+ test.expect(2);
+
+ server.on("connect", function(socket){
+
+ socket.startTLS(function(){
+ test.ok(1, "Secure connection opened");
+ socket.send("TEST");
+ });
+
+ socket.on("tls", function(){
+ test.ok(0, "Should not occur");
+ });
+
+ socket.on("end", function(){
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ var sslcontext = crypto.createCredentials();
+ var pair = tlslib.createSecurePair(sslcontext, false);
+
+ pair.encrypted.pipe(client);
+ client.pipe(pair.encrypted);
+ pair.fd = client.fd;
+
+ pair.on("secure", function(){
+ pair.cleartext.on("data", function(chunk){
+ test.equal(chunk.toString(), "TEST\r\n");
+ pair.cleartext.end();
+ });
+ });
+ });
+
+ });
+ },
+ "STARTTLS clears command buffer": function(test){
+ var server = new RAIServer();
+ server.listen(PORT_NUMBER, function(err){
+
+ test.expect(2);
+
+ server.on("connect", function(socket){
+
+ socket.on("command", function(command){
+ if(command == "STARTTLS"){
+ socket.startTLS();
+ socket.send("OK");
+ }else if(command == "KILL"){
+ test.ok(0, "Should not occur");
+ }else if(command == "OK"){
+ test.ok(1, "OK");
+ }
+
+ });
+
+ socket.on("tls", function(){
+ test.ok(1, "Secure connection opened");
+ socket.send("TEST");
+ });
+
+ socket.on("end", function(){
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+
+ client.write("STARTTLS\r\nKILL\r\n");
+
+ client.on("data", function(chunk){
+ if(chunk.toString("utf-8").trim() == "OK"){
+ var sslcontext = crypto.createCredentials();
+ var pair = tlslib.createSecurePair(sslcontext, false);
+
+ pair.encrypted.pipe(client);
+ client.pipe(pair.encrypted);
+ pair.fd = client.fd;
+
+ pair.on("secure", function(){
+ pair.cleartext.write("OK\r\n");
+ pair.cleartext.end();
+ });
+ }
+ });
+
+ });
+
+ });
+ },
+ "STARTTLS on secure server fails": function(test){
+ var server = new RAIServer({secureConnection: true});
+ server.listen(PORT_NUMBER, function(err){
+
+ test.expect(2);
+ server.on("connect", function(socket){
+
+ socket.on("error", function(err){
+ test.ok(err);
+ socket.end();
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("command", (function(command){
+ process.nextTick(socket.startTLS.bind(socket, function(){
+ test.ok(false, "Secure connection opened"); // should not occur
+ server.end(function(){
+ test.done();
+ });
+ }));
+
+ }).bind(this));
+
+ socket.on("tls", function(){
+ test.ok(0, "Should not occur");
+ });
+
+ });
+
+ var client = tlslib.connect(PORT_NUMBER, function(){
+ test.ok(true);
+ client.write("HELLO!\r\n");
+ });
+
+ });
+ }
+};
+
+exports["Client commands"] = {
+ "Receive Simple Command": function(test){
+ var server = new RAIServer();
+ server.listen(PORT_NUMBER, function(err){
+
+ server.on("connect", function(socket){
+
+ socket.on("command", function(command, payload){
+ test.equal(command, "STATUS");
+ test.equal(payload.toString(), "");
+ socket.end();
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ client.write("STATUS\r\n");
+ });
+
+ });
+ },
+ "Receive Command with payload": function(test){
+ var server = new RAIServer();
+ server.listen(PORT_NUMBER, function(err){
+
+ server.on("connect", function(socket){
+
+ socket.on("command", function(command, payload){
+ test.equal(command, "MAIL");
+ test.equal(payload.toString(), "TO:");
+ socket.end();
+
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ client.write("MAIL TO:\r\n");
+ });
+
+ });
+ }
+};
+
+exports["Data mode"] = {
+ "DATA mode": function(test){
+ var server = new RAIServer(),
+ datapayload = "tere\r\nvana kere";
+ server.listen(PORT_NUMBER, function(err){
+
+ server.on("connect", function(socket){
+
+ socket.startDataMode();
+
+ test.expect(2);
+
+ socket.on("data", function(chunk){
+ test.equal(datapayload, chunk.toString());
+ });
+
+ socket.on("ready", function(){
+ test.ok(1,"Data ready");
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ client.write(datapayload+"\r\n.\r\n");
+ client.end();
+ });
+
+ });
+ },
+ "Small chunks DATA mode": function(test){
+ var server = new RAIServer(),
+ datapayload = "tere\r\nvana kere õäöü\r\n.\r",
+ databytes = [],
+ fullpayload = datapayload+"\r\n.\r\n";
+ server.listen(PORT_NUMBER, function(err){
+
+ server.on("connect", function(socket){
+
+ socket.startDataMode();
+
+ test.expect(1);
+
+ socket.on("data", function(chunk){
+ databytes = databytes.concat(Array.prototype.slice.call(chunk));
+ });
+
+ socket.on("ready", function(){
+ test.equal(new Buffer(databytes).toString("utf-8"), datapayload);
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+
+ for(var i=0, len = fullpayload.length; i<len; i++){
+ socket._onReceiveData(new Buffer(fullpayload.charAt(i), "utf-8").toString("binary"));
+ }
+
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ client.end();
+ });
+
+ });
+ }
+};
+
+exports["Pipelining support"] = {
+ "Pipelining": function(test){
+ var server = new RAIServer();
+ server.listen(PORT_NUMBER, function(err){
+
+ test.expect(8);
+
+ server.on("connect", function(socket){
+
+ socket.on("command", function(command, payload){
+ if(command == "STATUS"){
+ test.ok(1, "Status received");
+ }else if(command=="DATA"){
+ test.ok(1, "data command received");
+ socket.startDataMode();
+ }else if(command=="END"){
+ test.ok(1, "all received");
+ }else{
+ test.ok(0, "Unexpected command: "+command);
+ }
+ });
+
+ socket.on("data", function(chunk){
+ test.equal(chunk.toString(), "TE\r\nST");
+ });
+
+ socket.on("ready", function(){
+ test.ok(1, "Data mode ended");
+ });
+
+ socket.on("end", function(){
+ test.ok(1, "All ready");
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ client.write("STATUS\r\nSTATUS\r\nSTATUS\r\nDATA\r\nTE\r\nST\r\n.\r\nEND\r\n");
+ client.end();
+ });
+
+ });
+ }
+};
+
+exports["Timeout tests"] = {
+ "Timeout": function(test){
+ var server = new RAIServer({timeout: 300, disconnectOnTimeout: true});
+ test.expect(3);
+ server.listen(PORT_NUMBER, function(err){
+
+ server.on("connect", function(socket){
+ test.ok(socket, "Client connected");
+
+ socket.on("timeout", function(){
+ test.ok(1, "Connection closed");
+
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ test.ok(1, "Connected to server");
+ });
+
+ });
+ },
+ "Timeout with TLS": function(test){
+ var server = new RAIServer({timeout: 300, disconnectOnTimeout: true});
+ server.listen(PORT_NUMBER, function(err){
+
+ test.expect(3);
+
+ server.on("connect", function(socket){
+
+ socket.startTLS();
+ socket.on("tls", function(){
+ test.ok(1, "Secure connection opened");
+ socket.send("TEST");
+ });
+
+ socket.on("timeout", function(){
+ test.ok(1, "Timeout occurred");
+ server.end(function(){
+ test.done();
+ });
+ });
+
+ socket.on("error", function(err){
+ test.isError(err);
+ });
+ });
+
+ var client = netlib.connect(PORT_NUMBER, function(){
+ var sslcontext = crypto.createCredentials();
+ var pair = tlslib.createSecurePair(sslcontext, false);
+
+ pair.encrypted.pipe(client);
+ client.pipe(pair.encrypted);
+ pair.fd = client.fd;
+
+ pair.on("secure", function(){
+ test.ok(1, "secure connection");
+ });
+ });
+
+ });
+ }
+}; \ No newline at end of file