Skip to content

Commit d920615

Browse files
add early stream exit test conditions
1 parent 7528e09 commit d920615

File tree

1 file changed

+69
-12
lines changed

1 file changed

+69
-12
lines changed

test/datastore/request.js

Lines changed: 69 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,11 @@ describe('Request', function() {
563563
});
564564

565565
describe('success', function() {
566+
var entityResultsPerApiCall = {
567+
1: [{ a: true }],
568+
2: [{ b: true }, { c: true }]
569+
};
570+
566571
var apiResponse = {
567572
batch: {
568573
entityResults: [{ a: true }, { b: true }, { c: true }],
@@ -596,10 +601,6 @@ describe('Request', function() {
596601
});
597602

598603
it('should re-run query if not finished', function(done) {
599-
var entityResults = {
600-
1: [{ a: true }],
601-
2: [{ b: true }, { c: true }]
602-
};
603604
var continuationQuery;
604605
var query = {
605606
limitVal: 1,
@@ -616,15 +617,19 @@ describe('Request', function() {
616617
var offsetCalled = false;
617618

618619
entityOverrides.formatArray = function(array) {
619-
assert.strictEqual(array, entityResults[timesRequestCalled]);
620-
return entityResults[timesRequestCalled];
620+
assert.strictEqual(
621+
array,
622+
entityResultsPerApiCall[timesRequestCalled]
623+
);
624+
return entityResultsPerApiCall[timesRequestCalled];
621625
};
622626

623627
request.request_ = function(protoOpts, reqOpts, callback) {
624628
timesRequestCalled++;
625629

626630
var resp = extend(true, {}, apiResponse);
627-
resp.batch.entityResults = entityResults[timesRequestCalled];
631+
resp.batch.entityResults =
632+
entityResultsPerApiCall[timesRequestCalled];
628633

629634
if (timesRequestCalled === 1) {
630635
assert.strictEqual(protoOpts.service, 'Datastore');
@@ -661,7 +666,7 @@ describe('Request', function() {
661666
if (timesRequestCalled === 1) {
662667
assert.strictEqual(
663668
limit_,
664-
entityResults[1].length - query.limitVal
669+
entityResultsPerApiCall[1].length - query.limitVal
665670
);
666671
} else {
667672
// Should restore the original limit.
@@ -679,14 +684,16 @@ describe('Request', function() {
679684

680685
request.runQuery(query, function(err, entities, info) {
681686
assert.ifError(err);
682-
assert.deepEqual(
683-
entities,
684-
[].slice.call(entityResults[1]).concat(entityResults[2])
685-
);
687+
688+
var allResults = [].slice.call(entityResultsPerApiCall[1])
689+
.concat(entityResultsPerApiCall[2]);
690+
assert.deepEqual(entities, allResults);
691+
686692
assert.deepEqual(info, {
687693
endCursor: apiResponse.batch.endCursor,
688694
moreResults: apiResponse.batch.moreResults
689695
});
696+
690697
done();
691698
});
692699
});
@@ -742,6 +749,56 @@ describe('Request', function() {
742749
done();
743750
});
744751
});
752+
753+
it('should not push more results if stream was ended', function(done) {
754+
var timesRequestCalled = 0;
755+
var entitiesEmitted = 0;
756+
757+
request.request_ = function(protoOpts, reqOpts, callback) {
758+
timesRequestCalled++;
759+
760+
var resp = extend(true, {}, apiResponse);
761+
resp.batch.entityResults =
762+
entityResultsPerApiCall[timesRequestCalled];
763+
764+
if (timesRequestCalled === 1) {
765+
resp.batch.moreResults = 'NOT_FINISHED';
766+
callback(null, resp);
767+
} else {
768+
resp.batch.moreResults = 'MORE_RESULTS_AFTER_LIMIT';
769+
callback(null, resp);
770+
}
771+
};
772+
773+
request.runQuery({})
774+
.on('data', function() {
775+
entitiesEmitted++;
776+
this.end();
777+
})
778+
.on('end', function() {
779+
assert.strictEqual(entitiesEmitted, 1);
780+
done();
781+
});
782+
});
783+
784+
it('should not get more results if stream was ended', function(done) {
785+
var timesRequestCalled = 0;
786+
787+
request.request_ = function(protoOpts, reqOpts, callback) {
788+
timesRequestCalled++;
789+
callback(null, apiResponse);
790+
};
791+
792+
request.runQuery({})
793+
.on('error', done)
794+
.on('data', function() {
795+
this.end();
796+
})
797+
.on('end', function() {
798+
assert.strictEqual(timesRequestCalled, 1);
799+
done();
800+
});
801+
});
745802
});
746803
});
747804

0 commit comments

Comments
 (0)