From 8bb7fa7e531e5e0ec700d426c1a87e0f47313339 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 14 May 2015 10:04:48 -0700 Subject: [PATCH 1/3] Fixed client auth implementation and tests --- interop/interop_client.js | 2 +- src/client.js | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/interop/interop_client.js b/interop/interop_client.js index 8059c1a0..40284316 100644 --- a/interop/interop_client.js +++ b/interop/interop_client.js @@ -271,7 +271,7 @@ function cancelAfterFirstResponse(client, done) { * @param {function} done Callback to call when the test is completed. Included * primarily for use with mocha */ -function authTest(expected_user, client, scope, done) { +function authTest(expected_user, scope, client, done) { (new GoogleAuth()).getApplicationDefault(function(err, credential) { assert.ifError(err); if (credential.createScopedRequired() && scope) { diff --git a/src/client.js b/src/client.js index 707a2d99..46d476b9 100644 --- a/src/client.js +++ b/src/client.js @@ -223,7 +223,7 @@ function makeUnaryRequestFunction(method, serialize, deserialize) { emitter.cancel = function cancel() { call.cancel(); }; - this.updateMetadata(metadata, function(error, metadata) { + this.updateMetadata(this.auth_uri, metadata, function(error, metadata) { if (error) { call.cancel(); callback(error); @@ -289,7 +289,7 @@ function makeClientStreamRequestFunction(method, serialize, deserialize) { metadata = {}; } var stream = new ClientWritableStream(call, serialize); - this.updateMetadata(metadata, function(error, metadata) { + this.updateMetadata(this.auth_uri, metadata, function(error, metadata) { if (error) { call.cancel(); callback(error); @@ -360,7 +360,7 @@ function makeServerStreamRequestFunction(method, serialize, deserialize) { metadata = {}; } var stream = new ClientReadableStream(call, deserialize); - this.updateMetadata(metadata, function(error, metadata) { + this.updateMetadata(this.auth_uri, metadata, function(error, metadata) { if (error) { call.cancel(); stream.emit('error', error); @@ -427,7 +427,7 @@ function makeBidiStreamRequestFunction(method, serialize, deserialize) { metadata = {}; } var stream = new ClientDuplexStream(call, serialize, deserialize); - this.updateMetadata(metadata, function(error, metadata) { + this.updateMetadata(this.auth_uri, metadata, function(error, metadata) { if (error) { call.cancel(); stream.emit('error', error); @@ -503,10 +503,11 @@ function makeClientConstructor(methods, serviceName) { callback(null, metadata); }; } + this.server_address = address.replace(/\/$/, ''); this.channel = new grpc.Channel(address, options); - this.updateMetadata = _.partial(updateMetadata, - this.server_address + '/' + serviceName); + this.auth_uri = this.server_address + '/' + serviceName; + this.updateMetadata = updateMetadata; } _.each(methods, function(attrs, name) { From 58bc7eefa7ff203d358591cc150aa28f6f3fc387 Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 14 May 2015 15:23:16 -0700 Subject: [PATCH 2/3] Added Node interop test for timeout_on_sleeping_server --- interop/interop_client.js | 15 +++++++++++++++ test/interop_sanity_test.js | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/interop/interop_client.js b/interop/interop_client.js index 8059c1a0..2839c441 100644 --- a/interop/interop_client.js +++ b/interop/interop_client.js @@ -263,6 +263,20 @@ function cancelAfterFirstResponse(client, done) { }); } +function timeoutOnSleepingServer(client, done) { + var deadline = new Date(); + deadline.setMilliseconds(deadline.getMilliseconds() + 1); + var call = client.fullDuplexCall(null, deadline); + call.write({ + response_type: 'COMPRESSABLE', + payload: {body: zeroBuffer(27182)} + }); + call.on('error', function(error) { + assert.strictEqual(error.code, grpc.status.DEADLINE_EXCEEDED); + done(); + }); +} + /** * Run one of the authentication tests. * @param {string} expected_user The expected username in the response @@ -315,6 +329,7 @@ var test_cases = { empty_stream: emptyStream, cancel_after_begin: cancelAfterBegin, cancel_after_first_response: cancelAfterFirstResponse, + timeout_on_sleeping_server: timeoutOnSleepingServer, compute_engine_creds: _.partial(authTest, COMPUTE_ENGINE_USER, null), service_account_creds: _.partial(authTest, AUTH_USER, AUTH_SCOPE), jwt_token_creds: _.partial(authTest, AUTH_USER, null) diff --git a/test/interop_sanity_test.js b/test/interop_sanity_test.js index 6b3aa3dd..fcd8eb64 100644 --- a/test/interop_sanity_test.js +++ b/test/interop_sanity_test.js @@ -86,4 +86,8 @@ describe('Interop tests', function() { interop_client.runTest(port, name_override, 'cancel_after_first_response', true, true, done); }); + it('should pass timeout_on_sleeping_server', function(done) { + interop_client.runTest(port, name_override, 'timeout_on_sleeping_server', + true, true, done); + }); }); From ed190c015b7c8ee1ad3e6ecd37a0ad91e57dc45a Mon Sep 17 00:00:00 2001 From: murgatroid99 Date: Thu, 14 May 2015 15:49:30 -0700 Subject: [PATCH 3/3] Removed response type --- interop/interop_client.js | 1 - 1 file changed, 1 deletion(-) diff --git a/interop/interop_client.js b/interop/interop_client.js index 2839c441..551e39a1 100644 --- a/interop/interop_client.js +++ b/interop/interop_client.js @@ -268,7 +268,6 @@ function timeoutOnSleepingServer(client, done) { deadline.setMilliseconds(deadline.getMilliseconds() + 1); var call = client.fullDuplexCall(null, deadline); call.write({ - response_type: 'COMPRESSABLE', payload: {body: zeroBuffer(27182)} }); call.on('error', function(error) {