mirror of
https://github.com/wekan/wekan.git
synced 2025-12-26 12:18:49 +01:00
105 lines
3 KiB
JavaScript
105 lines
3 KiB
JavaScript
var request = require('../index')
|
|
, http = require('http')
|
|
, assert = require('assert')
|
|
, zlib = require('zlib')
|
|
|
|
if (!zlib.Gunzip.prototype.setEncoding) {
|
|
try {
|
|
require('stringstream')
|
|
} catch (e) {
|
|
console.error('stringstream must be installed to run this test.')
|
|
console.error('skipping this test. please install stringstream and run again if you need to test this feature.')
|
|
process.exit(0)
|
|
}
|
|
}
|
|
|
|
var testContent = 'Compressible response content.\n'
|
|
, testContentGzip
|
|
|
|
var server = http.createServer(function (req, res) {
|
|
res.statusCode = 200
|
|
res.setHeader('Content-Type', 'text/plain')
|
|
|
|
if (/\bgzip\b/i.test(req.headers['accept-encoding'])) {
|
|
zlib.gzip(testContent, function (err, data) {
|
|
assert.ifError(err)
|
|
testContentGzip = data
|
|
res.setHeader('Content-Encoding', 'gzip')
|
|
res.end(data)
|
|
})
|
|
} else {
|
|
res.end(testContent)
|
|
}
|
|
})
|
|
|
|
server.listen(6767, function (err) {
|
|
assert.ifError(err)
|
|
|
|
var headers, options
|
|
|
|
// Transparently supports gzip decoding to callbacks
|
|
options = { url: 'http://localhost:6767/foo', gzip: true }
|
|
request.get(options, function (err, res, body) {
|
|
assert.ifError(err)
|
|
assert.strictEqual(res.headers['content-encoding'], 'gzip')
|
|
assert.strictEqual(body, testContent)
|
|
})
|
|
|
|
|
|
// Transparently supports gzip decoding to pipes
|
|
options = { url: 'http://localhost:6767/foo', gzip: true }
|
|
var chunks = []
|
|
request.get(options)
|
|
.on('data', function (chunk) { chunks.push(chunk) })
|
|
.on('end', function () {
|
|
assert.strictEqual(Buffer.concat(chunks).toString(), testContent)
|
|
})
|
|
.on('error', function (err) { assert.ifError(err) })
|
|
|
|
|
|
// Does not request gzip if user specifies Accepted-Encodings
|
|
headers = { 'Accept-Encoding': null }
|
|
options = {
|
|
url: 'http://localhost:6767/foo',
|
|
headers: headers,
|
|
gzip: true
|
|
}
|
|
request.get(options, function (err, res, body) {
|
|
assert.ifError(err)
|
|
assert.strictEqual(res.headers['content-encoding'], undefined)
|
|
assert.strictEqual(body, testContent)
|
|
})
|
|
|
|
|
|
// Does not decode user-requested encoding by default
|
|
headers = { 'Accept-Encoding': 'gzip' }
|
|
options = { url: 'http://localhost:6767/foo', headers: headers }
|
|
request.get(options, function (err, res, body) {
|
|
assert.ifError(err)
|
|
assert.strictEqual(res.headers['content-encoding'], 'gzip')
|
|
assert.strictEqual(body, testContentGzip.toString())
|
|
})
|
|
|
|
|
|
// Supports character encoding with gzip encoding
|
|
headers = { 'Accept-Encoding': 'gzip' }
|
|
options = {
|
|
url: 'http://localhost:6767/foo',
|
|
headers: headers,
|
|
gzip: true,
|
|
encoding: "utf8"
|
|
}
|
|
var strings = []
|
|
request.get(options)
|
|
.on('data', function (string) {
|
|
assert.strictEqual(typeof string, "string")
|
|
strings.push(string)
|
|
})
|
|
.on('end', function () {
|
|
assert.strictEqual(strings.join(""), testContent)
|
|
|
|
// Shutdown server after last test
|
|
server.close()
|
|
})
|
|
.on('error', function (err) { assert.ifError(err) })
|
|
})
|