• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const common = require('../common');
4if (!common.hasCrypto)
5  common.skip('missing crypto');
6const assert = require('assert');
7const h2 = require('http2');
8
9// Http2ServerRequest should always end readable stream
10// even on GET requests with no body
11
12const server = h2.createServer();
13server.listen(0, common.mustCall(function() {
14  const port = server.address().port;
15  server.once('request', common.mustCall(function(request, response) {
16    assert.strictEqual(request.complete, false);
17    request.on('data', () => {});
18    request.on('end', common.mustCall(() => {
19      assert.strictEqual(request.complete, true);
20      response.on('finish', common.mustCall(function() {
21        // The following tests edge cases on request socket
22        // right after finished fires but before backing
23        // Http2Stream is destroyed
24        assert.strictEqual(request.socket.readable, request.stream.readable);
25        assert.strictEqual(request.socket.readable, false);
26
27        server.close();
28      }));
29      assert.strictEqual(response.end(), response);
30    }));
31  }));
32
33  const url = `http://localhost:${port}`;
34  const client = h2.connect(url, common.mustCall(() => {
35    const request = client.request();
36    request.resume();
37    request.on('end', common.mustCall(() => {
38      client.close();
39    }));
40  }));
41}));
42