(t *testing.T)
| 185 | } |
| 186 | |
| 187 | func TestDoWithAuthNoRetry(t *testing.T) { |
| 188 | var called uint32 |
| 189 | |
| 190 | srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { |
| 191 | atomic.AddUint32(&called, 1) |
| 192 | assert.Equal(t, "POST", req.Method) |
| 193 | |
| 194 | body := &authRequest{} |
| 195 | err := json.NewDecoder(req.Body).Decode(body) |
| 196 | assert.Nil(t, err) |
| 197 | assert.Equal(t, "Approve", body.Test) |
| 198 | |
| 199 | w.Header().Set("Lfs-Authenticate", "Basic") |
| 200 | actual := req.Header.Get("Authorization") |
| 201 | if len(actual) == 0 { |
| 202 | w.WriteHeader(http.StatusUnauthorized) |
| 203 | return |
| 204 | } |
| 205 | |
| 206 | expected := "Basic " + strings.TrimSpace( |
| 207 | base64.StdEncoding.EncodeToString([]byte("user:pass")), |
| 208 | ) |
| 209 | assert.Equal(t, expected, actual) |
| 210 | })) |
| 211 | defer srv.Close() |
| 212 | |
| 213 | cred := newMockCredentialHelper() |
| 214 | c, err := NewClient(lfshttp.NewContext(git.NewReadOnlyConfig("", ""), |
| 215 | nil, map[string]string{ |
| 216 | "lfs.url": srv.URL + "/repo/lfs", |
| 217 | }, |
| 218 | )) |
| 219 | require.Nil(t, err) |
| 220 | c.Credentials = cred |
| 221 | |
| 222 | access := c.Endpoints.AccessFor(srv.URL + "/repo/lfs") |
| 223 | assert.Equal(t, creds.NoneAccess, (&access).Mode()) |
| 224 | |
| 225 | req, err := http.NewRequest("POST", srv.URL+"/repo/lfs/foo", nil) |
| 226 | require.Nil(t, err) |
| 227 | |
| 228 | err = MarshalToRequest(req, &authRequest{Test: "Approve"}) |
| 229 | require.Nil(t, err) |
| 230 | |
| 231 | res, err := c.DoWithAuthNoRetry("", c.Endpoints.AccessFor(srv.URL+"/repo/lfs"), req) |
| 232 | access = c.Endpoints.AccessFor(srv.URL + "/repo/lfs") |
| 233 | assert.True(t, errors.IsAuthError(err)) |
| 234 | assert.Equal(t, http.StatusUnauthorized, res.StatusCode) |
| 235 | assert.Equal(t, creds.BasicAccess, (&access).Mode()) |
| 236 | assert.EqualValues(t, 1, called) |
| 237 | } |
| 238 | |
| 239 | func TestDoAPIRequestWithAuth(t *testing.T) { |
| 240 | var called uint32 |
nothing calls this directly
no test coverage detected