Skip to content

Commit

Permalink
Add gzip support (#28)
Browse files Browse the repository at this point in the history
* change request.on(‘data’) to response.on(‘data’) to listen for raw data stream

* add newline before return

* rename test case

* remove old node support
use object.assign

* remove missing junk
  • Loading branch information
pedrorfernandes authored and satazor committed Dec 1, 2016
1 parent ea1dbd1 commit 098dc10
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 38 deletions.
1 change: 0 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
language: node_js
node_js:
- "0.12"
- "4"
- "5"
script: "npm run test-travis"
7 changes: 5 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,11 @@ function requestProgress(request, options) {
// Attach listeners
request
.on('request', onRequest.bind(null, context))
.on('response', onResponse.bind(null, context))
.on('data', onData.bind(null, context))
.on('response', function handleResponse(response) {
response.on('data', onData.bind(null, context));

return onResponse(context, response);
})
.on('end', onEnd.bind(null, context));

request.progressContext = context;
Expand Down
101 changes: 66 additions & 35 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ function normalizeStates(states) {
describe('request-progress', function () {
var request;
var states;
var response;

beforeEach(function () {
states = [];
request = new EventEmitter();
response = new EventEmitter();

request.on('progress', function (state) {
states.push(JSON.parse(JSON.stringify(state)));
Expand Down Expand Up @@ -51,18 +53,18 @@ describe('request-progress', function () {
});

request.emit('request');
request.emit('response', { headers: { 'content-length': 10 } });
request.emit('response', Object.assign(response, { headers: { 'content-length': 10 } }));

setTimeout(function () {
request.emit('data', new Buffer('aaaaa'));
response.emit('data', new Buffer('aaaaa'));
}, 25);

setTimeout(function () {
request.emit('data', new Buffer('bbb'));
response.emit('data', new Buffer('bbb'));
}, 1150);

setTimeout(function () {
request.emit('data', new Buffer('cc'));
response.emit('data', new Buffer('cc'));
request.emit('end');
}, 1250);
});
Expand All @@ -79,20 +81,20 @@ describe('request-progress', function () {
expect(request.progressState).to.be(undefined);

request.emit('request');
request.emit('response', { headers: { 'content-length': 2 } });
request.emit('response', Object.assign(response, { headers: { 'content-length': 2 } }));

expect(request.progressContext).to.be.an('object');
expect(request.progressState).to.be.an('object');

setTimeout(function () {
request.emit('data', new Buffer('a'));
response.emit('data', new Buffer('a'));
expect(request.progressContext).to.be.an('object');
expect(request.progressState).to.be.an('object');
expect(request.progressState.percentage).to.be(0.5);
}, 25);

setTimeout(function () {
request.emit('data', new Buffer('b'));
response.emit('data', new Buffer('b'));
expect(request.progressContext).to.be.an('object');
expect(request.progressState).to.be.an('object');
expect(request.progressState.percentage).to.be(1);
Expand All @@ -116,22 +118,22 @@ describe('request-progress', function () {
});

request.emit('request');
request.emit('response', { headers: { 'content-length': 10 } });
request.emit('response', Object.assign(response, { headers: { 'content-length': 10 } }));

setTimeout(function () {
request.emit('data', new Buffer('aa'));
response.emit('data', new Buffer('aa'));
}, 25);

setTimeout(function () {
request.emit('data', new Buffer('bb'));
response.emit('data', new Buffer('bb'));
}, 200);

setTimeout(function () {
request.emit('data', new Buffer('cc'));
response.emit('data', new Buffer('cc'));
}, 300);

setTimeout(function () {
request.emit('data', new Buffer('dddd'));
response.emit('data', new Buffer('dddd'));
request.emit('end');
}, 400);
});
Expand All @@ -153,30 +155,30 @@ describe('request-progress', function () {
});

request.emit('request');
request.emit('response', { headers: { 'content-length': 10 } });
request.emit('response', Object.assign(response, { headers: { 'content-length': 10 } }));

setTimeout(function () {
request.emit('data', new Buffer('aa'));
response.emit('data', new Buffer('aa'));
}, 25);

setTimeout(function () {
request.emit('data', new Buffer('bb'));
response.emit('data', new Buffer('bb'));
}, 100);

setTimeout(function () {
request.emit('data', new Buffer('cc'));
response.emit('data', new Buffer('cc'));
}, 300);

setTimeout(function () {
request.emit('data', new Buffer('dd'));
response.emit('data', new Buffer('dd'));
}, 400);

setTimeout(function () {
request.emit('data', new Buffer('e'));
response.emit('data', new Buffer('e'));
}, 500);

setTimeout(function () {
request.emit('data', new Buffer('bf'));
response.emit('data', new Buffer('bf'));
request.emit('end');
}, 700);
});
Expand All @@ -202,16 +204,16 @@ describe('request-progress', function () {
});

request.emit('request');
request.emit('response', {
request.emit('response', Object.assign(response, {
headers: { 'x-transfer-length': 10, 'content-length': 5 }
});
}));

setTimeout(function () {
request.emit('data', new Buffer('aaaaa'));
response.emit('data', new Buffer('aaaaa'));
}, 25);

setTimeout(function () {
request.emit('data', new Buffer('bbbbb'));
response.emit('data', new Buffer('bbbbb'));
request.emit('end');
}, 200);
});
Expand Down Expand Up @@ -245,14 +247,14 @@ describe('request-progress', function () {
});

request.emit('request');
request.emit('response', { headers: {} });
request.emit('response', Object.assign(response, { headers: {} }));

setTimeout(function () {
request.emit('data', new Buffer('aaaaa'));
response.emit('data', new Buffer('aaaaa'));
}, 25);

setTimeout(function () {
request.emit('data', new Buffer('bbbbbbb'));
response.emit('data', new Buffer('bbbbbbb'));
request.emit('end');
}, 1150);
});
Expand All @@ -278,14 +280,14 @@ describe('request-progress', function () {
});

request.emit('request');
request.emit('response', { headers: { 'content-length': 10 } });
request.emit('response', Object.assign(response, { headers: { 'content-length': 10 } }));

setTimeout(function () {
request.emit('data', new Buffer('aaaaa'));
response.emit('data', new Buffer('aaaaa'));
}, 25);

setTimeout(function () {
request.emit('data', new Buffer('bbbbbbb'));
response.emit('data', new Buffer('bbbbbbb'));
request.emit('end');
}, 1150);
});
Expand All @@ -294,14 +296,14 @@ describe('request-progress', function () {
progress(request, { throttle: 100 });

request.emit('request');
request.emit('response', { headers: { 'content-length': 10 } });
request.emit('response', Object.assign(response, { headers: { 'content-length': 10 } }));

setTimeout(function () {
request.emit('data', new Buffer('aa'));
response.emit('data', new Buffer('aa'));
}, 25);

setTimeout(function () {
request.emit('data', new Buffer('bbbbbbbb'));
response.emit('data', new Buffer('bbbbbbbb'));
request.emit('end');
}, 50);

Expand All @@ -326,10 +328,10 @@ describe('request-progress', function () {
});

request.emit('request');
request.emit('response', { headers: { 'content-length': 2 } });
request.emit('response', Object.assign(response, { headers: { 'content-length': 2 } }));

setTimeout(function () {
request.emit('data', new Buffer('aa'));
response.emit('data', new Buffer('aa'));
request.emit('end');
}, 25);
});
Expand All @@ -341,7 +343,7 @@ describe('request-progress', function () {
expect(request.progressState).to.be(undefined);

request.emit('request');
request.emit('response', { headers: { 'content-length': 2 } });
request.emit('response', Object.assign(response, { headers: { 'content-length': 2 } }));

expect(request.progressContext).to.be.an('object');
expect(request.progressState).to.be.an('object');
Expand All @@ -351,4 +353,33 @@ describe('request-progress', function () {
expect(request.progressContext).to.be.an('object');
expect(request.progressState).to.be(null);
});

it('should hook into "data" event from the response and not the request', function (done) {
// See: https://github.com/IndigoUnited/node-request-progress/issues/20

progress(request, { throttle: 0 })
.on('end', function () {
expect(states).to.have.length(2);
expect(states[0].percentage).to.be(0.5);
expect(states[1].percentage).to.be(1);

done();
});

request.emit('request');
request.emit('response', Object.assign(response, { headers: { 'content-length': 4 } }));

setTimeout(function () {
response.emit('data', new Buffer('aa'));
}, 25);

setTimeout(function () {
request.emit('data', new Buffer('aa'));
}, 50);

setTimeout(function () {
response.emit('data', new Buffer('aa'));
request.emit('end');
}, 100);
});
});

0 comments on commit 098dc10

Please sign in to comment.