diff --git a/packages/grpc-js/src/metadata.ts b/packages/grpc-js/src/metadata.ts index 4b41aa25..630fb99a 100644 --- a/packages/grpc-js/src/metadata.ts +++ b/packages/grpc-js/src/metadata.ts @@ -174,7 +174,7 @@ export class Metadata { * @return The newly cloned object. */ clone(): Metadata { - const newMetadata = new Metadata(); + const newMetadata = new Metadata(this.options); const newInternalRepr = newMetadata.internalRepr; this.internalRepr.forEach((value, key) => { diff --git a/test/api/connectivity_test.js b/test/api/connectivity_test.js index 042c136b..b5d31943 100644 --- a/test/api/connectivity_test.js +++ b/test/api/connectivity_test.js @@ -59,6 +59,29 @@ const serviceImpl = { }; describe(`${anyGrpc.clientName} client -> ${anyGrpc.serverName} server`, function() { + it('client should not wait for ready by default', function(done) { + this.timeout(15000); + const disconnectedClient = new TestServiceClient('foo.test.google.com:50051', clientGrpc.credentials.createInsecure()); + const deadline = new Date(); + deadline.setSeconds(deadline.getSeconds() + 10); + disconnectedClient.unary({}, {deadline: deadline}, (error, value) =>{ + assert(error); + assert.strictEqual(error.code, clientGrpc.status.UNAVAILABLE); + done(); + }); + }); + it('client should wait for a connection with waitForReady on', function(done) { + this.timeout(15000); + const disconnectedClient = new TestServiceClient('foo.test.google.com:50051', clientGrpc.credentials.createInsecure()); + const metadata = new clientGrpc.Metadata({waitForReady: true}); + const deadline = new Date(); + deadline.setSeconds(deadline.getSeconds() + 10); + disconnectedClient.unary({}, metadata, {deadline: deadline}, (error, value) =>{ + assert(error); + assert.strictEqual(error.code, clientGrpc.status.DEADLINE_EXCEEDED); + done(); + }); + }); describe('Reconnection', function() { let server1; let server2;