Define lbryinc.Caller interface for easier drop-in replacement of lbryinc package in client code
This commit is contained in:
parent
ada0ce0484
commit
a1aaeb5a35
2 changed files with 34 additions and 10 deletions
|
@ -13,11 +13,18 @@ import (
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Client stores data about internal-apis call it is about to make.
|
// Caller interface defines currently supported internal-apis methods.
|
||||||
|
type Caller interface {
|
||||||
|
SetServerAddress(string)
|
||||||
|
GetServerAddress() string
|
||||||
|
UserMe() (ResponseData, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Client stores parameters common for internal-apis calls plus a logger.
|
||||||
type Client struct {
|
type Client struct {
|
||||||
ServerAddress string
|
serverAddress string
|
||||||
AuthToken string
|
AuthToken string
|
||||||
Logger *log.Logger
|
logger *log.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
// APIResponse reflects internal-apis JSON response format.
|
// APIResponse reflects internal-apis JSON response format.
|
||||||
|
@ -38,16 +45,16 @@ const (
|
||||||
|
|
||||||
// NewClient returns a client instance for internal-apis. It requires authToken to be provided
|
// NewClient returns a client instance for internal-apis. It requires authToken to be provided
|
||||||
// for authentication.
|
// for authentication.
|
||||||
func NewClient(authToken string) Client {
|
func NewClient(authToken string) Caller {
|
||||||
return Client{
|
return &Client{
|
||||||
ServerAddress: defaultAPIHost,
|
serverAddress: defaultAPIHost,
|
||||||
AuthToken: authToken,
|
AuthToken: authToken,
|
||||||
Logger: log.StandardLogger(),
|
logger: log.StandardLogger(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Client) getEndpointURL(object, method string) string {
|
func (c Client) getEndpointURL(object, method string) string {
|
||||||
return fmt.Sprintf("%s/%s/%s", c.ServerAddress, object, method)
|
return fmt.Sprintf("%s/%s/%s", c.GetServerAddress(), object, method)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Client) prepareParams(params map[string]interface{}) (string, error) {
|
func (c Client) prepareParams(params map[string]interface{}) (string, error) {
|
||||||
|
@ -62,9 +69,19 @@ func (c Client) prepareParams(params map[string]interface{}) (string, error) {
|
||||||
return form.Encode(), nil
|
return form.Encode(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetServerAddress overrides the default internal-apis server address.
|
||||||
|
func (c *Client) SetServerAddress(s string) {
|
||||||
|
c.serverAddress = s
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetServerAddress returns currently defined internal-apis server address.
|
||||||
|
func (c Client) GetServerAddress() string {
|
||||||
|
return c.serverAddress
|
||||||
|
}
|
||||||
|
|
||||||
func (c Client) doCall(url string, payload string) ([]byte, error) {
|
func (c Client) doCall(url string, payload string) ([]byte, error) {
|
||||||
var body []byte
|
var body []byte
|
||||||
c.Logger.Debugf("sending payload: %s", payload)
|
c.logger.Debugf("sending payload: %s", payload)
|
||||||
req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer([]byte(payload)))
|
req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer([]byte(payload)))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return body, err
|
return body, err
|
||||||
|
|
|
@ -55,10 +55,17 @@ func launchDummyServer() {
|
||||||
log.Fatal(s.ListenAndServe())
|
log.Fatal(s.ListenAndServe())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestClient_Set_GetServerAddress(t *testing.T) {
|
||||||
|
c := NewClient("realToken")
|
||||||
|
assert.Equal(t, defaultAPIHost, c.GetServerAddress())
|
||||||
|
c.SetServerAddress("http://host.com/api")
|
||||||
|
assert.Equal(t, "http://host.com/api", c.GetServerAddress())
|
||||||
|
}
|
||||||
|
|
||||||
func TestUserMe(t *testing.T) {
|
func TestUserMe(t *testing.T) {
|
||||||
go launchDummyServer()
|
go launchDummyServer()
|
||||||
c := NewClient("realToken")
|
c := NewClient("realToken")
|
||||||
c.ServerAddress = dummyServerURL
|
c.SetServerAddress(dummyServerURL)
|
||||||
r, err := c.UserMe()
|
r, err := c.UserMe()
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, r["primary_email"], "andrey@lbry.com")
|
assert.Equal(t, r["primary_email"], "andrey@lbry.com")
|
||||||
|
|
Loading…
Reference in a new issue