api/response: HttpResponse tests
This commit is contained in:
parent
91c1b2d360
commit
ff2a96b09d
@ -1,11 +1,7 @@
|
|||||||
// NOTE: Subject to change, do not rely on this package from outside git-lfs source
|
// NOTE: Subject to change, do not rely on this package from outside git-lfs source
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import "net/url"
|
||||||
"net/url"
|
|
||||||
|
|
||||||
"github.com/github/git-lfs/api"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MediaType = "application/vnd.git-lfs+json; charset=utf-8"
|
MediaType = "application/vnd.git-lfs+json; charset=utf-8"
|
||||||
@ -64,7 +60,7 @@ func NewClient(root string) (*Client, error) {
|
|||||||
// If no error occured, an some api.Response implementation will be returned,
|
// If no error occured, an some api.Response implementation will be returned,
|
||||||
// along with a `nil` error. At this point, the body of the response has been
|
// along with a `nil` error. At this point, the body of the response has been
|
||||||
// serialized into `schema.Into`, and the body is closed.
|
// serialized into `schema.Into`, and the body is closed.
|
||||||
func (c *Client) Do(schema *api.RequestSchema) (api.Response, error) {
|
func (c *Client) Do(schema *RequestSchema) (Response, error) {
|
||||||
req, err := c.http.Build(schema)
|
req, err := c.http.Build(schema)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -75,5 +71,5 @@ func (c *Client) Do(schema *api.RequestSchema) (api.Response, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.http.Cleanup(resp)
|
return resp, c.http.Cleanup(resp)
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,6 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"github.com/github/git-lfs/api"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// HttpLifecycle serves as the default implementation of the Lifecycle interface
|
// HttpLifecycle serves as the default implementation of the Lifecycle interface
|
||||||
@ -47,7 +45,7 @@ func NewHttpLifecycle(root *url.URL) *HttpLifecycle {
|
|||||||
//
|
//
|
||||||
// Finally, all of these components are combined together and the resulting
|
// Finally, all of these components are combined together and the resulting
|
||||||
// request is returned.
|
// request is returned.
|
||||||
func (l *HttpLifecycle) Build(schema *api.RequestSchema) (*http.Request, error) {
|
func (l *HttpLifecycle) Build(schema *RequestSchema) (*http.Request, error) {
|
||||||
path, err := l.AbsolutePath(schema.Path)
|
path, err := l.AbsolutePath(schema.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -76,8 +74,8 @@ func (l *HttpLifecycle) Build(schema *api.RequestSchema) (*http.Request, error)
|
|||||||
//
|
//
|
||||||
// Otherwise, the api.Response is returned, along with no error, signaling that
|
// Otherwise, the api.Response is returned, along with no error, signaling that
|
||||||
// the request completed successfully.
|
// the request completed successfully.
|
||||||
func (l *HttpLifecycle) Execute(req *http.Request, into interface{}) (api.Response, error) {
|
func (l *HttpLifecycle) Execute(req *http.Request, into interface{}) (Response, error) {
|
||||||
resp, err := l.c.Do(req)
|
resp, err := l.client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -94,7 +92,7 @@ func (l *HttpLifecycle) Execute(req *http.Request, into interface{}) (api.Respon
|
|||||||
|
|
||||||
// Cleanup implements the Lifecycle.Cleanup function by closing the Body
|
// Cleanup implements the Lifecycle.Cleanup function by closing the Body
|
||||||
// attached to the repsonse.
|
// attached to the repsonse.
|
||||||
func (l *HttpLifecycle) Cleanup(resp api.Response) error {
|
func (l *HttpLifecycle) Cleanup(resp Response) error {
|
||||||
return resp.Body().Close()
|
return resp.Body().Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +115,7 @@ func (l *HttpLifecycle) AbsolutePath(path string) (*url.URL, error) {
|
|||||||
//
|
//
|
||||||
// If an error was encountered while attempting to marshal the body, then that
|
// If an error was encountered while attempting to marshal the body, then that
|
||||||
// will be returned instead, along with a nil io.Reader.
|
// will be returned instead, along with a nil io.Reader.
|
||||||
func (l *HttpLifecycle) Body(schema *api.RequestSchema) (io.ReadCloser, error) {
|
func (l *HttpLifecycle) Body(schema *RequestSchema) (io.ReadCloser, error) {
|
||||||
if schema.Body == nil {
|
if schema.Body == nil {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
27
api/http_response_test.go
Normal file
27
api/http_response_test.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package api_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/github/git-lfs/api"
|
||||||
|
"github.com/github/git-lfs/vendor/_nuts/github.com/technoweenie/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestWrappedHttpResponsesMatchInternal(t *testing.T) {
|
||||||
|
resp := &http.Response{
|
||||||
|
Status: "200 OK",
|
||||||
|
StatusCode: 200,
|
||||||
|
Proto: "HTTP/1.1",
|
||||||
|
Body: ioutil.NopCloser(new(bytes.Buffer)),
|
||||||
|
}
|
||||||
|
wrapped := api.WrapHttpResponse(resp)
|
||||||
|
|
||||||
|
assert.Equal(t, resp.Status, wrapped.Status())
|
||||||
|
assert.Equal(t, resp.StatusCode, wrapped.StatusCode())
|
||||||
|
assert.Equal(t, resp.Proto, wrapped.Proto())
|
||||||
|
assert.Equal(t, resp.Body, wrapped.Body())
|
||||||
|
assert.Equal(t, resp.Header, wrapped.Header())
|
||||||
|
}
|
@ -1,11 +1,7 @@
|
|||||||
// NOTE: Subject to change, do not rely on this package from outside git-lfs source
|
// NOTE: Subject to change, do not rely on this package from outside git-lfs source
|
||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import "net/http"
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/github/git-lfs/api"
|
|
||||||
)
|
|
||||||
|
|
||||||
// TODO(taylor): extract interface for *http.Request; update methods.
|
// TODO(taylor): extract interface for *http.Request; update methods.
|
||||||
|
|
||||||
@ -18,17 +14,17 @@ import (
|
|||||||
// lifecycle of a request in a platform-agnostic fashion.
|
// lifecycle of a request in a platform-agnostic fashion.
|
||||||
type Lifecycle interface {
|
type Lifecycle interface {
|
||||||
// Build creates a sendable request by using the given RequestSchema.
|
// Build creates a sendable request by using the given RequestSchema.
|
||||||
Build(req *api.RequestSchema) (*http.Request, error)
|
Build(req *RequestSchema) (*http.Request, error)
|
||||||
|
|
||||||
// Execute transforms generated request into a wrapped repsonse, (and
|
// Execute transforms generated request into a wrapped repsonse, (and
|
||||||
// optionally an error, if the request failed), and serializes the
|
// optionally an error, if the request failed), and serializes the
|
||||||
// response into the `into interface{}`, if one was provided.
|
// response into the `into interface{}`, if one was provided.
|
||||||
Execute(req *http.Request, into interface{}) (api.Response, error)
|
Execute(req *http.Request, into interface{}) (Response, error)
|
||||||
|
|
||||||
// Cleanup is called after the request has been completed and its
|
// Cleanup is called after the request has been completed and its
|
||||||
// response has been processed. It is meant to preform any post-request
|
// response has been processed. It is meant to preform any post-request
|
||||||
// actions necessary, like closing or resetting the connection. If an
|
// actions necessary, like closing or resetting the connection. If an
|
||||||
// error was encountered in doin this operation, it should be returned
|
// error was encountered in doin this operation, it should be returned
|
||||||
// from this method, or otherwise nil.
|
// from this method, or otherwise nil.
|
||||||
Cleanup(resp api.Response) error
|
Cleanup(resp Response) error
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user