Skip to content

Commit 28fcd46

Browse files
authored
Merge pull request #126 from murgatroid99/status_error_output_improvement
Add error code name to status error messages
2 parents ea12033 + 01d66dd commit 28fcd46

File tree

4 files changed

+26
-16
lines changed

4 files changed

+26
-16
lines changed

packages/grpc-native-core/src/client.js

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ var Duplex = stream.Duplex;
5353
var util = require('util');
5454
var version = require('../package.json').version;
5555

56+
/**
57+
* Create an Error object from a status object
58+
* @private
59+
* @param {grpc~StatusObject} status The status object
60+
* @return {Error} The resulting Error
61+
*/
62+
function createStatusError(status) {
63+
let statusName = _.invert(constants.status)[status.code];
64+
let message = `${status.code} ${statusName}: ${status.details}`;
65+
let error = new Error(message);
66+
error.code = status.code;
67+
error.metadata = status.metadata;
68+
error.details = status.details;
69+
return error;
70+
}
71+
5672
/**
5773
* Initial response metadata sent by the server when it starts processing the
5874
* call
@@ -252,9 +268,7 @@ function _emitStatusIfDone() {
252268
if (status.code === constants.status.OK) {
253269
this.push(null);
254270
} else {
255-
var error = new Error(status.details);
256-
error.code = status.code;
257-
error.metadata = status.metadata;
271+
var error = createStatusError(status);
258272
this.emit('error', error);
259273
}
260274
this.emit('status', status);
@@ -551,9 +565,7 @@ Client.prototype.makeUnaryRequest = function(method, serialize, deserialize,
551565
}
552566
}
553567
if (status.code !== constants.status.OK) {
554-
error = new Error(status.details);
555-
error.code = status.code;
556-
error.metadata = status.metadata;
568+
error = new createStatusError(status);
557569
args.callback(error);
558570
} else {
559571
args.callback(null, deserialized);
@@ -634,9 +646,7 @@ Client.prototype.makeClientStreamRequest = function(method, serialize,
634646
}
635647
}
636648
if (status.code !== constants.status.OK) {
637-
error = new Error(response.status.details);
638-
error.code = status.code;
639-
error.metadata = status.metadata;
649+
error = createStatusError(status);
640650
args.callback(error);
641651
} else {
642652
args.callback(null, deserialized);

test/api/credentials_test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ describe('client credentials', function() {
319319
client_options);
320320
client.unary({}, function(err, data) {
321321
assert(err);
322-
assert.strictEqual(err.message,
322+
assert.strictEqual(err.details,
323323
'Getting metadata from plugin failed with error: ' +
324324
'Authentication error');
325325
assert.strictEqual(err.code, grpc.status.UNAUTHENTICATED);
@@ -369,7 +369,7 @@ describe('client credentials', function() {
369369
client_options);
370370
client.unary({}, function(err, data) {
371371
assert(err);
372-
assert.strictEqual(err.message,
372+
assert.strictEqual(err.details,
373373
'Getting metadata from plugin failed with error: ' +
374374
'Authentication failure');
375375
done();

test/api/surface_test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -981,15 +981,15 @@ describe('Other conditions', function() {
981981
client.unary({error: true}, function(err, data) {
982982
assert(err);
983983
assert.strictEqual(err.code, grpc.status.UNKNOWN);
984-
assert.strictEqual(err.message, 'Requested error');
984+
assert.strictEqual(err.details, 'Requested error');
985985
done();
986986
});
987987
});
988988
it('for a client stream call', function(done) {
989989
var call = client.clientStream(function(err, data) {
990990
assert(err);
991991
assert.strictEqual(err.code, grpc.status.UNKNOWN);
992-
assert.strictEqual(err.message, 'Requested error');
992+
assert.strictEqual(err.details, 'Requested error');
993993
done();
994994
});
995995
call.write({error: false});
@@ -1001,7 +1001,7 @@ describe('Other conditions', function() {
10011001
call.on('data', function(){});
10021002
call.on('error', function(error) {
10031003
assert.strictEqual(error.code, grpc.status.UNKNOWN);
1004-
assert.strictEqual(error.message, 'Requested error');
1004+
assert.strictEqual(error.details, 'Requested error');
10051005
done();
10061006
});
10071007
});
@@ -1013,7 +1013,7 @@ describe('Other conditions', function() {
10131013
call.on('data', function(){});
10141014
call.on('error', function(error) {
10151015
assert.strictEqual(error.code, grpc.status.UNKNOWN);
1016-
assert.strictEqual(error.message, 'Requested error');
1016+
assert.strictEqual(error.details, 'Requested error');
10171017
done();
10181018
});
10191019
});

test/interop/interop_client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ function statusCodeAndMessage(client, done) {
347347
client.unaryCall(arg, function(err, resp) {
348348
assert(err);
349349
assert.strictEqual(err.code, 2);
350-
assert.strictEqual(err.message, 'test status message');
350+
assert.strictEqual(err.details, 'test status message');
351351
done();
352352
});
353353
var duplex = client.fullDuplexCall();

0 commit comments

Comments
 (0)