1'use strict';
2
3const common = require('../common');
4
5if (!common.hasCrypto)
6  common.skip('missing crypto');
7
8const https = require('https');
9const http = require('http');
10const net = require('net');
11const assert = require('assert');
12const tls = require('tls');
13const { readKey } = require('../common/fixtures');
14
15function request(socket) {
16  socket.write('GET / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n\r\n');
17}
18
19// https options
20const httpsOptions = {
21  key: readKey('agent1-key.pem'),
22  cert: readKey('agent1-cert.pem')
23};
24
25const server = https.createServer(httpsOptions, common.mustCall((req, res) => {
26  res.end('ok');
27}));
28
29server.on('dropRequest', common.mustCall((request, socket) => {
30  assert.strictEqual(request instanceof http.IncomingMessage, true);
31  assert.strictEqual(socket instanceof net.Socket, true);
32  server.close();
33}));
34
35server.listen(0, common.mustCall(() => {
36  const socket = tls.connect(
37    server.address().port,
38    {
39      rejectUnauthorized: false
40    },
41    common.mustCall(() => {
42      request(socket);
43      request(socket);
44      socket.on('error', common.mustNotCall());
45      socket.on('data', common.mustCallAtLeast());
46      socket.on('close', common.mustCall());
47    })
48  );
49}));
50
51server.maxRequestsPerSocket = 1;
52