...
1
2
3
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 }
123
View as plain text