...

Source file src/golang.org/x/oauth2/google/externalaccount/programmaticrefreshcredsource_test.go

Documentation: golang.org/x/oauth2/google/externalaccount

     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  }
   123  

View as plain text