|
|
|
'use strict';
|
|
|
|
|
|
|
|
const common = require('../common');
|
|
|
|
if (!common.hasCrypto)
|
|
|
|
common.skip('missing crypto');
|
|
|
|
const assert = require('assert');
|
|
|
|
const http2 = require('http2');
|
|
|
|
|
|
|
|
// Tests that write uses the correct encoding when writing
|
|
|
|
// using the helper function createWriteReq
|
|
|
|
|
|
|
|
const testString = 'a\u00A1\u0100\uD83D\uDE00';
|
|
|
|
|
|
|
|
const encodings = {
|
|
|
|
'buffer': 'utf8',
|
|
|
|
'ascii': 'ascii',
|
|
|
|
'latin1': 'latin1',
|
|
|
|
'binary': 'latin1',
|
|
|
|
'utf8': 'utf8',
|
|
|
|
'utf-8': 'utf8',
|
|
|
|
'ucs2': 'ucs2',
|
|
|
|
'ucs-2': 'ucs2',
|
|
|
|
'utf16le': 'ucs2',
|
|
|
|
'utf-16le': 'ucs2',
|
|
|
|
'UTF8': 'utf8' // should fall through to Buffer.from
|
|
|
|
};
|
|
|
|
|
|
|
|
const testsToRun = Object.keys(encodings).length;
|
|
|
|
let testsFinished = 0;
|
|
|
|
|
|
|
|
const server = http2.createServer(common.mustCall((req, res) => {
|
|
|
|
const testEncoding = encodings[req.url.slice(1)];
|
|
|
|
|
|
|
|
req.on('data', common.mustCall((chunk) => assert.ok(
|
|
|
|
Buffer.from(testString, testEncoding).equals(chunk)
|
|
|
|
)));
|
|
|
|
|
|
|
|
req.on('end', () => res.end());
|
|
|
|
}, Object.keys(encodings).length));
|
|
|
|
|
|
|
|
server.listen(0, common.mustCall(function() {
|
|
|
|
Object.keys(encodings).forEach((writeEncoding) => {
|
|
|
|
const client = http2.connect(`http://localhost:${this.address().port}`);
|
|
|
|
const req = client.request({
|
|
|
|
':path': `/${writeEncoding}`,
|
|
|
|
':method': 'POST'
|
|
|
|
});
|
|
|
|
|
|
|
|
assert.strictEqual(req._writableState.decodeStrings, false);
|
|
|
|
req.write(
|
|
|
|
writeEncoding !== 'buffer' ? testString : Buffer.from(testString),
|
|
|
|
writeEncoding !== 'buffer' ? writeEncoding : undefined
|
|
|
|
);
|
|
|
|
req.resume();
|
|
|
|
|
|
|
|
req.on('end', common.mustCall(function() {
|
|
|
|
client.destroy();
|
|
|
|
testsFinished++;
|
|
|
|
|
|
|
|
if (testsFinished === testsToRun) {
|
|
|
|
server.close();
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
|
|
|
req.end();
|
|
|
|
});
|
|
|
|
}));
|