Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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