• 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');
8const Countdown = require('../common/countdown');
9
10const body =
11  '<html><head></head><body><h1>this is some data</h2></body></html>';
12
13const server = h2.createServer();
14const count = 100;
15
16// We use the lower-level API here
17server.on('stream', common.mustCall(onStream, count));
18
19function onStream(stream, headers, flags) {
20  assert.strictEqual(headers[':scheme'], 'http');
21  assert.ok(headers[':authority']);
22  assert.strictEqual(headers[':method'], 'GET');
23  assert.strictEqual(flags, 5);
24  stream.respond({
25    'content-type': 'text/html',
26    ':status': 200
27  });
28  stream.write(body.slice(0, 20));
29  stream.end(body.slice(20));
30}
31
32server.on('close', common.mustCall());
33
34server.listen(0);
35
36server.on('listening', common.mustCall(() => {
37
38  const client = h2.connect(`http://localhost:${server.address().port}`);
39  client.setMaxListeners(101);
40
41  client.on('goaway', console.log);
42
43  client.on('connect', common.mustCall(() => {
44    assert(!client.encrypted);
45    assert(!client.originSet);
46    assert.strictEqual(client.alpnProtocol, 'h2c');
47  }));
48
49  const countdown = new Countdown(count, () => {
50    client.close();
51    server.close(common.mustCall());
52  });
53
54  for (let n = 0; n < count; n++) {
55    const req = client.request();
56
57    req.on('response', common.mustCall(function(headers) {
58      assert.strictEqual(headers[':status'], 200);
59      assert.strictEqual(headers['content-type'], 'text/html');
60      assert(headers.date);
61    }));
62
63    let data = '';
64    req.setEncoding('utf8');
65    req.on('data', (d) => data += d);
66    req.on('end', common.mustCall(() => {
67      assert.strictEqual(body, data);
68    }));
69    req.on('close', common.mustCall(() => countdown.dec()));
70  }
71}));
72