1
1
import { PubSub } from "@google-cloud/pubsub" ;
2
+ import { GoogleAuth } from "google-auth-library" ;
2
3
import { Request , Response } from "express" ;
3
4
import * as admin from "firebase-admin" ;
4
- import * as functions from "firebase-functions/v1 " ;
5
+ import * as functions from "firebase-functions" ;
5
6
import * as fs from "fs" ;
6
7
import fetch from "node-fetch" ;
7
8
@@ -19,17 +20,55 @@ import * as testLab from "./v1/testLab-utils";
19
20
const firebaseConfig = JSON . parse ( process . env . FIREBASE_CONFIG ) ;
20
21
admin . initializeApp ( ) ;
21
22
23
+ // Re-enable no-unused-var check once callable functions are testable again.
24
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
22
25
async function callHttpsTrigger ( name : string , data : any ) {
23
26
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,
25
30
method : "POST" ,
26
31
headers : {
27
32
"Content-Type" : "application/json" ,
28
33
} ,
29
34
body : JSON . stringify ( { data } ) ,
30
35
} ) ;
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 ) ;
33
72
}
34
73
}
35
74
@@ -111,7 +150,8 @@ function v1Tests(testId: string, accessToken: string): Array<Promise<unknown>> {
111
150
// A firestore write to trigger the Cloud Firestore tests.
112
151
admin . firestore ( ) . collection ( "tests" ) . doc ( testId ) . set ( { test : testId } ) ,
113
152
// 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 }),
115
155
// A Remote Config update to trigger the Remote Config tests.
116
156
updateRemoteConfig ( testId , accessToken ) ,
117
157
// A storage upload to trigger the Storage tests
@@ -129,7 +169,8 @@ function v1Tests(testId: string, accessToken: string): Array<Promise<unknown>> {
129
169
function v2Tests ( testId : string , accessToken : string ) : Array < Promise < void > > {
130
170
return [
131
171
// 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),
133
174
// Invoke a scheduled trigger.
134
175
callV2ScheduleTrigger ( "v2-schedule" , "us-central1" , accessToken ) ,
135
176
] ;
0 commit comments