karmada/pkg/search/proxy/karmada_proxy_test.go

129 lines
2.2 KiB
Go

package proxy
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"time"
"k8s.io/apimachinery/pkg/runtime"
restclient "k8s.io/client-go/rest"
)
func Test_karmadaProxy(t *testing.T) {
var gotRequest *http.Request
s := httptest.NewTLSServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
gotRequest = req
}))
defer s.Close()
type args struct {
host string
path string
}
type want struct {
path string
}
tests := []struct {
name string
args args
want want
}{
{
name: "proxy to /proxy",
args: args{
host: s.URL,
path: "proxy",
},
want: want{
path: "/proxy",
},
},
{
name: "proxy to /api/proxy",
args: args{
host: s.URL + "/api",
path: "proxy",
},
want: want{
path: "/api/proxy",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotRequest = nil
restConfig := &restclient.Config{
Host: tt.args.host,
TLSClientConfig: restclient.TLSClientConfig{
Insecure: true,
},
Timeout: time.Second * 1,
}
p, err := newKarmadaProxy(restConfig)
if err != nil {
t.Error(err)
return
}
response := httptest.NewRecorder()
h, err := p.connect(context.TODO(), podGVR, tt.args.path, newTestResponder(response))
if err != nil {
t.Error(err)
return
}
request, err := http.NewRequest("GET", "http://localhost", nil)
if err != nil {
t.Error(err)
return
}
h.ServeHTTP(response, request)
if t.Failed() {
return
}
if gotRequest == nil {
t.Error("got request nil")
return
}
if gotRequest.URL.Path != tt.want.path {
t.Errorf("path got = %v, want = %v", gotRequest.URL.Path, tt.want.path)
return
}
})
}
}
type testResponder struct {
resp *httptest.ResponseRecorder
}
func newTestResponder(response *httptest.ResponseRecorder) *testResponder {
return &testResponder{
resp: response,
}
}
func (f *testResponder) Object(statusCode int, obj runtime.Object) {
f.resp.Code = statusCode
if obj != nil {
err := json.NewEncoder(f.resp).Encode(obj)
if err != nil {
f.Error(err)
}
}
}
func (f *testResponder) Error(err error) {
_, _ = f.resp.WriteString(err.Error())
}