From 8dc7160ff00a3225fe3a59153c53f1a172500d47 Mon Sep 17 00:00:00 2001 From: Marc Nuri Date: Sun, 30 Mar 2025 18:57:33 +0200 Subject: [PATCH] test: don't use fake clientset --- pkg/kubernetes/mock_server_test.go | 21 ++++++++++++--------- pkg/kubernetes/pods_test.go | 24 +++++++++++++++--------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/pkg/kubernetes/mock_server_test.go b/pkg/kubernetes/mock_server_test.go index b92148a..ad333dd 100644 --- a/pkg/kubernetes/mock_server_test.go +++ b/pkg/kubernetes/mock_server_test.go @@ -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{} diff --git a/pkg/kubernetes/pods_test.go b/pkg/kubernetes/pods_test.go index 6dc5db3..6e4bdd3 100644 --- a/pkg/kubernetes/pods_test.go +++ b/pkg/kubernetes/pods_test.go @@ -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"})