• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3
4if (!common.hasCrypto)
5  common.skip('missing crypto');
6
7const http2 = require('http2');
8const net = require('net');
9
10const {
11  HTTP2_HEADER_PATH,
12} = http2.constants;
13
14// Create a normal session, as a control case
15function normalSession(cb) {
16  http2.connect('https://google.com', (clientSession) => {
17    let error = null;
18    const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' });
19    req.on('error', (err) => {
20      error = err;
21    });
22    req.on('response', (_headers) => {
23      req.on('data', (_chunk) => { });
24      req.on('end', () => {
25        clientSession.close();
26        return cb(error);
27      });
28    });
29  });
30}
31normalSession(common.mustSucceed());
32
33// Create a session using a socket that has not yet finished connecting
34function socketNotFinished(done) {
35  const socket2 = net.connect(443, 'google.com');
36  http2.connect('https://google.com', { socket2 }, (clientSession) => {
37    let error = null;
38    const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' });
39    req.on('error', (err) => {
40      error = err;
41    });
42    req.on('response', (_headers) => {
43      req.on('data', (_chunk) => { });
44      req.on('end', () => {
45        clientSession.close();
46        socket2.destroy();
47        return done(error);
48      });
49    });
50  });
51}
52socketNotFinished(common.mustSucceed());
53
54// Create a session using a socket that has finished connecting
55function socketFinished(done) {
56  const socket = net.connect(443, 'google.com', () => {
57    http2.connect('https://google.com', { socket }, (clientSession) => {
58      let error = null;
59      const req = clientSession.request({ [HTTP2_HEADER_PATH]: '/' });
60      req.on('error', (err) => {
61        error = err;
62      });
63      req.on('response', (_headers) => {
64        req.on('data', (_chunk) => { });
65        req.on('end', () => {
66          clientSession.close();
67          return done(error);
68        });
69      });
70    });
71  });
72}
73socketFinished(common.mustSucceed());
74