diff options
author | murgatroid99 <mlumish@google.com> | 2015-03-26 15:19:54 -0700 |
---|---|---|
committer | murgatroid99 <mlumish@google.com> | 2015-03-26 15:19:54 -0700 |
commit | eb21bdd1701cc769145d7bac63b1136f313218a1 (patch) | |
tree | 22e78ba6cabbdb5aa5160d694adc632003eec502 | |
parent | 35fb03820c404703060ded9ed4d9dd7540c9fb5f (diff) |
Finished adding trailing metadata tests
-rw-r--r-- | src/node/test/surface_test.js | 56 | ||||
-rw-r--r-- | src/node/test/test_service.proto | 52 |
2 files changed, 103 insertions, 5 deletions
diff --git a/src/node/test/surface_test.js b/src/node/test/surface_test.js index 61bce56e74..d6e480521b 100644 --- a/src/node/test/surface_test.js +++ b/src/node/test/surface_test.js @@ -126,7 +126,7 @@ describe('Generic client and server', function() { }); }); }); -describe.only('Trailing metadata', function() { +describe('Trailing metadata', function() { var client; var server; before(function() { @@ -145,15 +145,19 @@ describe.only('Trailing metadata', function() { }, clientStream: function(stream, cb){ var count = 0; + var errored; stream.on('data', function(data) { if (data.error) { + errored = true; cb(new Error('Requested error'), null, {metadata: ['yes']}); } else { count += 1; } }); stream.on('end', function() { - cb(null, {count: count}, {metadata: ['yes']}); + if (!errored) { + cb(null, {count: count}, {metadata: ['yes']}); + } }); }, serverStream: function(stream) { @@ -161,7 +165,7 @@ describe.only('Trailing metadata', function() { if (req.error) { var err = new Error('Requested error'); err.metadata = {metadata: ['yes']}; - stream.emit(err); + stream.emit('error', err); } else { for (var i = 0; i < 5; i++) { stream.write({count: i}); @@ -175,8 +179,8 @@ describe.only('Trailing metadata', function() { if (data.error) { var err = new Error('Requested error'); err.metadata = { - metadata: 'yes', - count: '' + count + metadata: ['yes'], + count: ['' + count] }; stream.emit('error', err); } else { @@ -240,6 +244,48 @@ describe.only('Trailing metadata', function() { done(); }); }); + it('when a server stream call succeeds', function(done) { + var call = client.serverStream({error: false}); + call.on('data', function(){}); + call.on('status', function(status) { + assert.strictEqual(status.code, grpc.status.OK); + assert.deepEqual(status.metadata.metadata, ['yes']); + done(); + }); + }); + it('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']); + done(); + }); + }); + it('when a bidi stream succeeds', function(done) { + var call = client.bidiStream(); + call.write({error: false}); + call.write({error: false}); + call.end(); + call.on('data', function(){}); + call.on('status', function(status) { + assert.strictEqual(status.code, grpc.status.OK); + assert.deepEqual(status.metadata.metadata, ['yes']); + done(); + }); + }); + it('when a bidi stream fails', function(done) { + var call = client.bidiStream(); + call.write({error: false}); + 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']); + done(); + }); + }); }); describe('Cancelling surface client', function() { var client; diff --git a/src/node/test/test_service.proto b/src/node/test/test_service.proto new file mode 100644 index 0000000000..9ba3a686f2 --- /dev/null +++ b/src/node/test/test_service.proto @@ -0,0 +1,52 @@ +// Copyright 2015, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +message Request { + optional bool error = 1; +} + +message Response { + optional int32 count = 1; +} + +service TestService { + rpc Unary (Request) returns (Response) { + } + + rpc ClientStream (stream Request) returns (Response) { + } + + rpc ServerStream (Request) returns (stream Response) { + } + + rpc BidiStream (stream Request) returns (stream Response) { + } +}
\ No newline at end of file |