mirror of https://gitee.com/openkylin/nodejs.git
79 lines
2.0 KiB
JavaScript
79 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
// Flags: --expose-gc
|
|
|
|
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.close();
|
|
testsFinished++;
|
|
|
|
if (testsFinished === testsToRun) {
|
|
server.close(common.mustCall());
|
|
}
|
|
}));
|
|
|
|
// Ref: https://github.com/nodejs/node/issues/17840
|
|
const origDestroy = req.destroy;
|
|
req.destroy = function(...args) {
|
|
// Schedule a garbage collection event at the end of the current
|
|
// MakeCallback() run.
|
|
process.nextTick(global.gc);
|
|
return origDestroy.call(this, ...args);
|
|
};
|
|
|
|
req.end();
|
|
});
|
|
}));
|