golang.org/x/oauth2@v0.18.0/google/externalaccount/programmaticrefreshcredsource_test.go (about) 1 // Copyright 2024 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package externalaccount 6 7 import ( 8 "context" 9 "errors" 10 "testing" 11 ) 12 13 func TestRetrieveSubjectToken_ProgrammaticAuth(t *testing.T) { 14 tfc := testConfig 15 16 tfc.SubjectTokenSupplier = testSubjectTokenSupplier{ 17 subjectToken: "subjectToken", 18 } 19 20 base, err := tfc.parse(context.Background()) 21 if err != nil { 22 t.Fatalf("parse() failed %v", err) 23 } 24 25 out, err := base.subjectToken() 26 if err != nil { 27 t.Fatalf("retrieveSubjectToken() failed: %v", err) 28 } 29 30 if out != "subjectToken" { 31 t.Errorf("subjectToken = \n%q\n want \nSubjectToken", out) 32 } 33 } 34 35 func TestRetrieveSubjectToken_ProgrammaticAuthFails(t *testing.T) { 36 tfc := testConfig 37 testError := errors.New("test error") 38 39 tfc.SubjectTokenSupplier = testSubjectTokenSupplier{ 40 err: testError, 41 } 42 43 base, err := tfc.parse(context.Background()) 44 if err != nil { 45 t.Fatalf("parse() failed %v", err) 46 } 47 48 _, err = base.subjectToken() 49 if err == nil { 50 t.Fatalf("subjectToken() should have failed") 51 } 52 if testError != err { 53 t.Errorf("subjectToken = %e, want %e", err, testError) 54 } 55 } 56 57 func TestRetrieveSubjectToken_ProgrammaticAuthOptions(t *testing.T) { 58 tfc := testConfig 59 expectedOptions := SupplierOptions{Audience: tfc.Audience, SubjectTokenType: tfc.SubjectTokenType} 60 61 tfc.SubjectTokenSupplier = testSubjectTokenSupplier{ 62 subjectToken: "subjectToken", 63 expectedOptions: &expectedOptions, 64 } 65 66 base, err := tfc.parse(context.Background()) 67 if err != nil { 68 t.Fatalf("parse() failed %v", err) 69 } 70 71 _, err = base.subjectToken() 72 if err != nil { 73 t.Fatalf("retrieveSubjectToken() failed: %v", err) 74 } 75 } 76 77 func TestRetrieveSubjectToken_ProgrammaticAuthContext(t *testing.T) { 78 tfc := testConfig 79 ctx := context.Background() 80 81 tfc.SubjectTokenSupplier = testSubjectTokenSupplier{ 82 subjectToken: "subjectToken", 83 expectedContext: ctx, 84 } 85 86 base, err := tfc.parse(ctx) 87 if err != nil { 88 t.Fatalf("parse() failed %v", err) 89 } 90 91 _, err = base.subjectToken() 92 if err != nil { 93 t.Fatalf("retrieveSubjectToken() failed: %v", err) 94 } 95 } 96 97 type testSubjectTokenSupplier struct { 98 err error 99 subjectToken string 100 expectedOptions *SupplierOptions 101 expectedContext context.Context 102 } 103 104 func (supp testSubjectTokenSupplier) SubjectToken(ctx context.Context, options SupplierOptions) (string, error) { 105 if supp.err != nil { 106 return "", supp.err 107 } 108 if supp.expectedOptions != nil { 109 if supp.expectedOptions.Audience != options.Audience { 110 return "", errors.New("Audience does not match") 111 } 112 if supp.expectedOptions.SubjectTokenType != options.SubjectTokenType { 113 return "", errors.New("Audience does not match") 114 } 115 } 116 if supp.expectedContext != nil { 117 if supp.expectedContext != ctx { 118 return "", errors.New("Context does not match") 119 } 120 } 121 return supp.subjectToken, nil 122 }