• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3const assert = require('assert');
4
5const http = require('http');
6const net = require('net');
7
8const server = http.createServer(common.mustCall(function(req, res) {
9  res.end();
10}));
11
12server.on('clientError', common.mustCall(function(err, socket) {
13  assert.strictEqual(err instanceof Error, true);
14  assert.strictEqual(err.code, 'HPE_INVALID_METHOD');
15  assert.strictEqual(err.bytesParsed, 1);
16  assert.strictEqual(err.message, 'Parse Error: Invalid method encountered');
17  assert.strictEqual(err.rawPacket.toString(), 'Oopsie-doopsie\r\n');
18
19  socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
20
21  server.close();
22}));
23
24server.listen(0, function() {
25  function next() {
26    // Invalid request
27    const client = net.connect(server.address().port);
28    client.end('Oopsie-doopsie\r\n');
29
30    let chunks = '';
31    client.on('data', function(chunk) {
32      chunks += chunk;
33    });
34    client.once('end', function() {
35      assert.strictEqual(chunks, 'HTTP/1.1 400 Bad Request\r\n\r\n');
36    });
37  }
38
39  // Normal request
40  http.get({ port: this.address().port, path: '/' }, function(res) {
41    assert.strictEqual(res.statusCode, 200);
42    res.resume();
43    res.once('end', next);
44  });
45});
46