Skip to content
This repository has been archived by the owner on Dec 16, 2023. It is now read-only.

Record unzipped reply #72

Merged
merged 1 commit into from Oct 19, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -33,6 +33,7 @@
"babel": "^5.2.9",
"babel-eslint": "^3.0.1",
"body-parser": "^1.12.3",
"compression": "^1.6.0",
"del": "^1.1.1",
"eslint": "^0.20.0",
"express": "^4.12.3",
Expand Down
11 changes: 9 additions & 2 deletions src/pass_through.js
@@ -1,5 +1,5 @@
const HTTP = require('http');

const Zlib = require('zlib');

const ClientRequest = HTTP.ClientRequest;

Expand Down Expand Up @@ -36,10 +36,17 @@ module.exports = function passThrough(passThroughFunction) {
version: response.httpVersion,
statusCode: response.statusCode,
statusMessage: response.statusMessage,
headers: response.headers,
rawHeaders: response.rawHeaders,
headers: Object.assign({}, response.headers),
body: []
};
if (['gzip', 'deflate'].indexOf(captured.headers['content-encoding']) !== -1) {
const unzip = Zlib.createUnzip();
unzip.trailers = response.trailers;
unzip.rawTrailers = response.rawTrailers;
response = response.pipe(unzip);
delete captured.headers['content-encoding'];
}
response.on('data', function(chunk, encoding) {
captured.body.push([chunk, encoding]);
});
Expand Down
8 changes: 8 additions & 0 deletions test/helpers.js
Expand Up @@ -7,6 +7,7 @@

const Express = require('express');
const bodyParser = require('body-parser');
const compression = require('compression');
const HTTP = require('http');
const HTTPS = require('https');
const Replay = require('../src');
Expand All @@ -32,7 +33,14 @@ Replay.silent = true;

// Serve pages from localhost.
const server = new Express();
server.use(compression({
filter: function(req) {
return req.headers['accept-encoding'] != null;
},
threshold: 1
}));
server.use( bodyParser.urlencoded({ extended: false }) );

// Success page.
server.get('/', function(req, res) {
res.send('Success!');
Expand Down
53 changes: 53 additions & 0 deletions test/replay_test.js
Expand Up @@ -323,6 +323,59 @@ describe('Replay', function() {
});


describe('recording gzipped replay', function() {
const fixturesDir = `${__dirname}/fixtures/127.0.0.1-${HTTP_PORT}`;

before(setup);

before(function() {
Replay.mode = 'record';
Replay.reset('127.0.0.1');
});

it('should create unzipped fixture for gzipped reply', function(done) {
const query = { name: 'Amet', extra: 'consectetur'};
const request = function(callback) {
Request.get({
url: `http://127.0.0.1:${HTTP_PORT}/query`,
qs: query,
headers: {
'accept-encoding': 'gzip'
},
json: true
}, function(error, response, body) {
if (error)
callback(error);
else
try {
assert.deepEqual(body, query);
callback(null, query);
} catch (error) {
callback(error);
}
});
};

request(function(error) {
if (error)
done(error);
else {
// fixtures should be written now
Replay.mode = 'replay';
request(done);
}
});
});

after(function() {
for(let file of File.readdirSync(fixturesDir))
File.unlinkSync(`${fixturesDir}/${file}`);
File.rmdirSync(fixturesDir);
});

});


describe('recording multiple of the same header', function() {
const fixturesDir = `${__dirname}/fixtures/127.0.0.1-${HTTP_PORT}`;

Expand Down