From 8b96e36a744db87131c35f87e7ac6f87c81db8b0 Mon Sep 17 00:00:00 2001 From: Richard Willis Date: Sat, 18 Apr 2020 09:19:45 +0100 Subject: [PATCH] grpc-js: Add test for client.waitForReady. Refs #1352 --- packages/grpc-js/test/test-client.ts | 81 ++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 packages/grpc-js/test/test-client.ts diff --git a/packages/grpc-js/test/test-client.ts b/packages/grpc-js/test/test-client.ts new file mode 100644 index 000000000..84f94cf68 --- /dev/null +++ b/packages/grpc-js/test/test-client.ts @@ -0,0 +1,81 @@ +/* + * Copyright 2019 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// Allow `any` data type for testing runtime type checking. +// tslint:disable no-any +import * as assert from 'assert'; +import * as path from 'path'; + +import * as grpc from '../src'; +import { Server, ServerCredentials } from '../src'; +import { ServiceClient, ServiceClientConstructor } from '../src/make-client'; +import { sendUnaryData, ServerUnaryCall } from '../src/server-call'; + +import { loadProtoFile } from './common'; +import { ConnectivityState } from '../src/channel'; + +const clientInsecureCreds = grpc.credentials.createInsecure(); +const serverInsecureCreds = ServerCredentials.createInsecure(); + +describe('Client', () => { + let server: Server; + let client: ServiceClient; + + before(done => { + const protoFile = path.join(__dirname, 'fixtures', 'echo_service.proto'); + const echoService = loadProtoFile(protoFile) + .EchoService as ServiceClientConstructor; + + server = new Server(); + + server.bindAsync( + 'localhost:0', + serverInsecureCreds, + (err, port) => { + assert.ifError(err); + client = new echoService( + `localhost:${port}`, + clientInsecureCreds + ); + server.start(); + done(); + } + ); + }); + + after(done => { + client.close(); + server.tryShutdown(done); + }); + + it.only('should call the waitForReady callback only once when channel connectivity state is READY', done => { + const deadline = Date.now() + 100; + let calledTimes = 0; + client.waitForReady(deadline, err => { + assert.ifError(err); + assert.equal( + client.getChannel().getConnectivityState(true), + ConnectivityState.READY + ); + calledTimes += 1; + }); + setTimeout(() => { + assert.equal(calledTimes, 1); + done(); + }, deadline - Date.now()); + }); +});