From 8c64143e2acb3006f777d5217d95614d28057448 Mon Sep 17 00:00:00 2001 From: Dhanraj Date: Mon, 1 Jun 2026 23:23:56 +0530 Subject: [PATCH 1/3] fix(test): clear default containercollector stub before custom return MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit setupTestMetricsPusher registers a nil-returning stub for containercollector. Collect. Testify uses the first registered expectation, so any custom Return added by an individual test was silently ignored — the container metrics never appeared in the payload. Clear ExpectedCalls before registering the test-specific return so the custom data reaches PushMetrics as expected. Co-Authored-By: Claude Sonnet 4.6 --- app/services/metrics/metrics_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/services/metrics/metrics_test.go b/app/services/metrics/metrics_test.go index 0199adc..8abf927 100644 --- a/app/services/metrics/metrics_test.go +++ b/app/services/metrics/metrics_test.go @@ -1112,6 +1112,8 @@ func TestPush_ContainerMetrics_IncludesCoolifyName(t *testing.T) { setupPgBouncerCollectorMocks(mocks.pgbouncercollector) mocks.collector.On("Collect", testCred).Return(domainmetrics.PostgreSQLDatabaseMetrics{Up: true}, nil) mocks.storagecollector.On("Collect", mock.Anything).Return([]storagemetrics.StorageMetricSet(nil), nil) + // Clear the default nil-returning stub so the custom return below takes effect. + mocks.containercollector.ExpectedCalls = nil mocks.containercollector.On("Collect", mock.Anything).Return([]containermetrics.ContainerMetricSet{ { Attributes: domainmetrics.ContainerAttributes{ From f647c314f8380e10e2e06bfae3e29972131403c0 Mon Sep 17 00:00:00 2001 From: Dhanraj Date: Mon, 1 Jun 2026 23:27:56 +0530 Subject: [PATCH 2/3] fix(test): add CollectRouters to MockTraefikCollector and default stub PR #203 was merged before the mock fix landed, so main is missing CollectRouters on MockTraefikCollector and the default CollectRouters stub in setupTestMetricsPusher. Adds both so the test suite compiles and passes. Co-Authored-By: Claude Sonnet 4.6 --- app/services/metrics/metrics_test.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/services/metrics/metrics_test.go b/app/services/metrics/metrics_test.go index 8abf927..7f35353 100644 --- a/app/services/metrics/metrics_test.go +++ b/app/services/metrics/metrics_test.go @@ -243,6 +243,14 @@ func (m *MockTraefikCollector) Collect(ctx context.Context) ([]traefikmetrics.En return args.Get(0).([]traefikmetrics.EntrypointMetricSet), args.Error(1) } +func (m *MockTraefikCollector) CollectRouters(ctx context.Context) ([]traefikmetrics.RouterMetricSet, error) { + args := m.Called(ctx) + if args.Get(0) == nil { + return nil, args.Error(1) + } + return args.Get(0).([]traefikmetrics.RouterMetricSet), args.Error(1) +} + type MockDockerDiscoverer struct { mock.Mock } @@ -314,6 +322,8 @@ func setupTestMetricsPusher() (*metricspusher, *testMocks) { Return([]containermetrics.ContainerMetricSet(nil), nil) mocks.traefikcollector.On("Collect", mock.Anything). Return([]traefikmetrics.EntrypointMetricSet(nil), nil) + mocks.traefikcollector.On("CollectRouters", mock.Anything). + Return([]traefikmetrics.RouterMetricSet(nil), nil) return mp, mocks } From d3908ae4fb33c7f5e83bc67c8008f8f5c22e862f Mon Sep 17 00:00:00 2001 From: Dhanraj Date: Mon, 1 Jun 2026 23:32:09 +0530 Subject: [PATCH 3/3] fix test flake in wsclient ack telemetry --- app/services/wsclient/client_test.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/app/services/wsclient/client_test.go b/app/services/wsclient/client_test.go index 3674ab2..b5682bf 100644 --- a/app/services/wsclient/client_test.go +++ b/app/services/wsclient/client_test.go @@ -598,13 +598,20 @@ func TestClientAckRemovesResultMessageFromOutbox(t *testing.T) { messages, err := store.UnackedMessages() return err == nil && len(messages) == 0 }, "ack to remove outbox message") - entries := telemetryEntries(t, telemetryPath) - ackMetric := findTelemetryEntry(entries, func(entry map[string]any) bool { - return entry["metric_name"] == "hostlink.local_store.outbox.pending_messages" && entry["value"] == float64(0) - }) - finalPendingAck := findTelemetryEntry(entries, func(entry map[string]any) bool { - return entry["event"] == "hostlink.agent_ws.outbox.acknowledged" && entry["acked_message_id"] == "msg-output-1" - }) + var ackMetric map[string]any + var finalPendingAck map[string]any + waitFor(t, func() bool { + entries := telemetryEntries(t, telemetryPath) + ackMetric = findTelemetryEntry(entries, func(entry map[string]any) bool { + return entry["metric_name"] == "hostlink.local_store.outbox.pending_messages" && entry["value"] == float64(0) + }) + finalPendingAck = findTelemetryEntry(entries, func(entry map[string]any) bool { + return entry["event"] == "hostlink.agent_ws.outbox.acknowledged" && entry["acked_message_id"] == "msg-output-1" + }) + return ackMetric["metric_name"] == "hostlink.local_store.outbox.pending_messages" && + finalPendingAck["task_id"] == "task-1" && + finalPendingAck["execution_attempt_id"] == "attempt-1" + }, "telemetry for output outbox acknowledgement") if ackMetric["metric_name"] != "hostlink.local_store.outbox.pending_messages" { t.Fatalf("ack metric = %#v", ackMetric) }