Skip to content

Commit 975a49b

Browse files
common: upgrade grpc to 1.0
1 parent 4f8d74a commit 975a49b

3 files changed

Lines changed: 76 additions & 50 deletions

File tree

packages/common/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"extend": "^3.0.0",
4949
"google-auto-auth": "^0.2.4",
5050
"google-proto-files": "^0.7.0",
51-
"grpc": "^0.14.1",
51+
"grpc": "^1.0.0",
5252
"is": "^3.0.1",
5353
"methmeth": "^1.0.0",
5454
"modelo": "^4.2.0",

packages/common/src/grpc-service.js

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,21 @@ GrpcService.createDeadline_ = function(timeout) {
458458
return new Date(Date.now() + timeout);
459459
};
460460

461+
/**
462+
* Checks for a grpc status code and extends the error object with additional
463+
* information.
464+
*
465+
* @private
466+
*
467+
* @param {error|object} err - The grpc error.
468+
* @return {error|null}
469+
*/
470+
GrpcService.decorateError_ = function(err) {
471+
var errorObj = is.error(err) ? err : {};
472+
473+
return GrpcService.decorateGrpcResponse_(errorObj, err);
474+
};
475+
461476
/**
462477
* Checks for a grpc status code and extends the supplied object with additional
463478
* information.
@@ -471,30 +486,26 @@ GrpcService.createDeadline_ = function(timeout) {
471486
GrpcService.decorateGrpcResponse_ = function(obj, response) {
472487
if (response && GRPC_ERROR_CODE_TO_HTTP[response.code]) {
473488
var defaultResponseDetails = GRPC_ERROR_CODE_TO_HTTP[response.code];
489+
var message = defaultResponseDetails.message;
490+
491+
if (response.message) {
492+
// gRPC error messages can be either stringified JSON or strings.
493+
try {
494+
message = JSON.parse(response.message).description;
495+
} catch(e) {
496+
message = response.message;
497+
}
498+
}
474499

475500
return extend(true, obj, response, {
476501
code: defaultResponseDetails.code,
477-
message: response.message || defaultResponseDetails.message
502+
message: message
478503
});
479504
}
480505

481506
return null;
482507
};
483508

484-
/**
485-
* Checks for a grpc status code and extends the error object with additional
486-
* information.
487-
*
488-
* @private
489-
*
490-
* @param {error|object} err - The grpc error.
491-
* @return {error|null}
492-
*/
493-
GrpcService.decorateError_ = function(err) {
494-
var errorObj = is.error(err) ? new Error() : {};
495-
return GrpcService.decorateGrpcResponse_(errorObj, err);
496-
};
497-
498509
/**
499510
* Checks for grpc status code and extends the status object with additional
500511
* information

packages/common/test/grpc-service.js

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,6 +1136,40 @@ describe('GrpcService', function() {
11361136
});
11371137
});
11381138

1139+
describe('decorateError_', function() {
1140+
var expectedDecoratedError = new Error('err.');
1141+
1142+
beforeEach(function() {
1143+
sinon.stub(GrpcService, 'decorateGrpcResponse_', function() {
1144+
return expectedDecoratedError;
1145+
});
1146+
});
1147+
1148+
it('should decorate an Error object', function() {
1149+
var grpcError = new Error('Hello');
1150+
grpcError.code = 2;
1151+
1152+
var decoratedError = GrpcService.decorateError_(grpcError);
1153+
var decorateArgs = GrpcService.decorateGrpcResponse_.getCall(0).args;
1154+
1155+
assert.strictEqual(decoratedError, expectedDecoratedError);
1156+
assert.strictEqual(decorateArgs[0] instanceof Error, true);
1157+
assert.strictEqual(decorateArgs[1], grpcError);
1158+
});
1159+
1160+
it('should decorate a plain object', function() {
1161+
var grpcMessage = { code: 2 };
1162+
1163+
var decoratedError = GrpcService.decorateError_(grpcMessage);
1164+
var decorateArgs = GrpcService.decorateGrpcResponse_.getCall(0).args;
1165+
1166+
assert.strictEqual(decoratedError, expectedDecoratedError);
1167+
assert.deepEqual(decorateArgs[0], {});
1168+
assert.strictEqual(decorateArgs[0] instanceof Error, false);
1169+
assert.strictEqual(decorateArgs[1], grpcMessage);
1170+
});
1171+
});
1172+
11391173
describe('decorateGrpcResponse_', function() {
11401174
it('should retrieve the HTTP code from the gRPC error map', function() {
11411175
var errorMap = GrpcService.GRPC_ERROR_CODE_TO_HTTP;
@@ -1165,46 +1199,27 @@ describe('GrpcService', function() {
11651199
assert.strictEqual(extended.message, errorMessage);
11661200
});
11671201

1168-
it('should return null for unknown errors', function() {
1169-
var error = new Error();
1170-
var extended = GrpcService.decorateGrpcResponse_(error, { code: 9999 });
1171-
1172-
assert.strictEqual(extended, null);
1173-
});
1174-
});
1175-
1176-
describe('decorateError_', function() {
1177-
var fakeError = new Error('err.');
1178-
1179-
beforeEach(function() {
1180-
sinon.stub(GrpcService, 'decorateGrpcResponse_', function() {
1181-
return fakeError;
1182-
});
1183-
});
1184-
1185-
it('should call decorateGrpcResponse_ with an error object', function() {
1186-
var grpcError = new Error('err.');
1202+
it('should use a stringified JSON message from the error', function() {
1203+
var errorMessage = 'This is an error message.';
11871204

1188-
grpcError.code = 2;
1205+
var err = {
1206+
code: 1,
1207+
message: JSON.stringify({
1208+
description: errorMessage
1209+
})
1210+
};
11891211

1190-
var error = GrpcService.decorateError_(grpcError);
1191-
var args = GrpcService.decorateGrpcResponse_.getCall(0).args;
1212+
var error = new Error();
1213+
var extended = GrpcService.decorateGrpcResponse_(error, err);
11921214

1193-
assert.strictEqual(fakeError, error);
1194-
assert(args[0] instanceof Error);
1195-
assert.strictEqual(args[1], grpcError);
1215+
assert.strictEqual(extended.message, errorMessage);
11961216
});
11971217

1198-
it('should call decorateGrpcResponse_ with a plain object', function() {
1199-
var grpcMessage = { code: 2 };
1200-
1201-
var error = GrpcService.decorateError_(grpcMessage);
1202-
var args = GrpcService.decorateGrpcResponse_.getCall(0).args;
1218+
it('should return null for unknown errors', function() {
1219+
var error = new Error();
1220+
var extended = GrpcService.decorateGrpcResponse_(error, { code: 9999 });
12031221

1204-
assert.strictEqual(fakeError, error);
1205-
assert.deepEqual(args[0], {});
1206-
assert(!(args[0] instanceof Error));
1207-
assert.strictEqual(args[1], grpcMessage);
1222+
assert.strictEqual(extended, null);
12081223
});
12091224
});
12101225

0 commit comments

Comments
 (0)