Skip to content

Commit 904f97b

Browse files
committed
Refactor to split handler and server.
1 parent 297074b commit 904f97b

File tree

3 files changed

+36
-23
lines changed

3 files changed

+36
-23
lines changed

internal/server/receiver_handler_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -919,11 +919,11 @@ func Test_handlePayload(t *testing.T) {
919919
}
920920

921921
client := builder.Build()
922-
s := ReceiverServer{
923-
port: "",
924-
logger: logger.NewLogger(logger.Options{}),
925-
kubeClient: client,
926-
}
922+
s := newReceiverHandler(
923+
logger.NewLogger(logger.Options{}),
924+
client,
925+
false,
926+
)
927927

928928
data, err := json.Marshal(tt.payload)
929929
if err != nil {

internal/server/receiver_handlers.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,27 @@ func IndexReceiverWebhookPath(o client.Object) []string {
7676
return nil
7777
}
7878

79-
func (s *ReceiverServer) handlePayload(w http.ResponseWriter, r *http.Request) {
80-
ctx := context.Background()
79+
func newReceiverHandler(logger logr.Logger, kubeClient client.Client, exportHTTPPathMetrics bool) *receiverHandler {
80+
h := &receiverHandler{
81+
logger: logger.WithName("receiver-server"),
82+
kubeClient: kubeClient,
83+
exportHTTPPathMetrics: exportHTTPPathMetrics,
84+
ServeMux: http.NewServeMux(),
85+
}
86+
h.ServeMux.Handle(apiv1.ReceiverWebhookPath, http.HandlerFunc(h.handlePayload))
87+
88+
return h
89+
}
90+
91+
type receiverHandler struct {
92+
logger logr.Logger
93+
kubeClient client.Client
94+
exportHTTPPathMetrics bool
95+
*http.ServeMux
96+
}
97+
98+
func (s *receiverHandler) handlePayload(w http.ResponseWriter, r *http.Request) {
99+
ctx := r.Context()
81100
digest := url.PathEscape(strings.TrimPrefix(r.RequestURI, apiv1.ReceiverWebhookPath))
82101

83102
s.logger.Info(fmt.Sprintf("handling request: %s", digest))
@@ -149,7 +168,7 @@ func (s *ReceiverServer) handlePayload(w http.ResponseWriter, r *http.Request) {
149168
}
150169
}
151170

152-
func (s *ReceiverServer) validate(ctx context.Context, receiver apiv1.Receiver, r *http.Request) error {
171+
func (s *receiverHandler) validate(ctx context.Context, receiver apiv1.Receiver, r *http.Request) error {
153172
token, err := s.token(ctx, receiver)
154173
if err != nil {
155174
return fmt.Errorf("unable to read token, error: %w", err)
@@ -393,7 +412,7 @@ func (s *ReceiverServer) validate(ctx context.Context, receiver apiv1.Receiver,
393412
return fmt.Errorf("recevier type '%s' not supported", receiver.Spec.Type)
394413
}
395414

396-
func (s *ReceiverServer) token(ctx context.Context, receiver apiv1.Receiver) (string, error) {
415+
func (s *receiverHandler) token(ctx context.Context, receiver apiv1.Receiver) (string, error) {
397416
token := ""
398417
secretName := types.NamespacedName{
399418
Namespace: receiver.GetNamespace(),
@@ -416,7 +435,7 @@ func (s *ReceiverServer) token(ctx context.Context, receiver apiv1.Receiver) (st
416435
}
417436

418437
// requestReconciliation requests reconciliation of all the resources matching the given CrossNamespaceObjectReference by annotating them accordingly.
419-
func (s *ReceiverServer) requestReconciliation(ctx context.Context, logger logr.Logger, resource apiv1.CrossNamespaceObjectReference, defaultNamespace string) error {
438+
func (s *receiverHandler) requestReconciliation(ctx context.Context, logger logr.Logger, resource apiv1.CrossNamespaceObjectReference, defaultNamespace string) error {
420439
namespace := defaultNamespace
421440
if resource.Namespace != "" {
422441
namespace = resource.Namespace
@@ -499,7 +518,7 @@ func (s *ReceiverServer) requestReconciliation(ctx context.Context, logger logr.
499518
return nil
500519
}
501520

502-
func (s *ReceiverServer) annotate(ctx context.Context, resource *metav1.PartialObjectMetadata) error {
521+
func (s *receiverHandler) annotate(ctx context.Context, resource *metav1.PartialObjectMetadata) error {
503522
patch := client.MergeFrom(resource.DeepCopy())
504523
sourceAnnotations := resource.GetAnnotations()
505524

@@ -564,7 +583,7 @@ func getGroupVersion(s string) (string, string) {
564583
return slice[0], slice[1]
565584
}
566585

567-
func (s *ReceiverServer) evaluateResourceExpressions(r *http.Request, receiver apiv1.Receiver) ([]apiv1.CrossNamespaceObjectReference, error) {
586+
func (s *receiverHandler) evaluateResourceExpressions(r *http.Request, receiver apiv1.Receiver) ([]apiv1.CrossNamespaceObjectReference, error) {
568587
if len(receiver.Spec.ResourceExpressions) == 0 {
569588
return nil, nil
570589
}

internal/server/receiver_server.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,31 +32,25 @@ import (
3232

3333
// ReceiverServer handles webhook POST requests
3434
type ReceiverServer struct {
35-
port string
36-
logger logr.Logger
37-
kubeClient client.Client
38-
exportHTTPPathMetrics bool
35+
port string
36+
*receiverHandler
3937
}
4038

4139
// NewReceiverServer returns an HTTP server that handles webhooks
4240
func NewReceiverServer(port string, logger logr.Logger, kubeClient client.Client, exportHTTPPathMetrics bool) *ReceiverServer {
4341
return &ReceiverServer{
44-
port: port,
45-
logger: logger.WithName("receiver-server"),
46-
kubeClient: kubeClient,
47-
exportHTTPPathMetrics: exportHTTPPathMetrics,
42+
port: port,
43+
receiverHandler: newReceiverHandler(logger, kubeClient, exportHTTPPathMetrics),
4844
}
4945
}
5046

5147
// ListenAndServe starts the HTTP server on the specified port
5248
func (s *ReceiverServer) ListenAndServe(stopCh <-chan struct{}, mdlw middleware.Middleware) {
53-
mux := http.NewServeMux()
54-
mux.Handle(apiv1.ReceiverWebhookPath, http.HandlerFunc(s.handlePayload))
5549
handlerID := apiv1.ReceiverWebhookPath
5650
if s.exportHTTPPathMetrics {
5751
handlerID = ""
5852
}
59-
h := std.Handler(handlerID, mdlw, mux)
53+
h := std.Handler(handlerID, mdlw, s.receiverHandler)
6054
srv := &http.Server{
6155
Addr: s.port,
6256
Handler: h,

0 commit comments

Comments
 (0)