summaryrefslogtreecommitdiff
path: root/test/parallel/test-http-server-client-error.js
diff options
context:
space:
mode:
authorFedor Indutny <fedor@indutny.com>2016-01-06 17:00:27 -0500
committerFedor Indutny <fedor@indutny.com>2016-01-07 03:39:15 -0500
commit5f76b24e5ee440b7c2d2bdc74a9bb94374df9f2a (patch)
treec71a3fa6e69e57b9a50ad51188e7a2e9a19f53c7 /test/parallel/test-http-server-client-error.js
parent1ab6b21360d97719b3101153fb164c0c3eddf038 (diff)
downloadandroid-node-v8-5f76b24e5ee440b7c2d2bdc74a9bb94374df9f2a.tar.gz
android-node-v8-5f76b24e5ee440b7c2d2bdc74a9bb94374df9f2a.tar.bz2
android-node-v8-5f76b24e5ee440b7c2d2bdc74a9bb94374df9f2a.zip
http: overridable `clientError`
Make default `clientError` behavior (close socket immediately) overridable. With this APIs it is possible to write a custom error handler, and to send, for example, a 400 HTTP response. http.createServer(...).on('clientError', function(err, socket) { socket.end('HTTP/1.1 400 Bad Request\r\n\r\n'); socket.destroy(); }); Fix: #4543 PR-URL: https://github.com/nodejs/node/pull/4557 Reviewed-By: Brian White <mscdex@mscdex.net>
Diffstat (limited to 'test/parallel/test-http-server-client-error.js')
-rw-r--r--test/parallel/test-http-server-client-error.js39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/parallel/test-http-server-client-error.js b/test/parallel/test-http-server-client-error.js
new file mode 100644
index 0000000000..619a4c4517
--- /dev/null
+++ b/test/parallel/test-http-server-client-error.js
@@ -0,0 +1,39 @@
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+
+const http = require('http');
+const net = require('net');
+
+const server = http.createServer(common.mustCall(function(req, res) {
+ res.end();
+}));
+
+server.on('clientError', common.mustCall(function(err, socket) {
+ socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
+
+ server.close();
+}));
+
+server.listen(common.PORT, function() {
+ function next() {
+ // Invalid request
+ const client = net.connect(common.PORT);
+ client.end('Oopsie-doopsie\r\n');
+
+ var chunks = '';
+ client.on('data', function(chunk) {
+ chunks += chunk;
+ });
+ client.once('end', function() {
+ assert.equal(chunks, 'HTTP/1.1 400 Bad Request\r\n\r\n');
+ });
+ }
+
+ // Normal request
+ http.get({ port: common.PORT, path: '/' }, function(res) {
+ assert.equal(res.statusCode, 200);
+ res.resume();
+ res.once('end', next);
+ });
+});