Skip to content

Commit 1ca2555

Browse files
authored
Merge pull request #428 from nicolasnoble/utf8-details
Properly create slices from utf8 strings.
2 parents 278e7fe + 9a5da08 commit 1ca2555

File tree

4 files changed

+33
-8
lines changed

4 files changed

+33
-8
lines changed

packages/grpc-native-core/ext/slice.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void buffer_destroy_func(void *user_data) {
5151
grpc_slice CreateSliceFromString(const Local<String> source) {
5252
Nan::HandleScope scope;
5353
Nan::Utf8String *utf8_value = new Nan::Utf8String(source);
54-
return grpc_slice_new_with_user_data(**utf8_value, source->Length(),
54+
return grpc_slice_new_with_user_data(**utf8_value, utf8_value->length(),
5555
string_destroy_func, utf8_value);
5656
}
5757

packages/grpc-native-core/test/surface_test.js

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -839,8 +839,12 @@ describe('Other conditions', function() {
839839
unary: function(call, cb) {
840840
var req = call.request;
841841
if (req.error) {
842+
var message = 'Requested error';
843+
if (req.message) {
844+
message = req.message;
845+
}
842846
cb({code: grpc.status.UNKNOWN,
843-
details: 'Requested error'}, null, trailer_metadata);
847+
details: message}, null, trailer_metadata);
844848
} else {
845849
cb(null, {count: 1}, trailer_metadata);
846850
}
@@ -850,8 +854,12 @@ describe('Other conditions', function() {
850854
var errored;
851855
stream.on('data', function(data) {
852856
if (data.error) {
857+
var message = 'Requested error';
858+
if (data.message) {
859+
message = data.message;
860+
}
853861
errored = true;
854-
cb(new Error('Requested error'), null, trailer_metadata);
862+
cb(new Error(message), null, trailer_metadata);
855863
} else {
856864
count += 1;
857865
}
@@ -865,8 +873,12 @@ describe('Other conditions', function() {
865873
serverStream: function(stream) {
866874
var req = stream.request;
867875
if (req.error) {
876+
var message = 'Requested error';
877+
if (req.message) {
878+
message = req.message;
879+
}
868880
var err = {code: grpc.status.UNKNOWN,
869-
details: 'Requested error'};
881+
details: message};
870882
err.metadata = trailer_metadata;
871883
stream.emit('error', err);
872884
} else {
@@ -880,7 +892,11 @@ describe('Other conditions', function() {
880892
var count = 0;
881893
stream.on('data', function(data) {
882894
if (data.error) {
883-
var err = new Error('Requested error');
895+
var message = 'Requested error';
896+
if (data.message) {
897+
message = data.message;
898+
}
899+
var err = new Error(message);
884900
err.metadata = trailer_metadata.clone();
885901
err.metadata.add('count', '' + count);
886902
stream.emit('error', err);
@@ -1127,6 +1143,14 @@ describe('Other conditions', function() {
11271143
done();
11281144
});
11291145
});
1146+
it('for a UTF-8 error message', function(done) {
1147+
client.unary({error: true, message: '測試字符串'}, function(err, data) {
1148+
assert(err);
1149+
assert.strictEqual(err.code, grpc.status.UNKNOWN);
1150+
assert.strictEqual(err.details, '測試字符串');
1151+
done();
1152+
});
1153+
});
11301154
});
11311155
describe('call.getPeer should return the peer', function() {
11321156
it('for a unary call', function(done) {

packages/grpc-native-core/test/test_service.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ syntax = "proto3";
1616

1717
message Request {
1818
bool error = 1;
19+
string message = 2;
1920
}
2021

2122
message Response {

test/interop/interop_client.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -347,21 +347,21 @@ function statusCodeAndMessage(client, done) {
347347
var arg = {
348348
response_status: {
349349
code: 2,
350-
message: 'test status message'
350+
message: 'test status message - 測試字符串'
351351
}
352352
};
353353
client.unaryCall(arg, function(err, resp) {
354354
assert(err);
355355
assert.strictEqual(err.code, 2);
356-
assert.strictEqual(err.details, 'test status message');
356+
assert.strictEqual(err.details, 'test status message - 測試字符串');
357357
done();
358358
});
359359
var duplex = client.fullDuplexCall();
360360
duplex.on('data', function() {});
361361
duplex.on('status', function(status) {
362362
assert(status);
363363
assert.strictEqual(status.code, 2);
364-
assert.strictEqual(status.details, 'test status message');
364+
assert.strictEqual(status.details, 'test status message - 測試字符串');
365365
done();
366366
});
367367
duplex.on('error', function(){});

0 commit comments

Comments
 (0)