change do to get http response

This commit is contained in:
tongjingran 2020-07-30 17:30:50 +08:00
parent cd8b85ca31
commit eee494b4a0
2 changed files with 26 additions and 14 deletions

View File

@ -76,15 +76,15 @@ func (c *client) RegisterService(srv Service) ([]byte, error) {
return nil, fmt.Errorf("invalid service name") return nil, fmt.Errorf("invalid service name")
} }
u := fmt.Sprintf("%s%s?name=%s&address=%s", c.Host, CoverRegisterServiceAPI, srv.Name, srv.Address) u := fmt.Sprintf("%s%s?name=%s&address=%s", c.Host, CoverRegisterServiceAPI, srv.Name, srv.Address)
res, err := c.do("POST", u, nil) _, res, err := c.do("POST", u, nil)
return res, err return res, err
} }
func (c *client) ListServices() ([]byte, error) { func (c *client) ListServices() ([]byte, error) {
u := fmt.Sprintf("%s%s", c.Host, CoverServicesListAPI) u := fmt.Sprintf("%s%s", c.Host, CoverServicesListAPI)
services, err := c.do("GET", u, nil) _, services, err := c.do("GET", u, nil)
if err != nil && isNetworkError(err) { if err != nil && isNetworkError(err) {
services, err = c.do("GET", u, nil) _, services, err = c.do("GET", u, nil)
} }
return services, err return services, err
@ -102,42 +102,46 @@ func (c *client) Profile(param ProfileParam) ([]byte, error) {
for _, addr := range param.Address { for _, addr := range param.Address {
u = u + "&address=" + addr u = u + "&address=" + addr
} }
profile, err := c.do("GET", u, nil) res, profile, err := c.do("GET", u, nil)
if err != nil && isNetworkError(err) { if err != nil && isNetworkError(err) {
profile, err = c.do("GET", u, nil) res, profile, err = c.do("GET", u, nil)
}
if err == nil && res.StatusCode != 200 {
err = fmt.Errorf(string(profile))
} }
return profile, err return profile, err
} }
func (c *client) Clear() ([]byte, error) { func (c *client) Clear() ([]byte, error) {
u := fmt.Sprintf("%s%s", c.Host, CoverProfileClearAPI) u := fmt.Sprintf("%s%s", c.Host, CoverProfileClearAPI)
resp, err := c.do("POST", u, nil) _, resp, err := c.do("POST", u, nil)
if err != nil && isNetworkError(err) { if err != nil && isNetworkError(err) {
resp, err = c.do("POST", u, nil) _, resp, err = c.do("POST", u, nil)
} }
return resp, err return resp, err
} }
func (c *client) InitSystem() ([]byte, error) { func (c *client) InitSystem() ([]byte, error) {
u := fmt.Sprintf("%s%s", c.Host, CoverInitSystemAPI) u := fmt.Sprintf("%s%s", c.Host, CoverInitSystemAPI)
return c.do("POST", u, nil) _, body, err := c.do("POST", u, nil)
return body, err
} }
func (c *client) do(method, url string, body io.Reader) ([]byte, error) { func (c *client) do(method, url string, body io.Reader) (*http.Response, []byte, error) {
req, err := http.NewRequest(method, url, body) req, err := http.NewRequest(method, url, body)
if err != nil { if err != nil {
return nil, err return nil, nil, err
} }
res, err := c.client.Do(req) res, err := c.client.Do(req)
if err != nil { if err != nil {
return nil, err return nil, nil, err
} }
defer res.Body.Close() defer res.Body.Close()
responseBody, err := ioutil.ReadAll(res.Body) responseBody, err := ioutil.ReadAll(res.Body)
if err != nil { if err != nil {
return nil, err return res, nil, err
} }
return responseBody, nil return res, responseBody, nil
} }
func isNetworkError(err error) bool { func isNetworkError(err error) bool {

View File

@ -115,7 +115,7 @@ func TestClientAction(t *testing.T) {
assert.Contains(t, string(res), "success") assert.Contains(t, string(res), "success")
res, err = client.Profile(item.param) res, err = client.Profile(item.param)
if err != nil { if err != nil {
assert.Equal(t, err.Error(), item.res) assert.Contains(t, err.Error(), item.res)
} else { } else {
assert.Contains(t, string(res), item.res) assert.Contains(t, string(res), item.res)
} }
@ -157,3 +157,11 @@ func TestClientListServices(t *testing.T) {
_, err := c.ListServices() _, err := c.ListServices()
assert.Contains(t, err.Error(), "connect: connection refused") assert.Contains(t, err.Error(), "connect: connection refused")
} }
func TestClientDo(t *testing.T) {
c := &client{
client: http.DefaultClient,
}
_, _, err := c.do(" ", "http://127.0.0.1:7777", nil) // a invalid method
assert.Contains(t, err.Error(), "invalid method")
}