Comparing version 0.1.7 to 0.1.8
@@ -43,3 +43,3 @@ var net = require("net"), | ||
var command, ignore_data = false, sslcontext, pair; | ||
var command, ignore_data = false, responses = [], sslcontext, pair; | ||
@@ -58,5 +58,8 @@ var socket = net.connect(port, host); | ||
if(typeof callback == "function"){ | ||
callback(chunk); | ||
responses.push(chunk); | ||
callback(chunk, responses); | ||
} | ||
return; | ||
}else{ | ||
responses.push(chunk); | ||
} | ||
@@ -94,5 +97,8 @@ | ||
if(typeof callback == "function"){ | ||
callback(chunk); | ||
responses.push(chunk); | ||
callback(chunk, responses); | ||
} | ||
return; | ||
}else{ | ||
responses.push(chunk); | ||
} | ||
@@ -116,2 +122,2 @@ command = commands.shift(); | ||
} | ||
} |
@@ -17,4 +17,4 @@ /** | ||
var defaultCredentials = { | ||
key: fs.readFileSync(__dirname+"/../cert/key.pem"), | ||
cert: fs.readFileSync(__dirname+"/../cert/cert.pem") | ||
key: fs.readFileSync(__dirname+"/../cert/server.key"), | ||
cert: fs.readFileSync(__dirname+"/../cert/server.crt") | ||
}; | ||
@@ -249,5 +249,5 @@ | ||
if(sequence){ | ||
sequence = sequence.replace(/\.\=\(\)\-\?\*\\\[\]\^\+\:\|\,/g, "\\$1"); | ||
sequence = sequence.replace(/([\.\=\(\)\-\?\*\\\[\]\^\+\:\|\,])/g, "\\$1"); | ||
this._endDataModeSequence = "\r\n"+sequence+"\r\n"; | ||
this._endDataModeSequenceRegEx = new RegExp("/\r\n"+sequence+"\r\n|^"+sequence+"\r\n/"); | ||
this._endDataModeSequenceRegEx = new RegExp("\\r\\n" + sequence + "\\r\\n|^"+sequence+"\\r\\n"); | ||
} | ||
@@ -254,0 +254,0 @@ }; |
{ | ||
"name": "rai", | ||
"description": "Request-Answer-Interface for generating text based command servers (SMTP, POP etc)", | ||
"version": "0.1.7", | ||
"version": "0.1.8", | ||
"author" : "Andris Reinman", | ||
@@ -6,0 +6,0 @@ "maintainers":[ |
@@ -137,3 +137,3 @@ # RAI - Request-Answer-Interface | ||
There is a possibility to set up a mockup client which sends a batch of commands | ||
one by one to the server and returns the last response. | ||
one by one to the server and returns the last response and an array of all responses(except the TLS negotiation). | ||
@@ -143,4 +143,7 @@ var runClientMockup = require("rai").runClientMockup; | ||
var cmds = ["EHLO FOOBAR", "STARTTLS", "QUIT"]; | ||
runClientMockup(25, "mail.hot.ee", cmds, function(resp){ | ||
console.log("Final:", resp.toString("utf-8").trim()); | ||
runClientMockup(25, "mail.hot.ee", cmds, function(lastResponse, allResponses){ | ||
console.log("Final:", lastResponse.toString("utf-8").trim()); | ||
console.log("All:", allResponses.map(function(e){ | ||
return e.toString("utf-8").trim() | ||
}).join(', ')); | ||
}); | ||
@@ -157,3 +160,3 @@ | ||
Response from the callback function is a Buffer and contains the | ||
last data received from the server | ||
last data received from the server and an array of Buffers with all data received from the server. | ||
@@ -160,0 +163,0 @@ ## License |
161
test/rai.js
var RAIServer = require("../lib/rai").RAIServer, | ||
runClientMockup = require("../lib/rai").runClientMockup, | ||
testCase = require('nodeunit').testCase, | ||
@@ -589,2 +590,160 @@ utillib = require("util"), | ||
} | ||
}; | ||
}; | ||
exports["Client Mockup"] = { | ||
"All command": function(test){ | ||
var server = new RAIServer(); | ||
server.listen(PORT_NUMBER, function(err){ | ||
server.on("connect", function(socket){ | ||
socket.send("220 Welcome"); | ||
socket.on("command", function(command, payload){ | ||
switch(command) { | ||
case "HELO": socket.send("250 HI"); break; | ||
case "NOOP": socket.send("250 OK"); break; | ||
case "QUIT": socket.send("221 Bye"); socket.end(); break; | ||
default: socket.send("500"); | ||
} | ||
}); | ||
socket.on("error", function(err){ | ||
test.isError(err); | ||
}); | ||
}); | ||
var cmds = ["HELO", "NOOP", "QUIT"]; | ||
runClientMockup(PORT_NUMBER, "localhost", cmds, function(lastResponse, allResponses){ | ||
allResponses = allResponses.map(function(value) { return value.toString("utf-8"); }); | ||
test.deepEqual(allResponses, [ "220 Welcome\r\n", "250 HI\r\n", "250 OK\r\n", "221 Bye\r\n" ]); | ||
server.end(function(){ | ||
test.done(); | ||
}); | ||
}); | ||
}); | ||
}, | ||
"Last commands": function(test){ | ||
var server = new RAIServer(); | ||
server.listen(PORT_NUMBER, function(err){ | ||
server.on("connect", function(socket){ | ||
socket.send("220 HI"); | ||
socket.on("command", function(command, payload){ | ||
switch(command) { | ||
case "HELO": socket.send("250 HI"); break; | ||
case "NOOP": socket.send("250 OK"); break; | ||
case "QUIT": socket.send("221 Bye"); socket.end(); break; | ||
default: socket.send("500"); | ||
} | ||
}); | ||
socket.on("error", function(err){ | ||
test.isError(err); | ||
}); | ||
}); | ||
var cmds = ["HELO", "NOOP", "QUIT"]; | ||
runClientMockup(PORT_NUMBER, "localhost", cmds, function(lastResponse){ | ||
test.equal(lastResponse.toString("utf-8"), "221 Bye\r\n"); | ||
server.end(function(){ | ||
test.done(); | ||
}); | ||
}); | ||
}); | ||
}, | ||
"All command(STARTTLS)": function(test){ | ||
var server = new RAIServer(); | ||
server.listen(PORT_NUMBER, function(err){ | ||
test.expect(2); | ||
server.on("connect", function(socket){ | ||
socket.tlsStatus = 0; | ||
socket.send("220 Welcome"); | ||
socket.on("command", function(command, payload){ | ||
switch(command){ | ||
case "EHLO": | ||
if(socket.tlsStatus===0){ | ||
socket.send("250-HI\r\n250 STARTTLS"); | ||
}else{ | ||
socket.send("250 HI"); | ||
} | ||
break; | ||
case "NOOP": socket.send("250 OK"); break; | ||
case "QUIT": socket.send("221 Bye"); socket.end(); break; | ||
case "STARTTLS": socket.startTLS(); socket.send("220 Go ahead"); break; | ||
default: socket.send("500"); | ||
} | ||
}); | ||
socket.on("tls", function(){ | ||
test.ok(1, "Secure connection opened"); | ||
socket.tlsStatus = 1; | ||
}); | ||
socket.on("error", function(err){ | ||
test.isError(err); | ||
}); | ||
}); | ||
var cmds = ["EHLO", "STARTTLS", "EHLO", "NOOP", "QUIT"]; | ||
runClientMockup(PORT_NUMBER, "localhost", cmds, function(lastResponse, allResponses){ | ||
allResponses = allResponses.map(function(value) { return value.toString("utf-8"); }); | ||
test.deepEqual(allResponses, ["220 Welcome\r\n", "250-HI\r\n250 STARTTLS\r\n", "220 Go ahead\r\n", | ||
"250 HI\r\n", "250 OK\r\n", "221 Bye\r\n" ]); | ||
server.end(function(){ | ||
test.done(); | ||
}); | ||
}); | ||
}); | ||
}, | ||
"Last commands(STARTTLS)": function(test){ | ||
var server = new RAIServer(); | ||
server.listen(PORT_NUMBER, function(err){ | ||
test.expect(2); | ||
server.on("connect", function(socket){ | ||
socket.tlsStatus = 0; | ||
socket.send("220 Welcome"); | ||
socket.on("command", function(command, payload){ | ||
switch(command){ | ||
case "EHLO": | ||
if(socket.tlsStatus===0){ | ||
socket.send("250-HI\r\n250 STARTTLS"); | ||
}else{ | ||
socket.send("250 HI"); | ||
} | ||
break; | ||
case "NOOP": socket.send("250 OK"); break; | ||
case "QUIT": socket.send("221 Bye"); socket.end(); break; | ||
case "STARTTLS": socket.startTLS(); socket.send("220 Go ahead"); break; | ||
default: socket.send("500"); | ||
} | ||
}); | ||
socket.on("tls", function(){ | ||
test.ok(1, "Secure connection opened"); | ||
socket.tlsStatus = 1; | ||
}); | ||
socket.on("error", function(err){ | ||
test.isError(err); | ||
}); | ||
}); | ||
var cmds = ["EHLO", "STARTTLS", "EHLO", "NOOP", "QUIT"]; | ||
runClientMockup(PORT_NUMBER, "localhost", cmds, function(lastResponse){ | ||
test.equal(lastResponse.toString("utf-8"), "221 Bye\r\n"); | ||
server.end(function(){ | ||
test.done(); | ||
}); | ||
}); | ||
}); | ||
} | ||
}; |
Sorry, the diff of this file is not supported yet
58044
1279
162