(t *testing.T)
| 325 | } |
| 326 | |
| 327 | func TestSSOURL(t *testing.T) { |
| 328 | tests := []struct { |
| 329 | name string |
| 330 | host string |
| 331 | sso string |
| 332 | wantStderr string |
| 333 | wantSSO string |
| 334 | }{ |
| 335 | { |
| 336 | name: "SSO challenge in response header", |
| 337 | host: "github.com", |
| 338 | sso: "required; url=https://github.com/login/sso?return_to=xyz¶m=123abc; another", |
| 339 | wantStderr: "", |
| 340 | wantSSO: "https://github.com/login/sso?return_to=xyz¶m=123abc", |
| 341 | }, |
| 342 | } |
| 343 | |
| 344 | ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 345 | if sso := r.URL.Query().Get("sso"); sso != "" { |
| 346 | w.Header().Set("X-GitHub-SSO", sso) |
| 347 | } |
| 348 | w.WriteHeader(http.StatusNoContent) |
| 349 | })) |
| 350 | defer ts.Close() |
| 351 | |
| 352 | for _, tt := range tests { |
| 353 | t.Run(tt.name, func(t *testing.T) { |
| 354 | cfg := config.NewBlankConfig() |
| 355 | ios, _, _, stderr := iostreams.Test() |
| 356 | client, err := HttpClientFunc(func() (gh.Config, error) { return cfg, nil }, ios, "v1.2.3", "", &telemetry.NoOpService{})() |
| 357 | require.NoError(t, err) |
| 358 | req, err := http.NewRequest("GET", ts.URL, nil) |
| 359 | if tt.sso != "" { |
| 360 | q := req.URL.Query() |
| 361 | q.Set("sso", tt.sso) |
| 362 | req.URL.RawQuery = q.Encode() |
| 363 | } |
| 364 | req.Host = tt.host |
| 365 | require.NoError(t, err) |
| 366 | |
| 367 | res, err := client.Do(req) |
| 368 | require.NoError(t, err) |
| 369 | |
| 370 | assert.Equal(t, 204, res.StatusCode) |
| 371 | assert.Equal(t, tt.wantStderr, stderr.String()) |
| 372 | assert.Equal(t, tt.wantSSO, SSOURL()) |
| 373 | }) |
| 374 | } |
| 375 | } |
| 376 | |
| 377 | func TestPlainHttpClient(t *testing.T) { |
| 378 | var receivedHeaders *http.Header |
nothing calls this directly
no test coverage detected