test: more test coverage for maxConnections
authorRich Trott <rtrott@gmail.com>
Sat, 30 May 2015 14:49:56 +0000 (07:49 -0700)
committerBrendan Ashworth <brendan.ashworth@me.com>
Wed, 3 Jun 2015 04:01:21 +0000 (21:01 -0700)
If the server is not accepting connections because maxConnections
is exceeded, the server should start accepting connections again
when a connection closes.

PR-URL: https://github.com/nodejs/io.js/pull/1855
Reviewed-By: Brendan Ashworth <brendan.ashworth@me.com>
test/parallel/test-net-server-max-connections-close-makes-more-available.js [new file with mode: 0644]
test/parallel/test-net-server-max-connections.js

diff --git a/test/parallel/test-net-server-max-connections-close-makes-more-available.js b/test/parallel/test-net-server-max-connections-close-makes-more-available.js
new file mode 100644 (file)
index 0000000..a482be7
--- /dev/null
@@ -0,0 +1,85 @@
+'use strict';
+var common = require('../common');
+var assert = require('assert');
+
+var net = require('net');
+
+// Sets the server's maxConnections property to 1.
+// Open 2 connections (connection 0 and connection 1).
+// Connection 0  should be accepted.
+// Connection 1 should be rejected.
+// Closes connection 0.
+// Open 2 more connections (connection 2 and 3).
+// Connection 2 should be accepted.
+// Connection 3 should be rejected.
+
+var connections = [];
+var received = [];
+var sent = [];
+
+var createConnection = function(index) {
+  console.error('creating connection ' + index);
+
+  return new Promise(function(resolve, reject) {
+    var connection = net.createConnection(common.PORT, function() {
+      var msg = '' + index;
+      console.error('sending message: ' + msg);
+      this.write(msg);
+      sent.push(msg);
+    });
+
+    connection.on('data', function(e) {
+      console.error('connection ' + index + ' received response');
+      resolve();
+    });
+
+    connection.on('end', function() {
+      console.error('ending ' + index);
+      resolve();
+    });
+
+    connections[index] = connection;
+  });
+};
+
+var closeConnection = function(index) {
+  console.error('closing connection ' + index);
+  return new Promise(function(resolve, reject) {
+    connections[index].on('end', function() {
+      resolve();
+    });
+    connections[index].end();
+  });
+};
+
+var server = net.createServer(function(socket) {
+  socket.on('data', function(data) {
+    console.error('received message: ' + data);
+    received.push('' + data);
+    socket.write('acknowledged');
+  });
+});
+
+server.maxConnections = 1;
+
+server.listen(common.PORT, function() {
+  createConnection(0)
+  .then(createConnection.bind(null, 1))
+  .then(closeConnection.bind(null, 0))
+  .then(createConnection.bind(null, 2))
+  .then(createConnection.bind(null, 3))
+  .then(server.close.bind(server))
+  .then(closeConnection.bind(null, 2));
+});
+
+process.on('exit', function() {
+  // Confirm that all connections tried to send data...
+  assert.deepEqual(sent, [0, 1, 2, 3]);
+  // ...but that only connections 0 and 2 were successful.
+  assert.deepEqual(received, [0, 2]);
+});
+
+process.on('unhandledRejection', function() {
+  console.error('promise rejected');
+  assert.fail(null, null, 'A promise in the chain rejected');
+});
index 3b425ba..8de27d1 100644 (file)
@@ -7,8 +7,6 @@ var net = require('net');
 // This test creates 200 connections to a server and sets the server's
 // maxConnections property to 100. The first 100 connections make it through
 // and the last 100 connections are rejected.
-// TODO: test that the server can accept more connections after it reaches
-// its maximum and some are closed.
 
 var N = 200;
 var count = 0;