Merge pull request #88 from demiurgestudios/errors

Minor Error Handling Fixes
This commit is contained in:
Junpei Tsuji
2019-05-23 17:26:51 +09:00
committed by GitHub
3 changed files with 17 additions and 5 deletions

View File

@@ -101,13 +101,16 @@ func (c *Client) Verify(ctx context.Context, userID string, receiptID string) (I
resp, err := c.httpCli.Do(req) resp, err := c.httpCli.Do(req)
if err != nil { if err != nil {
return result, fmt.Errorf("%v", err) return result, err
} }
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode < 200 || resp.StatusCode >= 300 { if resp.StatusCode < 200 || resp.StatusCode >= 300 {
responseError := IAPResponseError{} responseError := IAPResponseError{}
err = json.NewDecoder(resp.Body).Decode(&responseError) err = json.NewDecoder(resp.Body).Decode(&responseError)
if err != nil {
return result, err
}
return result, errors.New(responseError.Message) return result, errors.New(responseError.Message)
} }

View File

@@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"net/url"
"os" "os"
"reflect" "reflect"
"testing" "testing"
@@ -175,11 +176,17 @@ func TestVerifyTimeout(t *testing.T) {
server, client := testTools(100, "timeout response") server, client := testTools(100, "timeout response")
defer server.Close() defer server.Close()
expected := errors.New("")
ctx := context.Background() ctx := context.Background()
_, actual := client.Verify(ctx, "timeout", "timeout") _, actual := client.Verify(ctx, "timeout", "timeout")
if !reflect.DeepEqual(reflect.TypeOf(actual), reflect.TypeOf(expected)) {
t.Errorf("got %v\nwant %v", actual, expected) // Actual should be a "request canceled" *url.Error
urlErr, ok := actual.(*url.Error)
if !ok {
t.Errorf("Expected *url.Error, got %T", actual)
}
if !urlErr.Timeout() {
t.Errorf("got %v\nwant timeout", actual)
} }
} }

View File

@@ -98,7 +98,9 @@ func NewWithClient(client *http.Client) *Client {
// Verify sends receipts and gets validation result // Verify sends receipts and gets validation result
func (c *Client) Verify(ctx context.Context, reqBody IAPRequest, result interface{}) error { func (c *Client) Verify(ctx context.Context, reqBody IAPRequest, result interface{}) error {
b := new(bytes.Buffer) b := new(bytes.Buffer)
json.NewEncoder(b).Encode(reqBody) if err := json.NewEncoder(b).Encode(reqBody); err != nil {
return err
}
req, err := http.NewRequest("POST", c.ProductionURL, b) req, err := http.NewRequest("POST", c.ProductionURL, b)
if err != nil { if err != nil {