• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3const {
4  mustCall,
5  mustNotCall,
6  hasCrypto,
7  skip
8} = require('../common');
9if (!hasCrypto)
10  skip('missing crypto');
11const { createServer, connect } = require('http2');
12const assert = require('assert');
13{
14  const server = createServer();
15  server.listen(0, mustCall(() => {
16    const port = server.address().port;
17    const url = `http://localhost:${port}`;
18    const client = connect(url, mustCall(() => {
19      const request = client.request();
20      request.resume();
21      request.on('end', mustCall());
22      request.on('close', mustCall(() => {
23        client.close();
24      }));
25    }));
26
27    server.once('request', mustCall((request, response) => {
28      // response.write() returns true
29      assert(response.write('muahaha', 'utf8', mustCall()));
30
31      response.stream.close(0, mustCall(() => {
32        response.on('error', mustNotCall());
33
34        // response.write() without cb returns error
35        response.write('muahaha', mustCall((err) => {
36          assert.strictEqual(err.code, 'ERR_HTTP2_INVALID_STREAM');
37
38          // response.write() with cb returns falsy value
39          assert(!response.write('muahaha', mustCall()));
40
41          client.destroy();
42          server.close();
43        }));
44      }));
45    }));
46  }));
47}
48
49{
50  // Http2ServerResponse.write ERR_STREAM_WRITE_AFTER_END
51  const server = createServer();
52  server.listen(0, mustCall(() => {
53    const port = server.address().port;
54    const url = `http://localhost:${port}`;
55    const client = connect(url, mustCall(() => {
56      const request = client.request();
57      request.resume();
58      request.on('end', mustCall());
59      request.on('close', mustCall(() => {
60        client.close();
61      }));
62    }));
63
64    server.once('request', mustCall((request, response) => {
65      response.end();
66      response.write('asd', mustCall((err) => {
67        assert.strictEqual(err.code, 'ERR_STREAM_WRITE_AFTER_END');
68        client.destroy();
69        server.close();
70      }));
71    }));
72  }));
73}
74
75{
76  const server = createServer();
77  server.listen(0, mustCall(() => {
78    const port = server.address().port;
79    const url = `http://localhost:${port}`;
80    const client = connect(url, mustCall(() => {
81      client.request();
82    }));
83
84    server.once('request', mustCall((request, response) => {
85      response.destroy();
86      assert.strictEqual(response.write('asd', mustNotCall()), false);
87      client.destroy();
88      server.close();
89    }));
90  }));
91}
92