diff --git a/src/v1/cloud_build_client.ts b/src/v1/cloud_build_client.ts index b160b0f..d49f075 100644 --- a/src/v1/cloud_build_client.ts +++ b/src/v1/cloud_build_client.ts @@ -51,9 +51,14 @@ export class CloudBuildClient { private _descriptors: Descriptors = {page: {}, stream: {}, longrunning: {}}; private _innerApiCalls: {[name: string]: Function}; private _terminated = false; + private _opts: ClientOptions; + private _gaxModule: typeof gax | typeof gax.fallback; + private _gaxGrpc: gax.GrpcClient | gax.fallback.GrpcClient; + private _protos: {}; + private _defaults: {[method: string]: gax.CallSettings}; auth: gax.GoogleAuth; operationsClient: gax.OperationsClient; - cloudBuildStub: Promise<{[name: string]: Function}>; + cloudBuildStub?: Promise<{[name: string]: Function}>; /** * Construct an instance of CloudBuildClient. @@ -77,8 +82,6 @@ export class CloudBuildClient { * app is running in an environment which supports * {@link https://developers.google.com/identity/protocols/application-default-credentials Application Default Credentials}, * your project ID will be detected automatically. - * @param {function} [options.promise] - Custom promise module to use instead - * of native Promises. * @param {string} [options.apiEndpoint] - The domain name of the * API remote host. */ @@ -108,25 +111,28 @@ export class CloudBuildClient { // If we are in browser, we are already using fallback because of the // "browser" field in package.json. // But if we were explicitly requested to use fallback, let's do it now. - const gaxModule = !isBrowser && opts.fallback ? gax.fallback : gax; + this._gaxModule = !isBrowser && opts.fallback ? gax.fallback : gax; // Create a `gaxGrpc` object, with any grpc-specific options // sent to the client. opts.scopes = (this.constructor as typeof CloudBuildClient).scopes; - const gaxGrpc = new gaxModule.GrpcClient(opts); + this._gaxGrpc = new this._gaxModule.GrpcClient(opts); + + // Save options to use in initialize() method. + this._opts = opts; // Save the auth object to the client, for use by other methods. - this.auth = gaxGrpc.auth as gax.GoogleAuth; + this.auth = this._gaxGrpc.auth as gax.GoogleAuth; // Determine the client header string. - const clientHeader = [`gax/${gaxModule.version}`, `gapic/${version}`]; + const clientHeader = [`gax/${this._gaxModule.version}`, `gapic/${version}`]; if (typeof process !== 'undefined' && 'versions' in process) { clientHeader.push(`gl-node/${process.versions.node}`); } else { - clientHeader.push(`gl-web/${gaxModule.version}`); + clientHeader.push(`gl-web/${this._gaxModule.version}`); } if (!opts.fallback) { - clientHeader.push(`grpc/${gaxGrpc.grpcVersion}`); + clientHeader.push(`grpc/${this._gaxGrpc.grpcVersion}`); } if (opts.libName && opts.libVersion) { clientHeader.push(`${opts.libName}/${opts.libVersion}`); @@ -142,7 +148,7 @@ export class CloudBuildClient { 'protos', 'protos.json' ); - const protos = gaxGrpc.loadProto( + this._protos = this._gaxGrpc.loadProto( opts.fallback ? require('../../protos/protos.json') : nodejsProtoPath ); @@ -150,12 +156,12 @@ export class CloudBuildClient { // (e.g. 50 results at a time, with tokens to get subsequent // pages). Denote the keys used for pagination and results. this._descriptors.page = { - listBuilds: new gaxModule.PageDescriptor( + listBuilds: new this._gaxModule.PageDescriptor( 'pageToken', 'nextPageToken', 'builds' ), - listBuildTriggers: new gaxModule.PageDescriptor( + listBuildTriggers: new this._gaxModule.PageDescriptor( 'pageToken', 'nextPageToken', 'triggers' @@ -166,13 +172,15 @@ export class CloudBuildClient { // an Operation object that allows for tracking of the operation, // rather than holding a request open. const protoFilesRoot = opts.fallback - ? gaxModule.protobuf.Root.fromJSON(require('../../protos/protos.json')) - : gaxModule.protobuf.loadSync(nodejsProtoPath); + ? this._gaxModule.protobuf.Root.fromJSON( + require('../../protos/protos.json') + ) + : this._gaxModule.protobuf.loadSync(nodejsProtoPath); - this.operationsClient = gaxModule + this.operationsClient = this._gaxModule .lro({ auth: this.auth, - grpc: 'grpc' in gaxGrpc ? gaxGrpc.grpc : undefined, + grpc: 'grpc' in this._gaxGrpc ? this._gaxGrpc.grpc : undefined, }) .operationsClient(opts); const createBuildResponse = protoFilesRoot.lookup( @@ -195,17 +203,17 @@ export class CloudBuildClient { ) as gax.protobuf.Type; this._descriptors.longrunning = { - createBuild: new gaxModule.LongrunningDescriptor( + createBuild: new this._gaxModule.LongrunningDescriptor( this.operationsClient, createBuildResponse.decode.bind(createBuildResponse), createBuildMetadata.decode.bind(createBuildMetadata) ), - retryBuild: new gaxModule.LongrunningDescriptor( + retryBuild: new this._gaxModule.LongrunningDescriptor( this.operationsClient, retryBuildResponse.decode.bind(retryBuildResponse), retryBuildMetadata.decode.bind(retryBuildMetadata) ), - runBuildTrigger: new gaxModule.LongrunningDescriptor( + runBuildTrigger: new this._gaxModule.LongrunningDescriptor( this.operationsClient, runBuildTriggerResponse.decode.bind(runBuildTriggerResponse), runBuildTriggerMetadata.decode.bind(runBuildTriggerMetadata) @@ -213,7 +221,7 @@ export class CloudBuildClient { }; // Put together the default options sent with requests. - const defaults = gaxGrpc.constructSettings( + this._defaults = this._gaxGrpc.constructSettings( 'google.devtools.cloudbuild.v1.CloudBuild', gapicConfig as gax.ClientConfig, opts.clientConfig || {}, @@ -224,17 +232,35 @@ export class CloudBuildClient { // of calling the API is handled in `google-gax`, with this code // merely providing the destination and request information. this._innerApiCalls = {}; + } + + /** + * Initialize the client. + * Performs asynchronous operations (such as authentication) and prepares the client. + * This function will be called automatically when any class method is called for the + * first time, but if you need to initialize it before calling an actual method, + * feel free to call initialize() directly. + * + * You can await on this method if you want to make sure the client is initialized. + * + * @returns {Promise} A promise that resolves to an authenticated service stub. + */ + initialize() { + // If the client stub promise is already initialized, return immediately. + if (this.cloudBuildStub) { + return this.cloudBuildStub; + } // Put together the "service stub" for // google.devtools.cloudbuild.v1.CloudBuild. - this.cloudBuildStub = gaxGrpc.createStub( - opts.fallback - ? (protos as protobuf.Root).lookupService( + this.cloudBuildStub = this._gaxGrpc.createStub( + this._opts.fallback + ? (this._protos as protobuf.Root).lookupService( 'google.devtools.cloudbuild.v1.CloudBuild' ) : // tslint:disable-next-line no-any - (protos as any).google.devtools.cloudbuild.v1.CloudBuild, - opts + (this._protos as any).google.devtools.cloudbuild.v1.CloudBuild, + this._opts ) as Promise<{[method: string]: Function}>; // Iterate over each of the methods that the service provides @@ -271,9 +297,9 @@ export class CloudBuildClient { } ); - const apiCall = gaxModule.createApiCall( + const apiCall = this._gaxModule.createApiCall( innerCallPromise, - defaults[methodName], + this._defaults[methodName], this._descriptors.page[methodName] || this._descriptors.stream[methodName] || this._descriptors.longrunning[methodName] @@ -287,6 +313,8 @@ export class CloudBuildClient { return apiCall(argument, callOptions, callback); }; } + + return this.cloudBuildStub; } /** @@ -407,6 +435,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.getBuild(request, options, callback); } cancelBuild( @@ -474,6 +503,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.cancelBuild(request, options, callback); } createBuildTrigger( @@ -551,6 +581,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.createBuildTrigger(request, options, callback); } getBuildTrigger( @@ -628,6 +659,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.getBuildTrigger(request, options, callback); } deleteBuildTrigger( @@ -705,6 +737,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.deleteBuildTrigger(request, options, callback); } updateBuildTrigger( @@ -784,6 +817,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.updateBuildTrigger(request, options, callback); } createWorkerPool( @@ -861,6 +895,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.createWorkerPool(request, options, callback); } getWorkerPool( @@ -937,6 +972,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.getWorkerPool(request, options, callback); } deleteWorkerPool( @@ -1013,6 +1049,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.deleteWorkerPool(request, options, callback); } updateWorkerPool( @@ -1091,6 +1128,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.updateWorkerPool(request, options, callback); } listWorkerPools( @@ -1166,6 +1204,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.listWorkerPools(request, options, callback); } @@ -1252,6 +1291,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.createBuild(request, options, callback); } retryBuild( @@ -1359,6 +1399,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.retryBuild(request, options, callback); } runBuildTrigger( @@ -1442,6 +1483,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.runBuildTrigger(request, options, callback); } listBuilds( @@ -1527,6 +1569,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.listBuilds(request, options, callback); } @@ -1565,6 +1608,7 @@ export class CloudBuildClient { request = request || {}; options = options || {}; const callSettings = new gax.CallSettings(options); + this.initialize(); return this._descriptors.page.listBuilds.createStream( this._innerApiCalls.listBuilds as gax.GaxCall, request, @@ -1651,6 +1695,7 @@ export class CloudBuildClient { options = optionsOrCallback as gax.CallOptions; } options = options || {}; + this.initialize(); return this._innerApiCalls.listBuildTriggers(request, options, callback); } @@ -1687,6 +1732,7 @@ export class CloudBuildClient { request = request || {}; options = options || {}; const callSettings = new gax.CallSettings(options); + this.initialize(); return this._descriptors.page.listBuildTriggers.createStream( this._innerApiCalls.listBuildTriggers as gax.GaxCall, request, @@ -1700,8 +1746,9 @@ export class CloudBuildClient { * The client will no longer be usable and all future behavior is undefined. */ close(): Promise { + this.initialize(); if (!this._terminated) { - return this.cloudBuildStub.then(stub => { + return this.cloudBuildStub!.then(stub => { this._terminated = true; stub.close(); }); diff --git a/synth.metadata b/synth.metadata index 87b89ec..59f89b3 100644 --- a/synth.metadata +++ b/synth.metadata @@ -1,12 +1,13 @@ { - "updateTime": "2020-02-29T19:14:13.934361Z", + "updateTime": "2020-03-05T23:03:38.966192Z", "sources": [ { "git": { "name": "googleapis", "remote": "https://github.com/googleapis/googleapis.git", - "sha": "83c6f84035ee0f80eaa44d8b688a010461cc4080", - "internalRef": "297918498" + "sha": "f0b581b5bdf803e45201ecdb3688b60e381628a8", + "internalRef": "299181282", + "log": "f0b581b5bdf803e45201ecdb3688b60e381628a8\nfix: recommendationengine/v1beta1 update some comments\n\nPiperOrigin-RevId: 299181282\n\n10e9a0a833dc85ff8f05b2c67ebe5ac785fe04ff\nbuild: add generated BUILD file for Routes Preferred API\n\nPiperOrigin-RevId: 299164808\n\n86738c956a8238d7c77f729be78b0ed887a6c913\npublish v1p1beta1: update with absolute address in comments\n\nPiperOrigin-RevId: 299152383\n\n73d9f2ad4591de45c2e1f352bc99d70cbd2a6d95\npublish v1: update with absolute address in comments\n\nPiperOrigin-RevId: 299147194\n\nd2158f24cb77b0b0ccfe68af784c6a628705e3c6\npublish v1beta2: update with absolute address in comments\n\nPiperOrigin-RevId: 299147086\n\n7fca61292c11b4cd5b352cee1a50bf88819dd63b\npublish v1p2beta1: update with absolute address in comments\n\nPiperOrigin-RevId: 299146903\n\n583b7321624736e2c490e328f4b1957335779295\npublish v1p3beta1: update with absolute address in comments\n\nPiperOrigin-RevId: 299146674\n\n638253bf86d1ce1c314108a089b7351440c2f0bf\nfix: add java_multiple_files option for automl text_sentiment.proto\n\nPiperOrigin-RevId: 298971070\n\n373d655703bf914fb8b0b1cc4071d772bac0e0d1\nUpdate Recs AI Beta public bazel file\n\nPiperOrigin-RevId: 298961623\n\ndcc5d00fc8a8d8b56f16194d7c682027b2c66a3b\nfix: add java_multiple_files option for automl classification.proto\n\nPiperOrigin-RevId: 298953301\n\na3f791827266f3496a6a5201d58adc4bb265c2a3\nchore: automl/v1 publish annotations and retry config\n\nPiperOrigin-RevId: 298942178\n\n01c681586d8d6dbd60155289b587aee678530bd9\nMark return_immediately in PullRequest deprecated.\n\nPiperOrigin-RevId: 298893281\n\nc9f5e9c4bfed54bbd09227e990e7bded5f90f31c\nRemove out of date documentation for predicate support on the Storage API\n\nPiperOrigin-RevId: 298883309\n\nfd5b3b8238d783b04692a113ffe07c0363f5de0f\ngenerate webrisk v1 proto\n\nPiperOrigin-RevId: 298847934\n\n541b1ded4abadcc38e8178680b0677f65594ea6f\nUpdate cloud asset api v1p4beta1.\n\nPiperOrigin-RevId: 298686266\n\nc0d171acecb4f5b0bfd2c4ca34fc54716574e300\n Updated to include the Notification v1 API.\n\nPiperOrigin-RevId: 298652775\n\n2346a9186c0bff2c9cc439f2459d558068637e05\nAdd Service Directory v1beta1 protos and configs\n\nPiperOrigin-RevId: 298625638\n\na78ed801b82a5c6d9c5368e24b1412212e541bb7\nPublishing v3 protos and configs.\n\nPiperOrigin-RevId: 298607357\n\n4a180bfff8a21645b3a935c2756e8d6ab18a74e0\nautoml/v1beta1 publish proto updates\n\nPiperOrigin-RevId: 298484782\n\n6de6e938b7df1cd62396563a067334abeedb9676\nchore: use the latest gapic-generator and protoc-java-resource-name-plugin in Bazel workspace.\n\nPiperOrigin-RevId: 298474513\n\n244ab2b83a82076a1fa7be63b7e0671af73f5c02\nAdds service config definition for bigqueryreservation v1\n\nPiperOrigin-RevId: 298455048\n\n" } }, { diff --git a/test/gapic-cloud_build-v1.ts b/test/gapic-cloud_build-v1.ts index eb1c2bb..3327bf1 100644 --- a/test/gapic-cloud_build-v1.ts +++ b/test/gapic-cloud_build-v1.ts @@ -102,12 +102,30 @@ describe('v1.CloudBuildClient', () => { }); assert(client); }); + it('has initialize method and supports deferred initialization', async () => { + const client = new cloudbuildModule.v1.CloudBuildClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + assert.strictEqual(client.cloudBuildStub, undefined); + await client.initialize(); + assert(client.cloudBuildStub); + }); + it('has close method', () => { + const client = new cloudbuildModule.v1.CloudBuildClient({ + credentials: {client_email: 'bogus', private_key: 'bogus'}, + projectId: 'bogus', + }); + client.close(); + }); describe('getBuild', () => { it('invokes getBuild without error', done => { const client = new cloudbuildModule.v1.CloudBuildClient({ credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IGetBuildRequest = {}; // Mock response @@ -130,6 +148,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IGetBuildRequest = {}; // Mock response @@ -154,6 +174,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.ICancelBuildRequest = {}; // Mock response @@ -176,6 +198,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.ICancelBuildRequest = {}; // Mock response @@ -200,6 +224,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.ICreateBuildTriggerRequest = {}; // Mock response @@ -222,6 +248,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.ICreateBuildTriggerRequest = {}; // Mock response @@ -246,6 +274,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IGetBuildTriggerRequest = {}; // Mock response @@ -268,6 +298,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IGetBuildTriggerRequest = {}; // Mock response @@ -292,6 +324,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IDeleteBuildTriggerRequest = {}; // Mock response @@ -314,6 +348,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IDeleteBuildTriggerRequest = {}; // Mock response @@ -338,6 +374,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IUpdateBuildTriggerRequest = {}; // Mock response @@ -360,6 +398,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IUpdateBuildTriggerRequest = {}; // Mock response @@ -384,6 +424,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.ICreateWorkerPoolRequest = {}; // Mock response @@ -406,6 +448,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.ICreateWorkerPoolRequest = {}; // Mock response @@ -430,6 +474,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IGetWorkerPoolRequest = {}; // Mock response @@ -452,6 +498,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IGetWorkerPoolRequest = {}; // Mock response @@ -476,6 +524,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IDeleteWorkerPoolRequest = {}; // Mock response @@ -498,6 +548,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IDeleteWorkerPoolRequest = {}; // Mock response @@ -522,6 +574,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IUpdateWorkerPoolRequest = {}; // Mock response @@ -544,6 +598,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IUpdateWorkerPoolRequest = {}; // Mock response @@ -568,6 +624,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IListWorkerPoolsRequest = {}; // Mock response @@ -590,6 +648,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IListWorkerPoolsRequest = {}; // Mock response @@ -614,6 +674,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.ICreateBuildRequest = {}; // Mock response @@ -643,6 +705,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.ICreateBuildRequest = {}; // Mock response @@ -675,6 +739,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IRetryBuildRequest = {}; // Mock response @@ -704,6 +770,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IRetryBuildRequest = {}; // Mock response @@ -736,6 +804,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IRunBuildTriggerRequest = {}; // Mock response @@ -765,6 +835,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IRunBuildTriggerRequest = {}; // Mock response @@ -797,6 +869,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IListBuildsRequest = {}; // Mock response @@ -823,6 +897,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IListBuildsRequest = {}; // Mock response @@ -854,6 +930,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IListBuildTriggersRequest = {}; // Mock response @@ -880,6 +958,8 @@ describe('v1.CloudBuildClient', () => { credentials: {client_email: 'bogus', private_key: 'bogus'}, projectId: 'bogus', }); + // Initialize client before mocking + client.initialize(); // Mock request const request: protosTypes.google.devtools.cloudbuild.v1.IListBuildTriggersRequest = {}; // Mock response