• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const common = require('../common');
4if (!common.hasCrypto)
5  common.skip('missing crypto');
6const fixtures = require('../common/fixtures');
7const http2 = require('http2');
8const assert = require('assert');
9const fs = require('fs');
10
11const {
12  HTTP2_HEADER_CONTENT_TYPE,
13  HTTP2_HEADER_CONTENT_LENGTH,
14  HTTP2_HEADER_LAST_MODIFIED
15} = http2.constants;
16
17const fname = fixtures.path('elipses.txt');
18const data = fs.readFileSync(fname);
19const stat = fs.statSync(fname);
20
21const server = http2.createServer();
22server.on('stream', common.mustCall((stream) => {
23  stream.respondWithFile(fname, {
24    [HTTP2_HEADER_CONTENT_TYPE]: 'text/plain'
25  }, {
26    statCheck(stat, headers) {
27      headers[HTTP2_HEADER_LAST_MODIFIED] = stat.mtime.toUTCString();
28      headers[HTTP2_HEADER_CONTENT_LENGTH] = stat.size;
29    }
30  });
31}));
32
33server.listen(0, common.mustCall(() => {
34  const client = http2.connect(`http://localhost:${server.address().port}`);
35  const req = client.request();
36
37  req.on('response', common.mustCall((headers) => {
38    assert.strictEqual(headers[HTTP2_HEADER_CONTENT_TYPE], 'text/plain');
39    assert.strictEqual(+headers[HTTP2_HEADER_CONTENT_LENGTH], data.length);
40    assert.strictEqual(headers[HTTP2_HEADER_LAST_MODIFIED],
41                       stat.mtime.toUTCString());
42  }));
43  req.setEncoding('utf8');
44  let check = '';
45  req.on('data', (chunk) => check += chunk);
46  req.on('end', common.mustCall(() => {
47    assert.strictEqual(check, data.toString('utf8'));
48    client.close();
49    server.close();
50  }));
51  req.end();
52}));
53