Skip to content

Commit

Permalink
Merge pull request #179 from murgatroid99/call_argument_handling_fix
Browse files Browse the repository at this point in the history
Fix handling of undefined values for optional call arguments
  • Loading branch information
murgatroid99 authored Feb 13, 2018
2 parents 42a1530 + ca27049 commit b5facc9
Show file tree
Hide file tree
Showing 2 changed files with 138 additions and 8 deletions.
36 changes: 28 additions & 8 deletions packages/grpc-native-core/src/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -513,13 +513,23 @@ exports.Client = Client;
Client.prototype.makeUnaryRequest = function(method, serialize, deserialize,
argument, metadata, options,
callback) {
if (!(metadata instanceof Metadata)) {
if (options instanceof Function) {
callback = options;
options = metadata;
if (metadata instanceof Metadata) {
options = {};
} else {
options = metadata;
metadata = new Metadata();
}
} else if (metadata instanceof Function) {
callback = metadata;
metadata = new Metadata();
options = {};
}
if (options instanceof Function) {
callback = options;
if (!metadata) {
metadata = new Metadata();
}
if (!options) {
options = {};
}
if (!((metadata instanceof Metadata) &&
Expand Down Expand Up @@ -599,13 +609,23 @@ Client.prototype.makeUnaryRequest = function(method, serialize, deserialize,
Client.prototype.makeClientStreamRequest = function(method, serialize,
deserialize, metadata,
options, callback) {
if (!(metadata instanceof Metadata)) {
if (options instanceof Function) {
callback = options;
options = metadata;
if (metadata instanceof Metadata) {
options = {};
} else {
options = metadata;
metadata = new Metadata();
}
} else if (metadata instanceof Function) {
callback = metadata;
metadata = new Metadata();
options = {};
}
if (options instanceof Function) {
callback = options;
if (!metadata) {
metadata = new Metadata();
}
if (!options) {
options = {};
}
if (!((metadata instanceof Metadata) &&
Expand Down
110 changes: 110 additions & 0 deletions test/api/surface_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,116 @@ describe('Echo metadata', function() {
done();
});
});
describe('Call argument handling', function() {
describe('Unary call', function() {
it('Should handle undefined options', function(done) {
var call = client.unary({}, metadata, undefined, function(err, data) {
assert.ifError(err);
});
call.on('metadata', function(metadata) {
assert.deepEqual(metadata.get('key'), ['value']);
done();
});
});
it('Should handle two undefined arguments', function(done) {
var call = client.unary({}, undefined, undefined, function(err, data) {
assert.ifError(err);
});
call.on('metadata', function(metadata) {
done();
});
});
it('Should handle one undefined argument', function(done) {
var call = client.unary({}, undefined, function(err, data) {
assert.ifError(err);
});
call.on('metadata', function(metadata) {
done();
});
});
});
describe('Client stream call', function() {
it('Should handle undefined options', function(done) {
var call = client.clientStream(metadata, undefined, function(err, data) {
assert.ifError(err);
});
call.on('metadata', function(metadata) {
assert.deepEqual(metadata.get('key'), ['value']);
done();
});
call.end();
});
it('Should handle two undefined arguments', function(done) {
var call = client.clientStream(undefined, undefined, function(err, data) {
assert.ifError(err);
});
call.on('metadata', function(metadata) {
done();
});
call.end();
});
it('Should handle one undefined argument', function(done) {
var call = client.clientStream(undefined, function(err, data) {
assert.ifError(err);
});
call.on('metadata', function(metadata) {
done();
});
call.end();
});
});
describe('Server stream call', function() {
it('Should handle undefined options', function(done) {
var call = client.serverStream({}, metadata, undefined);
call.on('data', function() {});
call.on('metadata', function(metadata) {
assert.deepEqual(metadata.get('key'), ['value']);
done();
});
});
it('Should handle two undefined arguments', function(done) {
var call = client.serverStream({}, undefined, undefined);
call.on('data', function() {});
call.on('metadata', function(metadata) {
done();
});
});
it('Should handle one undefined argument', function(done) {
var call = client.serverStream({}, undefined);
call.on('data', function() {});
call.on('metadata', function(metadata) {
done();
});
});
});
describe('Bidi stream call', function() {
it('Should handle undefined options', function(done) {
var call = client.bidiStream(metadata, undefined);
call.on('data', function() {});
call.on('metadata', function(metadata) {
assert.deepEqual(metadata.get('key'), ['value']);
done();
});
call.end();
});
it('Should handle two undefined arguments', function(done) {
var call = client.bidiStream(undefined, undefined);
call.on('data', function() {});
call.on('metadata', function(metadata) {
done();
});
call.end();
});
it('Should handle one undefined argument', function(done) {
var call = client.bidiStream(undefined);
call.on('data', function() {});
call.on('metadata', function(metadata) {
done();
});
call.end();
});
});
});
});
describe('Client malformed response handling', function() {
var server;
Expand Down

0 comments on commit b5facc9

Please sign in to comment.