summaryrefslogtreecommitdiff
path: root/test/parallel/test-http2-server-push-stream.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/parallel/test-http2-server-push-stream.js')
-rw-r--r--test/parallel/test-http2-server-push-stream.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/test/parallel/test-http2-server-push-stream.js b/test/parallel/test-http2-server-push-stream.js
new file mode 100644
index 0000000000..c2f34ed517
--- /dev/null
+++ b/test/parallel/test-http2-server-push-stream.js
@@ -0,0 +1,58 @@
+// Flags: --expose-http2
+'use strict';
+
+const common = require('../common');
+const assert = require('assert');
+const http2 = require('http2');
+
+const server = http2.createServer();
+server.on('stream', common.mustCall((stream, headers) => {
+ const port = server.address().port;
+ if (headers[':path'] === '/') {
+ stream.pushStream({
+ ':scheme': 'http',
+ ':path': '/foobar',
+ ':authority': `localhost:${port}`,
+ }, (push, headers) => {
+ push.respond({
+ 'content-type': 'text/html',
+ ':status': 200,
+ 'x-push-data': 'pushed by server',
+ });
+ push.end('pushed by server data');
+ stream.end('test');
+ });
+ }
+ stream.respond({
+ 'content-type': 'text/html',
+ ':status': 200
+ });
+}));
+
+server.listen(0, common.mustCall(() => {
+ const port = server.address().port;
+ const headers = { ':path': '/' };
+ const client = http2.connect(`http://localhost:${port}`);
+ const req = client.request(headers);
+
+ client.on('stream', common.mustCall((stream, headers) => {
+ assert.strictEqual(headers[':scheme'], 'http');
+ assert.strictEqual(headers[':path'], '/foobar');
+ assert.strictEqual(headers[':authority'], `localhost:${port}`);
+ stream.on('push', common.mustCall((headers) => {
+ assert.strictEqual(headers[':status'], 200);
+ assert.strictEqual(headers['content-type'], 'text/html');
+ assert.strictEqual(headers['x-push-data'], 'pushed by server');
+ }));
+ }));
+
+ let data = '';
+
+ req.on('data', common.mustCall((d) => data += d));
+ req.on('end', common.mustCall(() => {
+ assert.strictEqual(data, 'test');
+ server.close();
+ client.destroy();
+ }));
+ req.end();
+}));