From 29ce3252bd59a71fd59ffbb1f0a933a8f5404337 Mon Sep 17 00:00:00 2001 From: Kevin McDermott Date: Thu, 3 Oct 2024 18:08:18 +0100 Subject: [PATCH] Expand test coverage. This is currently failing because of this bug: https://github.com/kubernetes-sigs/controller-runtime/pull/2949 --- internal/server/receiver_handler_test.go | 65 +++++++++++++++++++++++- internal/server/receiver_handlers.go | 1 + 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/internal/server/receiver_handler_test.go b/internal/server/receiver_handler_test.go index 9bfd24eff..19a02de0d 100644 --- a/internal/server/receiver_handler_test.go +++ b/internal/server/receiver_handler_test.go @@ -27,6 +27,7 @@ import ( "net/http/httptest" "testing" + "github.com/go-logr/logr" "github.com/google/go-github/v64/github" "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" @@ -962,9 +963,68 @@ func Test_handlePayload(t *testing.T) { } func TestReceiverServer(t *testing.T) { - // k8sClient := buildTestClient() - // rs := NewReceiverServer(":0", logr.Discard(), k8sClient, false) + receiver := &apiv1.Receiver{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-receiver", + Namespace: "default", + }, + Spec: apiv1.ReceiverSpec{ + Type: apiv1.GenericReceiver, + SecretRef: meta.LocalObjectReference{ + Name: "token", + }, + ResourceExpressions: []string{ + `{"name": "test-receiver", "kind": "Receiver", "apiVersion": "notification.toolkit.fluxcd.io/v1"}`, + }, + }, + Status: apiv1.ReceiverStatus{ + WebhookPath: apiv1.ReceiverWebhookPath, + Conditions: []metav1.Condition{ + { + Type: meta.ReadyCondition, + Status: metav1.ConditionTrue, + }, + }, + }, + } + secret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "token", + Namespace: "default", + }, + Data: map[string][]byte{ + "token": []byte("token"), + }, + } + k8sClient := buildTestClient(receiver, secret) + + rs := newReceiverHandler(logr.Discard(), k8sClient, false) + srv := httptest.NewServer(rs) + defer srv.Close() + + payload := map[string]any{ + "image": "test-resource:1.2.1", + } + + body, err := json.Marshal(payload) + if err != nil { + t.Fatal(err) + } + req, err := http.NewRequest(http.MethodPost, srv.URL+apiv1.ReceiverWebhookPath, bytes.NewBuffer(body)) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Content-Type", "application/json; charset=utf-8") + + resp, err := srv.Client().Do(req) + if err != nil { + t.Fatal(err) + } + + if resp.StatusCode != http.StatusOK { + t.Errorf("got StatusCode %v, want %v", resp.StatusCode, http.StatusOK) + } } func buildTestClient(objs ...client.Object) client.Client { @@ -975,5 +1035,6 @@ func buildTestClient(objs ...client.Object) client.Client { return fake.NewClientBuilder(). WithScheme(scheme). WithObjects(objs...). + WithStatusSubresource(&apiv1.Receiver{}). WithIndex(&apiv1.Receiver{}, WebhookPathIndexKey, IndexReceiverWebhookPath).Build() } diff --git a/internal/server/receiver_handlers.go b/internal/server/receiver_handlers.go index f06eb2c62..dea1e1b0e 100644 --- a/internal/server/receiver_handlers.go +++ b/internal/server/receiver_handlers.go @@ -106,6 +106,7 @@ func (s *receiverHandler) handlePayload(w http.ResponseWriter, r *http.Request) err := s.kubeClient.List(ctx, &allReceivers, client.MatchingFields{ WebhookPathIndexKey: r.RequestURI, }, client.Limit(1)) + if err != nil { s.logger.Error(err, "unable to list receivers") w.WriteHeader(http.StatusInternalServerError)