@@ -4,8 +4,10 @@ import { createOIDCCredentialProvider } from "../src/credentials";
44describe ( "OIDC credential provider" , ( ) => {
55 test ( "exchanges an OIDC token for STS credentials" , async ( ) => {
66 const requests : URLSearchParams [ ] = [ ] ;
7- const restoreFetch = mockSTSFetch ( ( params ) => {
7+ const urls : string [ ] = [ ] ;
8+ const restoreFetch = mockSTSFetch ( ( params , request ) => {
89 requests . push ( params ) ;
10+ urls . push ( request . url ) ;
911 return createSTSResponse ( {
1012 accessKeyID : "access-key-id" ,
1113 accessKeySecret : "access-key-secret" ,
@@ -24,7 +26,7 @@ describe("OIDC credential provider", () => {
2426 } ) ,
2527 roleArn : "acs:ram::1234567890123456:role/example" ,
2628 roleSessionName : "tablestore-test" ,
27- stsEndpoint : "https://sts.example.com" ,
29+ stsEndpoint : "https://sts.example.com?source=test " ,
2830 } ) ;
2931
3032 const credentials = await credentialProvider ( ) ;
@@ -36,6 +38,7 @@ describe("OIDC credential provider", () => {
3638 stsToken : "security-token" ,
3739 } ) ;
3840 expect ( requests ) . toHaveLength ( 1 ) ;
41+ expect ( urls ) . toEqual ( [ "https://sts.example.com/?source=test" ] ) ;
3942 expect ( requests [ 0 ] ! . get ( "Action" ) ) . toBe ( "AssumeRoleWithOIDC" ) ;
4043 expect ( requests [ 0 ] ! . get ( "Version" ) ) . toBe ( "2015-04-01" ) ;
4144 expect ( requests [ 0 ] ! . get ( "OIDCToken" ) ) . toBe ( "oidc-token" ) ;
@@ -150,11 +153,13 @@ describe("OIDC credential provider", () => {
150153
151154 const first = await credentialProvider ( ) ;
152155 const fallback = await credentialProvider ( ) ;
156+ const backedOff = await credentialProvider ( ) ;
153157
154158 expect ( hits ) . toBe ( 2 ) ;
155159 expect ( first . accessKeyID ) . toBe ( "access-key-id" ) ;
156160 expect ( fallback . accessKeyID ) . toBe ( "access-key-id" ) ;
157161 expect ( fallback . stsToken ) . toBe ( "security-token" ) ;
162+ expect ( backedOff . accessKeyID ) . toBe ( "access-key-id" ) ;
158163 }
159164 finally {
160165 restoreFetch ( ) ;
@@ -169,12 +174,12 @@ interface STSResponseOptions {
169174 stsToken : string ;
170175}
171176
172- function mockSTSFetch ( handler : ( params : URLSearchParams ) => unknown | Promise < unknown > ) : ( ) => void {
177+ function mockSTSFetch ( handler : ( params : URLSearchParams , request : Request ) => unknown | Promise < unknown > ) : ( ) => void {
173178 const originalFetch = globalThis . fetch ;
174179 globalThis . fetch = ( async ( input , init ) => {
175180 const request = input instanceof Request ? input : new Request ( String ( input ) , init ) ;
176181 const params = new URLSearchParams ( await request . text ( ) ) ;
177- return Response . json ( await handler ( params ) ) ;
182+ return Response . json ( await handler ( params , request ) ) ;
178183 } ) as typeof fetch ;
179184
180185 return ( ) => {
0 commit comments