From eb21bdd1701cc769145d7bac63b1136f313218a1 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 26 Mar 2015 15:19:54 -0700 Subject: [PATCH] Finished adding trailing metadata tests --- src/node/test/surface_test.js | 56 +++++++++++++++++++++++++++++--- src/node/test/test_service.proto | 52 +++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 src/node/test/test_service.proto diff --git a/src/node/test/surface_test.js b/src/node/test/surface_test.js index 61bce56e74e..d6e480521b8 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 00000000000..9ba3a686f26 --- /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