lfsapi: Ensure requests include Content-Length header if necessary

This commit is contained in:
risk danger olson 2017-01-25 08:59:11 -07:00
parent 5d9dc1c137
commit 1f83f952fc
4 changed files with 41 additions and 1 deletions

@ -5,6 +5,7 @@ import (
"encoding/json"
"io"
"net/http"
"strconv"
)
type ReadSeekCloser interface {
@ -18,7 +19,9 @@ func MarshalToRequest(req *http.Request, obj interface{}) error {
return err
}
req.ContentLength = int64(len(by))
clen := len(by)
req.Header.Set("Content-Length", strconv.Itoa(clen))
req.ContentLength = int64(clen)
req.Body = NewByteBody(by)
return nil
}

@ -181,3 +181,38 @@ func TestNewRequest(t *testing.T) {
assert.Equal(t, test[2], req.URL.String(), fmt.Sprintf("endpoint: %s, suffix: %s, expected: %s", test[0], test[1], test[2]))
}
}
func TestNewRequestWithBody(t *testing.T) {
c, err := NewClient(nil, TestEnv(map[string]string{
"lfs.url": "https://example.com",
}))
require.Nil(t, err)
body := struct {
Test string
}{Test: "test"}
req, err := c.NewRequest("POST", c.Endpoints.Endpoint("", ""), "body", body)
require.Nil(t, err)
assert.NotNil(t, req.Body)
assert.Equal(t, "15", req.Header.Get("Content-Length"))
assert.EqualValues(t, 15, req.ContentLength)
}
func TestMarshalToRequest(t *testing.T) {
req, err := http.NewRequest("POST", "https://foo/bar", nil)
require.Nil(t, err)
assert.Nil(t, req.Body)
assert.Equal(t, "", req.Header.Get("Content-Length"))
assert.EqualValues(t, 0, req.ContentLength)
body := struct {
Test string
}{Test: "test"}
require.Nil(t, MarshalToRequest(req, body))
assert.NotNil(t, req.Body)
assert.Equal(t, "15", req.Header.Get("Content-Length"))
assert.EqualValues(t, 15, req.ContentLength)
}

@ -21,6 +21,7 @@ func TestAPILock(t *testing.T) {
assert.Equal(t, "POST", r.Method)
assert.Equal(t, lfsapi.MediaType, r.Header.Get("Accept"))
assert.Equal(t, lfsapi.MediaType, r.Header.Get("Content-Type"))
assert.Equal(t, "61", r.Header.Get("Content-Length"))
lockReq := &lockRequest{}
err := json.NewDecoder(r.Body).Decode(lockReq)

@ -19,6 +19,7 @@ func TestAPIBatch(t *testing.T) {
}
assert.Equal(t, "POST", r.Method)
assert.Equal(t, "80", r.Header.Get("Content-Length"))
bReq := &batchRequest{}
err := json.NewDecoder(r.Body).Decode(bReq)