Skip to content

Commit

Permalink
Merge pull request #192 from punitx/support_content_encoding
Browse files Browse the repository at this point in the history
Added support for content-encoding
  • Loading branch information
vedharish committed Dec 5, 2017
2 parents db935b0 + 4d87673 commit 2e28f70
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 20 deletions.
6 changes: 3 additions & 3 deletions lib/proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ var ProxyServer = {
};

var proxy = http.request(options, function (res) {
var data = '';
var chunks = [];
res.on('data', function(chunk) {
data += chunk;
chunks.push(chunk);
});
res.on('end', function() {
//Replace
callback(res, data);
callback(res, Buffer.concat(chunks));
});
}).on('error', function(e) {
client_res.writeHead(500);
Expand Down
69 changes: 53 additions & 16 deletions lib/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ var Log = require('./logger'),
send = require('send'),
vm = require('vm'),
CircularJSON = require('circular-json'),
resolve = require('resolve');
resolve = require('resolve'),
zlib = require('zlib');

exports.Server = function Server(bsClient, workers, config, callback) {
var testFilePaths = (Array.isArray(config.test_path) ? config.test_path : [ config.test_path ])
Expand Down Expand Up @@ -205,25 +206,61 @@ exports.Server = function Server(bsClient, workers, config, callback) {
response.end();
};

var patchResponse = function (data, headers, callback) {
var mimeType = mime.lookup(filename);
var finalData = data;
if (mimeType === 'text/html') {
var matcher = /(.*)<\/head>/;
var patch = getReporterPatch();
finalData = data.replace(matcher, patch);
headers['content-length'] = finalData.length;
}
callback && callback(finalData, headers);
};

var checkForEncodingAndPatch = function (responseData, headers, callback) {
var encoding = headers['content-encoding'];
if (encoding === 'gzip') {
zlib.gunzip(responseData, function (err, decoded) {
if (!err) {
patchResponse(decoded && decoded.toString(), headers, function (data, headers) {
zlib.gzip(data, function (err, encoded) {
if (!err) {
callback && callback(encoded, headers);
}
});
});
}
});
} else if (encoding === 'deflate') {
zlib.inflate(responseData, function (err, decoded) {
if (!err) {
patchResponse(decoded && decoded.toString(), headers, function (data, headers) {
zlib.deflate(data, function (err, encoded) {
if (!err) {
callback && callback(encoded, headers);
}
});
});
}
});
} else {
patchResponse(responseData, headers, function (data, headers) {
callback && callback(data, headers);
});
}
};

if (!doNotUseProxy && config.test_server) {
proxyServer.onRequest(request, response, config.test_server, function(remote_response, response_data) {
var mimeType = mime.lookup(filename);
var final_data = response_data;
proxyServer.onRequest(request, response, config.test_server, function (remote_response, response_data) {
var headers = remote_response.headers;
if (mimeType === 'text/html') {
var matcher = /(.*)<\/head>/;
var patch = getReporterPatch();
final_data = response_data.replace(matcher, patch);
headers['content-length'] = final_data.length;
}
response.writeHead(remote_response.statusCode, headers);
response.write(final_data);
response.end();
return;
checkForEncodingAndPatch(response_data, headers, function (data, headers) {
response.writeHead(remote_response.statusCode, headers);
response.write(data);
response.end();
});
});

} else {

fs.exists(filename, function(exists) {
if (!exists) {
sendError(response,'file not found', 404);
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "browserstack-runner",
"description": "A command line interface to run browser tests over BrowserStack",
"version": "0.5.2",
"version": "0.6.0",
"homepage": "https://github.com/browserstack/browserstack-runner",
"repository": {
"type": "git",
Expand Down

0 comments on commit 2e28f70

Please sign in to comment.