mirror of
https://github.com/containers/kubernetes-mcp-server.git
synced 2025-10-23 01:22:57 +03:00
test: don't use fake clientset
This commit is contained in:
@@ -10,7 +10,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||
"k8s.io/apimachinery/pkg/util/httpstream"
|
||||
"k8s.io/apimachinery/pkg/util/httpstream/spdy"
|
||||
"k8s.io/client-go/kubernetes/fake"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/rest"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
@@ -21,14 +21,12 @@ type MockServer struct {
|
||||
config *rest.Config
|
||||
restClient *rest.RESTClient
|
||||
restHandlers []http.HandlerFunc
|
||||
clientSet *fake.Clientset
|
||||
clientSet kubernetes.Interface
|
||||
parameterCodec runtime.ParameterCodec
|
||||
}
|
||||
|
||||
func NewMockServer() *MockServer {
|
||||
ms := &MockServer{
|
||||
clientSet: fake.NewClientset(),
|
||||
}
|
||||
ms := &MockServer{}
|
||||
scheme := runtime.NewScheme()
|
||||
codecs := serializer.NewCodecFactory(scheme)
|
||||
ms.parameterCodec = runtime.NewParameterCodec(scheme)
|
||||
@@ -48,6 +46,7 @@ func NewMockServer() *MockServer {
|
||||
}
|
||||
ms.restClient, _ = rest.RESTClientFor(ms.config)
|
||||
ms.restHandlers = make([]http.HandlerFunc, 0)
|
||||
ms.clientSet = kubernetes.NewForConfigOrDie(ms.config)
|
||||
return ms
|
||||
}
|
||||
|
||||
@@ -55,10 +54,6 @@ func (m *MockServer) Close() {
|
||||
m.server.Close()
|
||||
}
|
||||
|
||||
func (m *MockServer) ClientSet() *fake.Clientset {
|
||||
return m.clientSet
|
||||
}
|
||||
|
||||
func (m *MockServer) Handle(handler http.Handler) {
|
||||
m.restHandlers = append(m.restHandlers, handler.ServeHTTP)
|
||||
}
|
||||
@@ -72,6 +67,14 @@ func (m *MockServer) NewKubernetes() *Kubernetes {
|
||||
}
|
||||
}
|
||||
|
||||
func writeObject(w http.ResponseWriter, obj runtime.Object) {
|
||||
w.Header().Set("Content-Type", runtime.ContentTypeJSON)
|
||||
if err := json.NewEncoder(w).Encode(obj); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
|
||||
type streamAndReply struct {
|
||||
httpstream.Stream
|
||||
replySent <-chan struct{}
|
||||
|
||||
@@ -13,14 +13,10 @@ import (
|
||||
func TestPodsExec(t *testing.T) {
|
||||
mockServer := NewMockServer()
|
||||
defer mockServer.Close()
|
||||
_ = mockServer.ClientSet().Tracker().Add(&v1.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: "default",
|
||||
Name: "pod-to-exec",
|
||||
},
|
||||
Spec: v1.PodSpec{Containers: []v1.Container{{Name: "container-to-exec"}}},
|
||||
})
|
||||
mockServer.Handle(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||
if req.URL.Path != "/api/v1/namespaces/default/pods/pod-to-exec/exec" {
|
||||
return
|
||||
}
|
||||
var stdin, stdout bytes.Buffer
|
||||
ctx, err := createHTTPStreams(w, req, &StreamOptions{
|
||||
Stdin: &stdin,
|
||||
@@ -32,9 +28,19 @@ func TestPodsExec(t *testing.T) {
|
||||
return
|
||||
}
|
||||
defer ctx.conn.Close()
|
||||
if req.URL.Path == "/api/v1/namespaces/default/pods/pod-to-exec/exec" {
|
||||
_, _ = io.WriteString(ctx.stdoutStream, "total 0\n")
|
||||
_, _ = io.WriteString(ctx.stdoutStream, "total 0\n")
|
||||
}))
|
||||
mockServer.Handle(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
|
||||
if req.URL.Path != "/api/v1/namespaces/default/pods/pod-to-exec" {
|
||||
return
|
||||
}
|
||||
writeObject(w, &v1.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Namespace: "default",
|
||||
Name: "pod-to-exec",
|
||||
},
|
||||
Spec: v1.PodSpec{Containers: []v1.Container{{Name: "container-to-exec"}}},
|
||||
})
|
||||
}))
|
||||
k8s := mockServer.NewKubernetes()
|
||||
out, err := k8s.PodsExec(context.Background(), "default", "pod-to-exec", "", []string{"ls", "-l"})
|
||||
|
||||
Reference in New Issue
Block a user