From 1ce0143220b82186696f221df041e91821d38c52 Mon Sep 17 00:00:00 2001 From: Michael Lumish Date: Fri, 11 Oct 2024 15:20:30 -0700 Subject: [PATCH] Add support for testing with alternate credentials --- packages/grpc-js-xds/src/index.ts | 1 + packages/grpc-js-xds/test/backend.ts | 11 +++++------ packages/grpc-js-xds/test/client.ts | 10 +++++----- packages/grpc-js-xds/test/test-core.ts | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/grpc-js-xds/src/index.ts b/packages/grpc-js-xds/src/index.ts index 01563b7e..73546443 100644 --- a/packages/grpc-js-xds/src/index.ts +++ b/packages/grpc-js-xds/src/index.ts @@ -32,6 +32,7 @@ import * as typed_struct_lb from './lb-policy-registry/typed-struct'; import * as pick_first_lb from './lb-policy-registry/pick-first'; export { XdsServer } from './server'; +export { XdsServerCredentials } from './xds-credentials'; /** * Register the "xds:" name scheme with the @grpc/grpc-js library. diff --git a/packages/grpc-js-xds/test/backend.ts b/packages/grpc-js-xds/test/backend.ts index 3fadc5a7..353385fb 100644 --- a/packages/grpc-js-xds/test/backend.ts +++ b/packages/grpc-js-xds/test/backend.ts @@ -50,7 +50,7 @@ export class Backend { private server: Server | null = null; private receivedCallCount = 0; private callListeners: (() => void)[] = []; - constructor(private port: number, private useXdsServer: boolean, private serverOptions?: ServerOptions) { + constructor(private port: number, private useXdsServer: boolean, private creds?: ServerCredentials | undefined, private serverOptions?: ServerOptions) { } Echo(call: ServerUnaryCall, callback: sendUnaryData) { // call.request.params is currently ignored @@ -90,9 +90,8 @@ export class Backend { } const server = this.server; server.addService(loadedProtos.grpc.testing.EchoTestService.service, this as unknown as UntypedServiceImplementation); - const insecureCredentials = ServerCredentials.createInsecure(); - const xdsCredentials = new XdsServerCredentials(insecureCredentials); - server.bindAsync(`[::1]:${this.port}`, xdsCredentials, (error, port) => { + const credentials = this.creds ?? ServerCredentials.createInsecure(); + server.bindAsync(`[::1]:${this.port}`, credentials, (error, port) => { if (!error) { this.port = port; } @@ -148,7 +147,7 @@ export class Backend { } } -export async function createBackends(count: number, useXdsServer?: boolean, serverOptions?: ServerOptions): Promise { +export async function createBackends(count: number, useXdsServer?: boolean, creds?: ServerCredentials | undefined, serverOptions?: ServerOptions): Promise { const ports = await findFreePorts(count); - return ports.map(port => new Backend(port, useXdsServer ?? true, serverOptions)); + return ports.map(port => new Backend(port, useXdsServer ?? true, creds, serverOptions)); } diff --git a/packages/grpc-js-xds/test/client.ts b/packages/grpc-js-xds/test/client.ts index a09056c9..731ef054 100644 --- a/packages/grpc-js-xds/test/client.ts +++ b/packages/grpc-js-xds/test/client.ts @@ -15,7 +15,7 @@ * */ -import { ChannelOptions, credentials, loadPackageDefinition, ServiceError } from "@grpc/grpc-js"; +import { ChannelCredentials, ChannelOptions, credentials, loadPackageDefinition, ServiceError } from "@grpc/grpc-js"; import { loadSync } from "@grpc/proto-loader"; import { ProtoGrpcType } from "./generated/echo"; import { EchoTestServiceClient } from "./generated/grpc/testing/EchoTestService"; @@ -44,14 +44,14 @@ export class XdsTestClient { private client: EchoTestServiceClient; private callInterval: NodeJS.Timer; - constructor(target: string, bootstrapInfo: string, options?: ChannelOptions) { - this.client = new loadedProtos.grpc.testing.EchoTestService(target, credentials.createInsecure(), {...options, [BOOTSTRAP_CONFIG_KEY]: bootstrapInfo}); + constructor(target: string, bootstrapInfo: string, creds?: ChannelCredentials | undefined, options?: ChannelOptions) { + this.client = new loadedProtos.grpc.testing.EchoTestService(target, creds ?? credentials.createInsecure(), {...options, [BOOTSTRAP_CONFIG_KEY]: bootstrapInfo}); this.callInterval = setInterval(() => {}, 0); clearInterval(this.callInterval); } - static createFromServer(targetName: string, xdsServer: ControlPlaneServer, options?: ChannelOptions) { - return new XdsTestClient(`xds:///${targetName}`, xdsServer.getBootstrapInfoString(), options); + static createFromServer(targetName: string, xdsServer: ControlPlaneServer, creds?: ChannelCredentials | undefined, options?: ChannelOptions) { + return new XdsTestClient(`xds:///${targetName}`, xdsServer.getBootstrapInfoString(), creds, options); } startCalls(interval: number) { diff --git a/packages/grpc-js-xds/test/test-core.ts b/packages/grpc-js-xds/test/test-core.ts index 37337032..45a96d68 100644 --- a/packages/grpc-js-xds/test/test-core.ts +++ b/packages/grpc-js-xds/test/test-core.ts @@ -84,7 +84,7 @@ describe('core xDS functionality', () => { const serverRoute = new FakeServerRoute(backend.getPort(), 'serverRoute'); xdsServer.setRdsResource(serverRoute.getRouteConfiguration()); xdsServer.setLdsResource(serverRoute.getListener()); - client = XdsTestClient.createFromServer('listener1', xdsServer, { + client = XdsTestClient.createFromServer('listener1', xdsServer, undefined, { 'grpc.client_idle_timeout_ms': 1000, }); client.sendOneCall(error => { @@ -102,7 +102,7 @@ describe('core xDS functionality', () => { }); it('should handle connections aging out', function(done) { this.timeout(5000); - createBackends(1, true, {'grpc.max_connection_age_ms': 1000}).then(([backend]) => { + createBackends(1, true, undefined, {'grpc.max_connection_age_ms': 1000}).then(([backend]) => { const serverRoute = new FakeServerRoute(backend.getPort(), 'serverRoute'); xdsServer.setRdsResource(serverRoute.getRouteConfiguration()); xdsServer.setLdsResource(serverRoute.getListener());