mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[bugfix] Add back removed ValidateRequest() before backoff-retry loop (#1805)
* add back removed ValidateRequest() before backoff-retry loop Signed-off-by: kim <grufwub@gmail.com> * include response body in error response log Signed-off-by: kim <grufwub@gmail.com> * improved error response body draining Signed-off-by: kim <grufwub@gmail.com> * add more code commenting Signed-off-by: kim <grufwub@gmail.com> * move new error response logic to gtserror, handle instead in transport.Transport{} impl Signed-off-by: kim <grufwub@gmail.com> * appease ye oh mighty linter Signed-off-by: kim <grufwub@gmail.com> * fix mockhttpclient not setting request in http response Signed-off-by: kim <grufwub@gmail.com> --------- Signed-off-by: kim <grufwub@gmail.com>
This commit is contained in:
91
internal/gtserror/new_test.go
Normal file
91
internal/gtserror/new_test.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package gtserror_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
|
||||
)
|
||||
|
||||
func TestResponseError(t *testing.T) {
|
||||
testResponseError(t, http.Response{
|
||||
Body: toBody(`{"error": "user not found"}`),
|
||||
Request: &http.Request{
|
||||
Method: "GET",
|
||||
URL: toURL("https://google.com/users/sundar"),
|
||||
},
|
||||
Status: "404 Not Found",
|
||||
})
|
||||
testResponseError(t, http.Response{
|
||||
Body: toBody("Unauthorized"),
|
||||
Request: &http.Request{
|
||||
Method: "POST",
|
||||
URL: toURL("https://google.com/inbox"),
|
||||
},
|
||||
Status: "401 Unauthorized",
|
||||
})
|
||||
testResponseError(t, http.Response{
|
||||
Body: toBody(""),
|
||||
Request: &http.Request{
|
||||
Method: "GET",
|
||||
URL: toURL("https://google.com/users/sundar"),
|
||||
},
|
||||
Status: "404 Not Found",
|
||||
})
|
||||
}
|
||||
|
||||
func testResponseError(t *testing.T, rsp http.Response) {
|
||||
var body string
|
||||
if rsp.Body == http.NoBody {
|
||||
body = "<empty>"
|
||||
} else {
|
||||
var b []byte
|
||||
rsp.Body, b = copyBody(rsp.Body)
|
||||
trunc := len(b)
|
||||
if trunc > 256 {
|
||||
trunc = 256
|
||||
}
|
||||
body = string(b[:trunc])
|
||||
}
|
||||
expect := fmt.Sprintf(
|
||||
"%s request to %s failed: status=\"%s\" body=\"%s\"",
|
||||
rsp.Request.Method,
|
||||
rsp.Request.URL.String(),
|
||||
rsp.Status,
|
||||
body,
|
||||
)
|
||||
err := gtserror.NewResponseError(&rsp)
|
||||
if str := err.Error(); str != expect {
|
||||
t.Errorf("unexpected error string: recv=%q expct=%q", str, expect)
|
||||
}
|
||||
}
|
||||
|
||||
func toURL(u string) *url.URL {
|
||||
url, err := url.Parse(u)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return url
|
||||
}
|
||||
|
||||
func toBody(s string) io.ReadCloser {
|
||||
if s == "" {
|
||||
return http.NoBody
|
||||
}
|
||||
r := strings.NewReader(s)
|
||||
return io.NopCloser(r)
|
||||
}
|
||||
|
||||
func copyBody(rc io.ReadCloser) (io.ReadCloser, []byte) {
|
||||
b, err := io.ReadAll(rc)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
r := bytes.NewReader(b)
|
||||
return io.NopCloser(r), b
|
||||
}
|
Reference in New Issue
Block a user