From f005bfaa1c8dc1dfd68cdefc4e3cf3c4128ccf93 Mon Sep 17 00:00:00 2001 From: Sven Rebhan <36194019+srebhan@users.noreply.github.com> Date: Tue, 20 Feb 2024 15:21:32 +0100 Subject: [PATCH] test(processors): Fix unit-test for tracking metrics (#14844) --- .../processors/converter/converter_test.go | 2 +- plugins/processors/date/date_test.go | 2 +- plugins/processors/defaults/defaults_test.go | 2 +- plugins/processors/execd/execd_test.go | 2 +- plugins/processors/filepath/filepath_test.go | 2 +- plugins/processors/ifname/ifname_test.go | 2 +- plugins/processors/lookup/lookup_test.go | 4 +- plugins/processors/regex/regex_test.go | 88 +++++++++++++------ plugins/processors/rename/rename_test.go | 2 +- .../reverse_dns/reverse_dns_test.go | 2 +- plugins/processors/s2geo/s2geo_test.go | 2 +- plugins/processors/scale/scale_test.go | 2 +- .../processors/tag_limit/tag_limit_test.go | 2 +- plugins/processors/template/template_test.go | 8 +- plugins/processors/topk/topk_test.go | 2 +- 15 files changed, 83 insertions(+), 41 deletions(-) diff --git a/plugins/processors/converter/converter_test.go b/plugins/processors/converter/converter_test.go index 1c8a88679..7ab9ea79c 100644 --- a/plugins/processors/converter/converter_test.go +++ b/plugins/processors/converter/converter_test.go @@ -836,6 +836,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/date/date_test.go b/plugins/processors/date/date_test.go index e483a0e6d..f4f7e067a 100644 --- a/plugins/processors/date/date_test.go +++ b/plugins/processors/date/date_test.go @@ -289,6 +289,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/defaults/defaults_test.go b/plugins/processors/defaults/defaults_test.go index 4dc75ed82..05bf470f1 100644 --- a/plugins/processors/defaults/defaults_test.go +++ b/plugins/processors/defaults/defaults_test.go @@ -195,6 +195,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/execd/execd_test.go b/plugins/processors/execd/execd_test.go index 00541621d..67d023ce0 100644 --- a/plugins/processors/execd/execd_test.go +++ b/plugins/processors/execd/execd_test.go @@ -391,6 +391,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/filepath/filepath_test.go b/plugins/processors/filepath/filepath_test.go index 579120433..9ea301402 100644 --- a/plugins/processors/filepath/filepath_test.go +++ b/plugins/processors/filepath/filepath_test.go @@ -129,6 +129,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/ifname/ifname_test.go b/plugins/processors/ifname/ifname_test.go index 9955c7978..654e40bbf 100644 --- a/plugins/processors/ifname/ifname_test.go +++ b/plugins/processors/ifname/ifname_test.go @@ -228,6 +228,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/lookup/lookup_test.go b/plugins/processors/lookup/lookup_test.go index 929f63dae..a353e7bc1 100644 --- a/plugins/processors/lookup/lookup_test.go +++ b/plugins/processors/lookup/lookup_test.go @@ -162,7 +162,7 @@ func TestCasesTracking(t *testing.T) { testutil.RequireMetricsEqual(t, expected, actual) // Simulate output acknowledging delivery - for _, m := range input { + for _, m := range actual { m.Accept() } @@ -170,7 +170,7 @@ func TestCasesTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) }) } diff --git a/plugins/processors/regex/regex_test.go b/plugins/processors/regex/regex_test.go index d03328e0b..155e458d0 100644 --- a/plugins/processors/regex/regex_test.go +++ b/plugins/processors/regex/regex_test.go @@ -1,6 +1,7 @@ package regex import ( + "sync" "testing" "time" @@ -992,6 +993,56 @@ func TestAnyFieldConversion(t *testing.T) { } func TestTrackedMetricNotLost(t *testing.T) { + now := time.Now() + + // Setup raw input and expected output + inputRaw := testutil.MustMetric( + "access_log", + map[string]string{ + "verb": "GET", + "resp_code": "200", + }, + map[string]interface{}{ + "request": "/api/search/?category=plugins&q=regex&sort=asc", + "ignore_number": int64(200), + "ignore_bool": true, + }, + now, + ) + + expected := []telegraf.Metric{ + metric.New( + "access_log", + map[string]string{ + "verb": "GET", + "resp_code": "200", + "resp_code_group": "2xx", + "resp_code_text": "OK", + }, + map[string]interface{}{ + "request": "/api/search/?category=plugins&q=regex&sort=asc", + "method": "/search/", + "search_category": "plugins", + "ignore_number": int64(200), + "ignore_bool": true, + }, + now, + ), + } + + // Create fake notification for testing + var mu sync.Mutex + delivered := make([]telegraf.DeliveryInfo, 0, 1) + notify := func(di telegraf.DeliveryInfo) { + mu.Lock() + defer mu.Unlock() + delivered = append(delivered, di) + } + + // Convert raw input to tracking metric + input, _ := metric.WithTracking(inputRaw, notify) + + // Prepare and start the plugin regex := Regex{ Tags: []converter{ { @@ -1025,32 +1076,19 @@ func TestTrackedMetricNotLost(t *testing.T) { } require.NoError(t, regex.Init()) - m := newM2().Copy() - var delivered bool - notify := func(telegraf.DeliveryInfo) { - delivered = true - } - m, _ = metric.WithTracking(m, notify) - processed := regex.Apply(m) - processed[0].Accept() + // Process expected metrics and compare with resulting metrics + actual := regex.Apply(input) + testutil.RequireMetricsEqual(t, expected, actual) - expectedFields := map[string]interface{}{ - "request": "/api/search/?category=plugins&q=regex&sort=asc", - "method": "/search/", - "search_category": "plugins", - "ignore_number": int64(200), - "ignore_bool": true, - } - expectedTags := map[string]string{ - "verb": "GET", - "resp_code": "200", - "resp_code_group": "2xx", - "resp_code_text": "OK", + // Simulate output acknowledging delivery + for _, m := range actual { + m.Accept() } - require.Equal(t, expectedFields, processed[0].Fields()) - require.Equal(t, expectedTags, processed[0].Tags()) - require.Eventually(t, func() bool { - return delivered - }, time.Second, 100*time.Millisecond, "metric not delivered") + // Check delivery + require.Eventuallyf(t, func() bool { + mu.Lock() + defer mu.Unlock() + return len(delivered) == 1 + }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/rename/rename_test.go b/plugins/processors/rename/rename_test.go index 46716d51e..9edb1c371 100644 --- a/plugins/processors/rename/rename_test.go +++ b/plugins/processors/rename/rename_test.go @@ -124,6 +124,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/reverse_dns/reverse_dns_test.go b/plugins/processors/reverse_dns/reverse_dns_test.go index e6a413344..b488b8eff 100644 --- a/plugins/processors/reverse_dns/reverse_dns_test.go +++ b/plugins/processors/reverse_dns/reverse_dns_test.go @@ -128,6 +128,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/s2geo/s2geo_test.go b/plugins/processors/s2geo/s2geo_test.go index bab79908c..35f14b5c0 100644 --- a/plugins/processors/s2geo/s2geo_test.go +++ b/plugins/processors/s2geo/s2geo_test.go @@ -118,6 +118,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/scale/scale_test.go b/plugins/processors/scale/scale_test.go index 3c2b3c96e..490c5700a 100644 --- a/plugins/processors/scale/scale_test.go +++ b/plugins/processors/scale/scale_test.go @@ -546,6 +546,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/tag_limit/tag_limit_test.go b/plugins/processors/tag_limit/tag_limit_test.go index 91cd06ffa..29bc03d0e 100644 --- a/plugins/processors/tag_limit/tag_limit_test.go +++ b/plugins/processors/tag_limit/tag_limit_test.go @@ -148,6 +148,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) } diff --git a/plugins/processors/template/template_test.go b/plugins/processors/template/template_test.go index 026c71b6c..b8a3be5b7 100644 --- a/plugins/processors/template/template_test.go +++ b/plugins/processors/template/template_test.go @@ -292,12 +292,16 @@ func TestTracking(t *testing.T) { testutil.RequireMetricsEqual(t, expected, actual) // Simulate output acknowledging delivery - input.Accept() + for _, m := range actual { + m.Accept() + } + + // Check delivery // Check delivery require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(delivered) > 0 + return len(delivered) == 1 }, time.Second, 100*time.Millisecond, "%d delivered but 1 expected", len(delivered)) } diff --git a/plugins/processors/topk/topk_test.go b/plugins/processors/topk/topk_test.go index de148a158..a03e662c7 100644 --- a/plugins/processors/topk/topk_test.go +++ b/plugins/processors/topk/topk_test.go @@ -576,6 +576,6 @@ func TestTracking(t *testing.T) { require.Eventuallyf(t, func() bool { mu.Lock() defer mu.Unlock() - return len(expected) == len(delivered) + return len(input) == len(delivered) }, time.Second, 100*time.Millisecond, "%d delivered but %d expected", len(delivered), len(expected)) }