Skip to content

Instantly share code, notes, and snippets.

@kalloc
Created May 31, 2011 15:59
Show Gist options
  • Save kalloc/1000755 to your computer and use it in GitHub Desktop.
Save kalloc/1000755 to your computer and use it in GitHub Desktop.
nodejs: stress tools
function Combo(callback) {
this.callback = callback;
this.items = 0;
this.results = [];
}
Combo.prototype = {
add: function () {
var self = this;
this.items++;
return function () {
self.check(self.items - 1, arguments);
};
},
check: function (id, arguments_in) {
this.results[id] = arguments_in;
this.items--;
if (this.items == 0) {
this.callback.call(this, this.results);
}
}
};
var queries = 4000;
var total = queries;
var thread = 50;
var good = 0;
var sys = require('sys');
var org_queries = queries;
var net = require('net');
var www = function(num, cb) {
if(num == undefined) return 'www';
var socket = new net.Socket();
socket.setTimeout(10000);
var onEND = function() {
socket.end();
good++ ;
cb();
}
var cb_state = [onEND];
var state = 0;
socket.connect(80, "188.127.249.34");
socket.addListener('connect', function (data) {
socket.write("GET / HTTP/1.1\r\nHost: mail.wuza.ru\r\nConnection: close\r\n\r\n");
});
socket.addListener('timeout', function (data) {
socket.destroy();
cb()
});
socket.addListener('data', function (data) {
if(cb_state[state]) {
cb_state[state](data);
state++;
}
});
}
var pop3 = function(num, cb) {
if(num == undefined) return 'pop3';
var socket = new net.Socket();
socket.setTimeout(10000);
var onLogin = function() {
socket.write("user test_"+num%50+"@wuza.ru\n");
}
var onPassword = function() {
socket.write("pass 123\n");
}
var onList = function() {
socket.write("list\n");
}
var onRetr = function() {
socket.write("retr 1\n");
}
var onQuit = function() {
socket.end("quit\n");
good++ ;
cb();
}
var cb_state = [onLogin, onPassword, onList, onRetr, onQuit];
var state = 0;
socket.connect(110, "188.127.249.34");
socket.addListener('timeout', function (data) {
socket.destroy();
cb()
});
socket.addListener('end', function (data) {
socket.destroy();
cb()
});
socket.addListener('data', function (data) {
if(cb_state[state]) {
cb_state[state](data);
state++;
}
});
}
var millis = new Date().getTime();
var process = function(method) {
if(queries) {
var waiter = new Combo(function() {
process(method);
});
for(var num_thread = 1 ; num_thread <= thread; num_thread++) {
method(num_thread, waiter.add())
}
queries = queries - thread;
} else {
var millis_finish = new Date().getTime();
sys.print(org_queries, " queries finished, ",
"via - ", method(), " (",
good, " good, ",
total - good ," error). ",
"left time ", millis_finish - millis, "\n");
}
}
process(pop3);
process(www);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment