func/test/testhttp/testhttp.go

64 lines
1.2 KiB
Go

package testhttp
import (
"io"
"net/http"
"net/url"
"strings"
"testing"
"time"
"gotest.tools/v3/assert"
)
func TestGet(t *testing.T, url string) (statusCode int, body string) {
return TestUrl(t, "GET", "", url, nil)
}
func TestUrl(t *testing.T, method string, bodyData string, url string, headers url.Values) (statusCode int, body string) {
req, err := http.NewRequest(method, url, strings.NewReader(bodyData))
assert.NilError(t, err)
for k, v := range headers {
for _, hv := range v {
req.Header.Add(k, hv)
}
}
client := &http.Client{Timeout: time.Second * 15}
resp, err := client.Do(req)
assert.NilError(t, err)
t.Logf("%s %v -> %v", method, url, resp.Status)
defer func() {
_ = resp.Body.Close()
}()
message, err := io.ReadAll(resp.Body)
assert.NilError(t, err)
statusCode = resp.StatusCode
body = string(message)
return
}
type TestHeaders struct {
Headers url.Values
}
func HeaderBuilder() *TestHeaders {
h := make(url.Values)
return &TestHeaders{h}
}
func (t *TestHeaders) Add(header string, value string) *TestHeaders {
t.Headers.Add(header, value)
return t
}
func (t *TestHeaders) AddNonEmpty(header string, value string) *TestHeaders {
if value != "" {
t.Headers.Add(header, value)
}
return t
}