mirror of
https://gitee.com/java110/MicroCommunityWeb.git
synced 2026-02-24 21:59:12 +08:00
161 lines
5.4 KiB
JavaScript
Executable File
161 lines
5.4 KiB
JavaScript
Executable File
'use strict';
|
|
var assert = require('assert');
|
|
var express = require('express');
|
|
var request = require('supertest');
|
|
var fs = require('fs');
|
|
var os = require('os');
|
|
var proxy = require('../');
|
|
var startProxyTarget = require('./support/proxyTarget');
|
|
|
|
|
|
describe('body encoding', function () {
|
|
var server;
|
|
|
|
before(function () {
|
|
server = startProxyTarget(8109, 1000);
|
|
});
|
|
|
|
after(function () {
|
|
server.close();
|
|
});
|
|
|
|
this.timeout(10000);
|
|
|
|
var pngHex = '89504e470d0a1a0a0' +
|
|
'000000d4948445200' +
|
|
'00000100000001080' +
|
|
'60000001f15c48900' +
|
|
'00000a49444154789' +
|
|
'c6300010000050001' +
|
|
'0d0a2db4000000004' +
|
|
'9454e44ae426082';
|
|
var pngData = new Buffer(pngHex, 'hex');
|
|
|
|
it('allow raw data', function (done) {
|
|
var filename = os.tmpdir() + '/express-http-proxy-test-' + (new Date()).getTime() + '-png-transparent.png';
|
|
var app = express();
|
|
|
|
app.use(proxy('localhost:8109', {
|
|
reqBodyEncoding: null,
|
|
proxyReqBodyDecorator: function (bodyContent) {
|
|
assert((new Buffer(bodyContent).toString('hex')).indexOf(pngData.toString('hex')) >= 0,
|
|
'body should contain same data');
|
|
return bodyContent;
|
|
}
|
|
}));
|
|
|
|
fs.writeFile(filename, pngData, function (err) {
|
|
if (err) { throw err; }
|
|
request(app)
|
|
.post('/post')
|
|
.attach('image', filename)
|
|
.end(function (err) {
|
|
fs.unlinkSync(filename);
|
|
// This test is both broken and I think unnecessary.
|
|
// Its broken because http.bin no longer supports /post, but this test assertion is based on the old
|
|
// httpbin behavior.
|
|
// The assertion in the decorateRequest above verifies the test title.
|
|
//var response = new Buffer(res.body.attachment.data).toString('base64');
|
|
//assert(response.indexOf(pngData.toString('base64')) >= 0, 'response should include original raw data');
|
|
|
|
done(err);
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe('when user sets parseReqBody', function () {
|
|
it('should not parse body', function (done) {
|
|
var filename = os.tmpdir() + '/express-http-proxy-test-' + (new Date()).getTime() + '-png-transparent.png';
|
|
var app = express();
|
|
app.use(proxy('localhost:8109', {
|
|
parseReqBody: false,
|
|
proxyReqBodyDecorator: function (bodyContent) {
|
|
assert(!bodyContent, 'body content should not be parsed.');
|
|
return bodyContent;
|
|
}
|
|
}));
|
|
|
|
fs.writeFile(filename, pngData, function (err) {
|
|
if (err) { throw err; }
|
|
request(app)
|
|
.post('/post')
|
|
.attach('image', filename)
|
|
.end(function (err) {
|
|
fs.unlinkSync(filename);
|
|
// This test is both broken and I think unnecessary.
|
|
// Its broken because http.bin no longer supports /post, but this test assertion is based on the old
|
|
// httpbin behavior.
|
|
// The assertion in the decorateRequest above verifies the test title.
|
|
// var response = new Buffer(res.body.attachment.data).toString('base64');
|
|
// assert(response.indexOf(pngData.toString('base64')) >= 0, 'response should include original raw data');
|
|
|
|
done(err);
|
|
});
|
|
});
|
|
});
|
|
it('should not fail on large limit', function (done) {
|
|
var filename = os.tmpdir() + '/express-http-proxy-test-' + (new Date()).getTime() + '-png-transparent.png';
|
|
var app = express();
|
|
app.use(proxy('localhost:8109', {
|
|
parseReqBody: false,
|
|
limit: '20gb',
|
|
}));
|
|
fs.writeFile(filename, pngData, function (err) {
|
|
if (err) { throw err; }
|
|
request(app)
|
|
.post('/post')
|
|
.attach('image', filename)
|
|
.end(function (err) {
|
|
fs.unlinkSync(filename);
|
|
assert(err === null);
|
|
// This test is both broken and I think unnecessary.
|
|
// Its broken because http.bin no longer supports /post, but this test assertion is based on the old
|
|
// httpbin behavior.
|
|
// The assertion in the decorateRequest above verifies the test title.
|
|
//var response = new Buffer(res.body.attachment.data).toString('base64');
|
|
//assert(response.indexOf(pngData.toString('base64')) >= 0, 'response should include original raw data');
|
|
|
|
done(err);
|
|
});
|
|
});
|
|
});
|
|
it('should fail with an error when exceeding limit', function (done) {
|
|
var app = express();
|
|
app.use(proxy('localhost:8109', {
|
|
limit: 1,
|
|
}));
|
|
// silence jshint warning about unused vars - express error handler *needs* 4 args
|
|
app.use(function (err, req, res, next) { // eslint-disable-line no-unused-vars
|
|
res.json(err);
|
|
});
|
|
request(app)
|
|
.post('/post')
|
|
.send({ some: 'json' })
|
|
.end(function (err, response) {
|
|
assert(response.body.message === 'request entity too large');
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
describe('when user sets reqBodyEncoding', function () {
|
|
it('should set the accepts-charset header', function (done) {
|
|
var app = express();
|
|
app.use(proxy('localhost:8109', {
|
|
reqBodyEncoding: 'utf-16'
|
|
}));
|
|
request(app)
|
|
.get('/headers')
|
|
.end(function (err, res) {
|
|
if (err) { throw err; }
|
|
assert.equal(res.body.headers['accept-charset'], 'utf-16');
|
|
done(err);
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
});
|