File: urlcredsource_test.go

package info (click to toggle)
golang-golang-x-oauth2 0.15.0-1~bpo12%2B1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-backports
  • size: 748 kB
  • sloc: makefile: 15
file content (131 lines) | stat: -rw-r--r-- 3,294 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package externalaccount

import (
	"context"
	"encoding/json"
	"net/http"
	"net/http/httptest"
	"testing"
)

var myURLToken = "testTokenValue"

func TestRetrieveURLSubjectToken_Text(t *testing.T) {
	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		if r.Method != "GET" {
			t.Errorf("Unexpected request method, %v is found", r.Method)
		}
		if r.Header.Get("Metadata") != "True" {
			t.Errorf("Metadata header not properly included.")
		}
		w.Write([]byte("testTokenValue"))
	}))
	heads := make(map[string]string)
	heads["Metadata"] = "True"
	cs := CredentialSource{
		URL:     ts.URL,
		Format:  format{Type: fileTypeText},
		Headers: heads,
	}
	tfc := testFileConfig
	tfc.CredentialSource = cs

	base, err := tfc.parse(context.Background())
	if err != nil {
		t.Fatalf("parse() failed %v", err)
	}

	out, err := base.subjectToken()
	if err != nil {
		t.Fatalf("retrieveSubjectToken() failed: %v", err)
	}
	if out != myURLToken {
		t.Errorf("got %v but want %v", out, myURLToken)
	}
}

// Checking that retrieveSubjectToken properly defaults to type text
func TestRetrieveURLSubjectToken_Untyped(t *testing.T) {
	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		if r.Method != "GET" {
			t.Errorf("Unexpected request method, %v is found", r.Method)
		}
		w.Write([]byte("testTokenValue"))
	}))
	cs := CredentialSource{
		URL: ts.URL,
	}
	tfc := testFileConfig
	tfc.CredentialSource = cs

	base, err := tfc.parse(context.Background())
	if err != nil {
		t.Fatalf("parse() failed %v", err)
	}

	out, err := base.subjectToken()
	if err != nil {
		t.Fatalf("Failed to retrieve URL subject token: %v", err)
	}
	if out != myURLToken {
		t.Errorf("got %v but want %v", out, myURLToken)
	}
}

func TestRetrieveURLSubjectToken_JSON(t *testing.T) {
	type tokenResponse struct {
		TestToken string `json:"SubjToken"`
	}
	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		if got, want := r.Method, "GET"; got != want {
			t.Errorf("got %v, but want %v", r.Method, want)
		}
		resp := tokenResponse{TestToken: "testTokenValue"}
		jsonResp, err := json.Marshal(resp)
		if err != nil {
			t.Errorf("Failed to marshal values: %v", err)
		}
		w.Write(jsonResp)
	}))
	cs := CredentialSource{
		URL:    ts.URL,
		Format: format{Type: fileTypeJSON, SubjectTokenFieldName: "SubjToken"},
	}
	tfc := testFileConfig
	tfc.CredentialSource = cs

	base, err := tfc.parse(context.Background())
	if err != nil {
		t.Fatalf("parse() failed %v", err)
	}

	out, err := base.subjectToken()
	if err != nil {
		t.Fatalf("%v", err)
	}
	if out != myURLToken {
		t.Errorf("got %v but want %v", out, myURLToken)
	}
}

func TestURLCredential_CredentialSourceType(t *testing.T) {
	cs := CredentialSource{
		URL:    "http://example.com",
		Format: format{Type: fileTypeText},
	}
	tfc := testFileConfig
	tfc.CredentialSource = cs

	base, err := tfc.parse(context.Background())
	if err != nil {
		t.Fatalf("parse() failed %v", err)
	}

	if got, want := base.credentialSourceType(), "url"; got != want {
		t.Errorf("got %v but want %v", got, want)
	}
}