3f61ea62f4
For tq requests, use the URL being transferred to for the access mode instead of the LFS API endpoint. Since these endpoints are different, this will ensure credentials aren't passed along needlessly if, for example, the API endpoint requires authentication and the endpoint being transferred to does not.
73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package tq
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"sync/atomic"
|
|
"testing"
|
|
|
|
"github.com/git-lfs/git-lfs/lfsapi"
|
|
"github.com/git-lfs/git-lfs/lfshttp"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestVerifyWithoutAction(t *testing.T) {
|
|
c, _ := lfsapi.NewClient(nil)
|
|
tr := &Transfer{
|
|
Oid: "abc",
|
|
Size: 123,
|
|
}
|
|
|
|
assert.Nil(t, verifyUpload(c, "origin", tr))
|
|
}
|
|
|
|
func TestVerifySuccess(t *testing.T) {
|
|
var called uint32
|
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.URL.String() != "/verify" {
|
|
w.WriteHeader(http.StatusNotFound)
|
|
return
|
|
}
|
|
|
|
atomic.AddUint32(&called, 1)
|
|
|
|
assert.Equal(t, "POST", r.Method)
|
|
assert.Equal(t, "bar", r.Header.Get("Foo"))
|
|
assert.Equal(t, "29", r.Header.Get("Content-Length"))
|
|
assert.Equal(t, "application/vnd.git-lfs+json", r.Header.Get("Content-Type"))
|
|
|
|
var tr Transfer
|
|
assert.Nil(t, json.NewDecoder(r.Body).Decode(&tr))
|
|
assert.Equal(t, "abcd1234", tr.Oid)
|
|
assert.EqualValues(t, 123, tr.Size)
|
|
}))
|
|
defer srv.Close()
|
|
|
|
// Set auth on the server URL but not on the /verify endpoint. Since auth
|
|
// will cause the request to fail, this will test that the correct access
|
|
// mode is being passed to `DoWithAuth()`
|
|
c, err := lfsapi.NewClient(lfshttp.NewContext(nil, nil, map[string]string{
|
|
"lfs.transfer.maxverifies": "1",
|
|
"lfs." + srv.URL + ".access": "Basic",
|
|
"lfs." + srv.URL + "/verify.access": "None",
|
|
}))
|
|
require.Nil(t, err)
|
|
tr := &Transfer{
|
|
Oid: "abcd1234",
|
|
Size: 123,
|
|
Actions: map[string]*Action{
|
|
"verify": &Action{
|
|
Href: srv.URL + "/verify",
|
|
Header: map[string]string{
|
|
"foo": "bar",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
assert.Nil(t, verifyUpload(c, "origin", tr))
|
|
assert.EqualValues(t, 1, called)
|
|
}
|