|
5 | 5 | "encoding/json" |
6 | 6 | "net/http" |
7 | 7 | "net/http/httptest" |
| 8 | + "net/url" |
8 | 9 | "testing" |
9 | 10 |
|
10 | 11 | "github.com/stackitcloud/stackit-cli/internal/pkg/auth" |
@@ -169,6 +170,62 @@ func TestTokenFunc_AzureDevOps(t *testing.T) { |
169 | 170 | } |
170 | 171 | } |
171 | 172 |
|
| 173 | +func TestTokenFunc_AzureDevOps_ServiceConnectionID(t *testing.T) { |
| 174 | + tests := []struct { |
| 175 | + description string |
| 176 | + serviceConnectionID string |
| 177 | + }{ |
| 178 | + { |
| 179 | + description: "service connection id set", |
| 180 | + serviceConnectionID: "my-service-connection-id", |
| 181 | + }, |
| 182 | + { |
| 183 | + description: "service connection id unset", |
| 184 | + serviceConnectionID: "", |
| 185 | + }, |
| 186 | + } |
| 187 | + |
| 188 | + for _, tt := range tests { |
| 189 | + t.Run(tt.description, func(t *testing.T) { |
| 190 | + var gotQuery url.Values |
| 191 | + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 192 | + gotQuery = r.URL.Query() |
| 193 | + w.Header().Set("Content-Type", "application/json") |
| 194 | + tok := "ado-oidc-token" |
| 195 | + _ = json.NewEncoder(w).Encode(map[string]*string{"oidcToken": &tok}) |
| 196 | + })) |
| 197 | + defer srv.Close() |
| 198 | + |
| 199 | + t.Setenv(auth.EnvServiceAccountFederatedToken, "") |
| 200 | + t.Setenv(auth.EnvFederatedTokenFile, "") |
| 201 | + t.Setenv(auth.EnvGitHubRequestURL, "") |
| 202 | + t.Setenv(auth.EnvGitHubRequestToken, "") |
| 203 | + t.Setenv(auth.EnvAzureOIDCRequestURI, srv.URL) |
| 204 | + t.Setenv(auth.EnvAzureAccessToken, "ado-access-token") |
| 205 | + t.Setenv(auth.EnvAzureServiceConnectionID, tt.serviceConnectionID) |
| 206 | + |
| 207 | + fn, err := auth.OIDCTokenFunc() |
| 208 | + if err != nil { |
| 209 | + t.Fatalf("OIDCTokenFunc() unexpected error: %v", err) |
| 210 | + } |
| 211 | + if _, err := fn(context.Background()); err != nil { |
| 212 | + t.Fatalf("fn() unexpected error: %v", err) |
| 213 | + } |
| 214 | + |
| 215 | + got, ok := gotQuery["serviceConnectionId"] |
| 216 | + if tt.serviceConnectionID == "" { |
| 217 | + if ok { |
| 218 | + t.Errorf("serviceConnectionId query param = %q, want it absent", got) |
| 219 | + } |
| 220 | + return |
| 221 | + } |
| 222 | + if !ok || len(got) != 1 || got[0] != tt.serviceConnectionID { |
| 223 | + t.Errorf("serviceConnectionId query param = %q, want %q", got, tt.serviceConnectionID) |
| 224 | + } |
| 225 | + }) |
| 226 | + } |
| 227 | +} |
| 228 | + |
172 | 229 | func TestTokenFunc_NoSource(t *testing.T) { |
173 | 230 | // All env vars absent → must return an actionable error, no panic. |
174 | 231 | t.Setenv(auth.EnvServiceAccountFederatedToken, "") |
|
0 commit comments