From dbb24e3bd451e4880e453c9fdd2e9e4b7cf62233 Mon Sep 17 00:00:00 2001 From: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 21 Oct 2026 15:08:57 -0700 Subject: [PATCH] notification: assert delivery in the named targets test The test only exercised SendMessage; it now records requests on both endpoints and checks matching, non-matching, and unrouted keys reach the right servers exactly once. --- .../webhook/webhook_queue_test.go | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/weed/notification/webhook/webhook_queue_test.go b/weed/notification/webhook/webhook_queue_test.go index 08eeb6a2d5..23dadc158b 100644 --- a/weed/notification/webhook/webhook_queue_test.go +++ b/weed/notification/webhook/webhook_queue_test.go @@ -4,6 +4,7 @@ import ( "net/http" "net/http/httptest" "strings" + "sync/atomic" "testing" "time" @@ -593,11 +594,14 @@ func (m *mapConfig) GetStringMap(key string) map[string]interface{} { } func TestNamedTargets(t *testing.T) { + var hitsA, hitsB atomic.Int32 serverA := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + hitsA.Add(1) w.WriteHeader(http.StatusOK) })) defer serverA.Close() serverB := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + hitsB.Add(1) w.WriteHeader(http.StatusOK) })) defer serverB.Close() @@ -648,11 +652,28 @@ func TestNamedTargets(t *testing.T) { } defer closeQueueForTest(q) + time.Sleep(200 * time.Millisecond) + msg := &filer_pb.EventNotification{ NewEntry: &filer_pb.Entry{Name: "f.txt"}, } - if err := q.SendMessage("/data/f.txt", msg); err != nil { - t.Errorf("SendMessage() error = %v", err) + for _, key := range []string{"/data/f.txt", "/repository/f.txt", "/elsewhere/f.txt"} { + if err := q.SendMessage(key, msg); err != nil { + t.Errorf("SendMessage(%q) error = %v", key, err) + } + } + + deadline := time.Now().Add(5 * time.Second) + for time.Now().Before(deadline) && (hitsA.Load() == 0 || hitsB.Load() == 0) { + time.Sleep(50 * time.Millisecond) + } + time.Sleep(200 * time.Millisecond) + + if got := hitsA.Load(); got != 1 { + t.Errorf("expected file_ingress to receive 1 event, got %d", got) + } + if got := hitsB.Load(); got != 1 { + t.Errorf("expected metadata_extractor to receive 1 event, got %d", got) } }