aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar murgatroid99 <mlumish@google.com>2015-05-06 16:46:19 -0700
committerGravatar murgatroid99 <mlumish@google.com>2015-05-06 16:46:19 -0700
commit65b784e230e93a4335a8e8708cc2ae8cd5583de1 (patch)
treed0eac3dbf776fb370ea598bec1cd0c05574fec32 /src
parent7305dc69e69fbd808f932a8b11c433bdcbe8a79d (diff)
Added error events on client streams when the server is streaming
Diffstat (limited to 'src')
-rw-r--r--src/node/interop/interop_client.js4
-rw-r--r--src/node/src/client.js16
-rw-r--r--src/node/test/math_client_test.js3
-rw-r--r--src/node/test/surface_test.js18
4 files changed, 27 insertions, 14 deletions
diff --git a/src/node/interop/interop_client.js b/src/node/interop/interop_client.js
index 3341486b9e..02f341113d 100644
--- a/src/node/interop/interop_client.js
+++ b/src/node/interop/interop_client.js
@@ -260,8 +260,8 @@ function cancelAfterFirstResponse(client, done) {
call.on('data', function(data) {
call.cancel();
});
- call.on('status', function(status) {
- assert.strictEqual(status.code, grpc.status.CANCELLED);
+ call.on('error', function(error) {
+ assert.strictEqual(error.code, grpc.status.CANCELLED);
done();
});
}
diff --git a/src/node/src/client.js b/src/node/src/client.js
index fad369c2f8..cd59a0673a 100644
--- a/src/node/src/client.js
+++ b/src/node/src/client.js
@@ -245,6 +245,7 @@ function makeUnaryRequestFunction(method, serialize, deserialize) {
if (response.status.code !== grpc.status.OK) {
var error = new Error(response.status.details);
error.code = response.status.code;
+ error.metadata = response.status.metadata;
callback(error);
return;
}
@@ -316,6 +317,7 @@ function makeClientStreamRequestFunction(method, serialize, deserialize) {
if (response.status.code !== grpc.status.OK) {
var error = new Error(response.status.details);
error.code = response.status.code;
+ error.metadata = response.status.metadata;
callback(error);
return;
}
@@ -382,6 +384,13 @@ function makeServerStreamRequestFunction(method, serialize, deserialize) {
throw err;
}
stream.emit('status', response.status);
+ if (response.status.code !== grpc.status.OK) {
+ var error = new Error(response.status.details);
+ error.code = response.status.code;
+ error.metadata = response.status.metadata;
+ stream.emit('error', error);
+ return;
+ }
});
});
return stream;
@@ -440,6 +449,13 @@ function makeBidiStreamRequestFunction(method, serialize, deserialize) {
throw err;
}
stream.emit('status', response.status);
+ if (response.status.code !== grpc.status.OK) {
+ var error = new Error(response.status.details);
+ error.code = response.status.code;
+ error.metadata = response.status.metadata;
+ stream.emit('error', error);
+ return;
+ }
});
});
return stream;
diff --git a/src/node/test/math_client_test.js b/src/node/test/math_client_test.js
index 79df97871b..3461922e66 100644
--- a/src/node/test/math_client_test.js
+++ b/src/node/test/math_client_test.js
@@ -130,8 +130,7 @@ describe('Math client', function() {
});
call.write({dividend: 7, divisor: 0});
call.end();
- call.on('status', function checkStatus(status) {
- assert.notEqual(status.code, grpc.status.OK);
+ call.on('error', function checkStatus(status) {
done();
});
});
diff --git a/src/node/test/surface_test.js b/src/node/test/surface_test.js
index 6f63f1044f..38f9028bff 100644
--- a/src/node/test/surface_test.js
+++ b/src/node/test/surface_test.js
@@ -278,9 +278,8 @@ describe('Trailing metadata', function() {
it('should be present when a server stream call fails', function(done) {
var call = client.serverStream({error: true});
call.on('data', function(){});
- call.on('status', function(status) {
- assert.notStrictEqual(status.code, grpc.status.OK);
- assert.deepEqual(status.metadata.metadata, ['yes']);
+ call.on('error', function(error) {
+ assert.deepEqual(error.metadata.metadata, ['yes']);
done();
});
});
@@ -302,9 +301,8 @@ describe('Trailing metadata', function() {
call.write({error: true});
call.end();
call.on('data', function(){});
- call.on('status', function(status) {
- assert.notStrictEqual(status.code, grpc.status.OK);
- assert.deepEqual(status.metadata.metadata, ['yes']);
+ call.on('error', function(error) {
+ assert.deepEqual(error.metadata.metadata, ['yes']);
done();
});
});
@@ -345,16 +343,16 @@ describe('Cancelling surface client', function() {
});
it('Should correctly cancel a server stream call', function(done) {
var call = client.fib({'limit': 5});
- call.on('status', function(status) {
- assert.strictEqual(status.code, surface_client.status.CANCELLED);
+ call.on('error', function(error) {
+ assert.strictEqual(error.code, surface_client.status.CANCELLED);
done();
});
call.cancel();
});
it('Should correctly cancel a bidi stream call', function(done) {
var call = client.divMany();
- call.on('status', function(status) {
- assert.strictEqual(status.code, surface_client.status.CANCELLED);
+ call.on('error', function(error) {
+ assert.strictEqual(error.code, surface_client.status.CANCELLED);
done();
});
call.cancel();