summaryrefslogtreecommitdiff
path: root/node_modules/needle/test/compression_spec.js
diff options
context:
space:
mode:
author8cy <[email protected]>2020-04-03 02:37:42 -0700
committer8cy <[email protected]>2020-04-03 02:37:42 -0700
commit60867fb030bae582082340ead7dbc7efdc2f5398 (patch)
tree4c6a7356351be2e4914e15c4703172597c45656e /node_modules/needle/test/compression_spec.js
parentcommenting (diff)
downloads5nical-60867fb030bae582082340ead7dbc7efdc2f5398.tar.xz
s5nical-60867fb030bae582082340ead7dbc7efdc2f5398.zip
2020/04/03, 02:34, v1.2.0
Diffstat (limited to 'node_modules/needle/test/compression_spec.js')
-rw-r--r--node_modules/needle/test/compression_spec.js112
1 files changed, 112 insertions, 0 deletions
diff --git a/node_modules/needle/test/compression_spec.js b/node_modules/needle/test/compression_spec.js
new file mode 100644
index 0000000..80988be
--- /dev/null
+++ b/node_modules/needle/test/compression_spec.js
@@ -0,0 +1,112 @@
+var should = require('should'),
+ needle = require('./../'),
+ http = require('http'),
+ zlib = require('zlib'),
+ stream = require('stream'),
+ port = 11123,
+ server;
+
+describe('compression', function(){
+
+ require.bind(null, 'zlib').should.not.throw()
+
+ var jsonData = '{"foo":"bar"}';
+
+ describe('when server supports compression', function(){
+
+ before(function(){
+ server = http.createServer(function(req, res) {
+ var raw = new stream.PassThrough();
+
+ var acceptEncoding = req.headers['accept-encoding'];
+ if (!acceptEncoding) {
+ acceptEncoding = '';
+ }
+
+ if (acceptEncoding.match(/\bdeflate\b/)) {
+ res.setHeader('Content-Encoding', 'deflate');
+ raw.pipe(zlib.createDeflate()).pipe(res);
+ } else if (acceptEncoding.match(/\bgzip\b/)) {
+ res.setHeader('Content-Encoding', 'gzip');
+ raw.pipe(zlib.createGzip()).pipe(res);
+ } else if (acceptEncoding.match(/\bbr\b/)) {
+ res.setHeader('Content-Encoding', 'br');
+ raw.pipe(zlib.createBrotliCompress()).pipe(res);
+ } else {
+ raw.pipe(res);
+ }
+
+ res.setHeader('Content-Type', 'application/json')
+ if (req.headers['with-bad']) {
+ res.end('foo'); // end, no deflate data
+ } else {
+ raw.end(jsonData)
+ }
+
+ })
+
+ server.listen(port);
+ });
+
+ after(function(done){
+ server.close(done);
+ })
+
+ describe('and client requests no compression', function() {
+ it('should have the body decompressed', function(done){
+ needle.get('localhost:' + port, function(err, response, body){
+ should.ifError(err);
+ body.should.have.property('foo', 'bar');
+ response.bytes.should.equal(jsonData.length);
+ done();
+ })
+ })
+ })
+
+ describe('and client requests gzip compression', function() {
+ it('should have the body decompressed', function(done){
+ needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'gzip'}}, function(err, response, body){
+ should.ifError(err);
+ body.should.have.property('foo', 'bar');
+ response.bytes.should.not.equal(jsonData.length);
+ done();
+ })
+ })
+ })
+
+ describe('and client requests deflate compression', function() {
+ it('should have the body decompressed', function(done){
+ needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'deflate'}}, function(err, response, body){
+ should.ifError(err);
+ body.should.have.property('foo', 'bar');
+ response.bytes.should.not.equal(jsonData.length);
+ done();
+ })
+ })
+
+ it('should rethrow errors from decompressors', function(done){
+ needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'deflate', 'With-Bad': 'true'}}, function(err, response, body) {
+ should.exist(err);
+ err.message.should.equal("incorrect header check");
+ err.code.should.equal("Z_DATA_ERROR")
+ done();
+ })
+ })
+ })
+
+ describe('and client requests brotli compression', function() {
+ it('should have the body decompressed', function(done){
+ // Skip this test if Brotli is not supported
+ if (typeof zlib.BrotliDecompress !== 'function') {
+ return done();
+ }
+ needle.get('localhost:' + port, {headers: {'Accept-Encoding': 'br'}}, function(err, response, body){
+ should.ifError(err);
+ body.should.have.property('foo', 'bar');
+ response.bytes.should.not.equal(jsonData.length);
+ done();
+ })
+ })
+ })
+ })
+})