281 lines
5.8 KiB
Go
281 lines
5.8 KiB
Go
package httpclient
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
)
|
|
|
|
type Data struct {
|
|
Greeting string `json:"greeting"`
|
|
Headers map[string]string `json:"headers"`
|
|
Method string `json:"method"`
|
|
Username string `json:"username"`
|
|
Password string `json:"password"`
|
|
PostData string `json:"postdata"`
|
|
}
|
|
|
|
var (
|
|
greeting = "Hello world"
|
|
postData = "Test data"
|
|
authUser = "testuser"
|
|
authPass = "testpass"
|
|
headerLabel = "Test-Header"
|
|
headerValue = "Test-Value"
|
|
)
|
|
|
|
func httpTestHandler(w http.ResponseWriter, r *http.Request) {
|
|
var (
|
|
b []byte
|
|
user string
|
|
pass string
|
|
body []byte
|
|
)
|
|
|
|
data := Data{
|
|
Greeting: greeting,
|
|
Headers: map[string]string{},
|
|
Method: r.Method,
|
|
}
|
|
|
|
user, pass, ok := r.BasicAuth()
|
|
if ok {
|
|
data.Username = user
|
|
data.Password = pass
|
|
}
|
|
|
|
body, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
fmt.Fprint(w, "ioutil.ReadAll failed")
|
|
}
|
|
data.PostData = string(body)
|
|
|
|
for h := range r.Header {
|
|
data.Headers[h] = r.Header.Get(h)
|
|
}
|
|
|
|
b, err = json.MarshalIndent(data, "", " ")
|
|
if err != nil {
|
|
fmt.Fprint(w, "Json marshal failed somehow")
|
|
}
|
|
fmt.Fprint(w, string(b))
|
|
}
|
|
|
|
func checkMethod(t *testing.T, data Data, method string) {
|
|
if data.Method != method {
|
|
t.Errorf("data.Method(%s) != method(%s)", data.Method, method)
|
|
}
|
|
t.Log("checkMethod() success")
|
|
}
|
|
|
|
func checkGreeting(t *testing.T, data Data) {
|
|
if data.Greeting != greeting {
|
|
t.Errorf("data.Greeting(%s) != greeting(%s)", data.Greeting, greeting)
|
|
}
|
|
t.Log("checkGreeting() success")
|
|
}
|
|
|
|
func checkBasicAuth(t *testing.T, data Data) {
|
|
if data.Username != authUser {
|
|
t.Errorf("data.Username(%s) != authUser(%s)", data.Username, authUser)
|
|
}
|
|
if data.Password != authPass {
|
|
t.Errorf("data.Password(%s) != authPass(%s)", data.Password, authPass)
|
|
}
|
|
t.Log("checkBasicAuth() success")
|
|
}
|
|
|
|
func checkPostData(t *testing.T, data Data) {
|
|
if data.PostData != postData {
|
|
t.Errorf("data.PostData(%s) != postData(%s)", data.PostData, postData)
|
|
}
|
|
t.Log("checkPostData() success")
|
|
}
|
|
|
|
func TestGet(t *testing.T) {
|
|
var data Data
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(httpTestHandler))
|
|
defer ts.Close()
|
|
|
|
output, err := DefaultClient().Get(ts.URL)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if err = json.Unmarshal(output, &data); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
checkMethod(t, data, http.MethodGet)
|
|
checkGreeting(t, data)
|
|
}
|
|
|
|
func TestGetAuth(t *testing.T) {
|
|
var data Data
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(httpTestHandler))
|
|
defer ts.Close()
|
|
|
|
output, err := DefaultClient().SetBasicAuth(authUser, authPass).Get(ts.URL)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if err = json.Unmarshal(output, &data); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
checkMethod(t, data, http.MethodGet)
|
|
checkGreeting(t, data)
|
|
checkBasicAuth(t, data)
|
|
}
|
|
|
|
func TestPut(t *testing.T) {
|
|
var data Data
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(httpTestHandler))
|
|
defer ts.Close()
|
|
|
|
output, err := DefaultClient().SetPostData(postData).Put(ts.URL)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if err = json.Unmarshal(output, &data); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
checkMethod(t, data, http.MethodPut)
|
|
checkGreeting(t, data)
|
|
checkPostData(t, data)
|
|
}
|
|
|
|
func TestPutAuth(t *testing.T) {
|
|
var data Data
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(httpTestHandler))
|
|
defer ts.Close()
|
|
|
|
output, err := DefaultClient().SetBasicAuth(authUser, authPass).SetPostData(postData).Put(ts.URL)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if err = json.Unmarshal(output, &data); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
checkMethod(t, data, http.MethodPut)
|
|
checkGreeting(t, data)
|
|
checkBasicAuth(t, data)
|
|
checkPostData(t, data)
|
|
}
|
|
|
|
func TestPost(t *testing.T) {
|
|
var data Data
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(httpTestHandler))
|
|
defer ts.Close()
|
|
|
|
output, err := DefaultClient().SetPostData(postData).Post(ts.URL)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if err = json.Unmarshal(output, &data); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
checkMethod(t, data, http.MethodPost)
|
|
checkGreeting(t, data)
|
|
checkPostData(t, data)
|
|
}
|
|
|
|
func TestPostAuth(t *testing.T) {
|
|
var data Data
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(httpTestHandler))
|
|
defer ts.Close()
|
|
|
|
output, err := DefaultClient().SetBasicAuth(authUser, authPass).SetPostData(postData).Post(ts.URL)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if err = json.Unmarshal(output, &data); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
checkMethod(t, data, http.MethodPost)
|
|
checkGreeting(t, data)
|
|
checkBasicAuth(t, data)
|
|
checkPostData(t, data)
|
|
}
|
|
|
|
func TestPatch(t *testing.T) {
|
|
var data Data
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(httpTestHandler))
|
|
defer ts.Close()
|
|
|
|
output, err := DefaultClient().SetPostData(postData).Patch(ts.URL)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if err = json.Unmarshal(output, &data); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
checkMethod(t, data, http.MethodPatch)
|
|
checkGreeting(t, data)
|
|
checkPostData(t, data)
|
|
}
|
|
|
|
func TestPatchAuth(t *testing.T) {
|
|
var data Data
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(httpTestHandler))
|
|
defer ts.Close()
|
|
|
|
output, err := DefaultClient().SetBasicAuth(authUser, authPass).SetPostData(postData).Patch(ts.URL)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if err = json.Unmarshal(output, &data); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
checkMethod(t, data, http.MethodPatch)
|
|
checkGreeting(t, data)
|
|
checkBasicAuth(t, data)
|
|
checkPostData(t, data)
|
|
}
|
|
|
|
func TestSetHeader(t *testing.T) {
|
|
var data Data
|
|
|
|
ts := httptest.NewServer(http.HandlerFunc(httpTestHandler))
|
|
defer ts.Close()
|
|
|
|
output, err := DefaultClient().SetHeader(headerLabel, headerValue).Get(ts.URL)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if err = json.Unmarshal(output, &data); err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
checkMethod(t, data, http.MethodGet)
|
|
checkGreeting(t, data)
|
|
if data.Headers[headerLabel] != headerValue {
|
|
t.Errorf("SetHeader values not set in header: %+v", data.Headers)
|
|
}
|
|
} |