--- /dev/null
+include("mjsunit.js");
+// settings
+var port = 20743;
+var bytes = 1024*40;
+var concurrency = 100;
+var connections_per_client = 5;
+
+// measured
+var total_connections = 0;
+
+var body = "";
+for (var i = 0; i < bytes; i++) {
+ body += "C";
+}
+
+var server = node.tcp.createServer(function (c) {
+ c.addListener("connect", function () {
+ total_connections++;
+ print("#");
+ c.send(body);
+ c.fullClose();
+ });
+});
+server.listen(port);
+
+function runClient (callback) {
+ var client = node.tcp.createConnection(port);
+ client.connections = 0;
+ client.setEncoding("utf8");
+
+ client.addListener("connect", function () {
+ client.recved = "";
+ client.connections += 1;
+ });
+
+ client.addListener("receive", function (chunk) {
+ this.recved += chunk;
+ });
+
+ client.addListener("eof", function (had_error) {
+ client.close();
+ });
+
+ client.addListener("disconnect", function (had_error) {
+ print(".");
+ assertFalse(had_error);
+ assertEquals(bytes, client.recved.length);
+ if (this.connections < connections_per_client) {
+ this.connect(port);
+ } else {
+ callback();
+ }
+ });
+}
+
+
+function onLoad () {
+ var finished_clients = 0;
+ for (var i = 0; i < concurrency; i++) {
+ runClient(function () {
+ if (++finished_clients == concurrency) server.close();
+ });
+ }
+}
+
+function onExit () {
+ assertEquals(connections_per_client * concurrency, total_connections);
+ puts("\nokay!");
+}