11import { PubSub } from "@google-cloud/pubsub" ;
2+ import { GoogleAuth } from "google-auth-library" ;
23import { Request , Response } from "express" ;
34import * as admin from "firebase-admin" ;
4- import * as functions from "firebase-functions/v1 " ;
5+ import * as functions from "firebase-functions" ;
56import * as fs from "fs" ;
67import fetch from "node-fetch" ;
78
@@ -19,17 +20,55 @@ import * as testLab from "./v1/testLab-utils";
1920const firebaseConfig = JSON . parse ( process . env . FIREBASE_CONFIG ) ;
2021admin . initializeApp ( ) ;
2122
23+ // Re-enable no-unused-var check once callable functions are testable again.
24+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2225async function callHttpsTrigger ( name : string , data : any ) {
2326 const url = `https://${ REGION } -${ firebaseConfig . projectId } .cloudfunctions.net/${ name } ` ;
24- const resp = await fetch ( url , {
27+ const client = await new GoogleAuth ( ) . getIdTokenClient ( "32555940559.apps.googleusercontent.com" ) ;
28+ const resp = await client . request ( {
29+ url,
2530 method : "POST" ,
2631 headers : {
2732 "Content-Type" : "application/json" ,
2833 } ,
2934 body : JSON . stringify ( { data } ) ,
3035 } ) ;
31- if ( ! resp . ok ) {
32- throw new Error ( `Failed request with status ${ resp . status } !` ) ;
36+ if ( resp . status > 200 ) {
37+ throw Error ( resp . statusText ) ;
38+ }
39+ }
40+
41+ // Re-enable no-unused-var check once callable functions are testable again.
42+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
43+ async function callV2HttpsTrigger ( name : string , data : any , accessToken : string ) {
44+ const getFnResp = await fetch (
45+ `https://cloudfunctions.googleapis.com/v2beta/projects/${ firebaseConfig . projectId } /locations/${ REGION } /functions/${ name } ` ,
46+ {
47+ headers : {
48+ Authorization : `Bearer ${ accessToken } ` ,
49+ } ,
50+ }
51+ ) ;
52+ if ( ! getFnResp . ok ) {
53+ throw new Error ( getFnResp . statusText ) ;
54+ }
55+ const fn = await getFnResp . json ( ) ;
56+ const uri = fn . serviceConfig ?. uri ;
57+ if ( ! uri ) {
58+ throw new Error ( `Cannot call v2 https trigger ${ name } - no uri found` ) ;
59+ }
60+
61+ const client = await new GoogleAuth ( ) . getIdTokenClient ( "32555940559.apps.googleusercontent.com" ) ;
62+ const invokeFnREsp = await client . request ( {
63+ url : uri ,
64+ method : "POST" ,
65+ headers : {
66+ "Content-Type" : "application/json" ,
67+ } ,
68+ body : JSON . stringify ( { data } ) ,
69+ } ) ;
70+ if ( invokeFnREsp . status > 200 ) {
71+ throw Error ( invokeFnREsp . statusText ) ;
3372 }
3473}
3574
@@ -111,7 +150,8 @@ function v1Tests(testId: string, accessToken: string): Array<Promise<unknown>> {
111150 // A firestore write to trigger the Cloud Firestore tests.
112151 admin . firestore ( ) . collection ( "tests" ) . doc ( testId ) . set ( { test : testId } ) ,
113152 // Invoke a callable HTTPS trigger.
114- callHttpsTrigger ( "v1-callableTests" , { foo : "bar" , testId } ) ,
153+ // TODO: Temporarily disable - doesn't work unless running on projects w/ permission to create public functions.
154+ // callHttpsTrigger("v1-callableTests", { foo: "bar", testId }),
115155 // A Remote Config update to trigger the Remote Config tests.
116156 updateRemoteConfig ( testId , accessToken ) ,
117157 // A storage upload to trigger the Storage tests
@@ -129,7 +169,8 @@ function v1Tests(testId: string, accessToken: string): Array<Promise<unknown>> {
129169function v2Tests ( testId : string , accessToken : string ) : Array < Promise < void > > {
130170 return [
131171 // Invoke a callable HTTPS trigger.
132- callHttpsTrigger ( "v2-callabletests" , { foo : "bar" , testId } ) ,
172+ // TODO: Temporarily disable - doesn't work unless running on projects w/ permission to create public functions.
173+ // callV2HttpsTrigger("v2-callabletests", { foo: "bar", testId }, accessToken),
133174 // Invoke a scheduled trigger.
134175 callV2ScheduleTrigger ( "v2-schedule" , "us-central1" , accessToken ) ,
135176 ] ;
0 commit comments