From 2fa371050e1be4d1c2bb9f8af5265e8df3053d67 Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Thu, 6 Jun 2024 15:49:03 +0100 Subject: [PATCH 1/3] chore(cli): netcheck: remove check for healthy node report in test --- cli/netcheck_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/netcheck_test.go b/cli/netcheck_test.go index 45166861db04f..16b72beb2fd89 100644 --- a/cli/netcheck_test.go +++ b/cli/netcheck_test.go @@ -5,7 +5,6 @@ import ( "encoding/json" "testing" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/coder/coder/v2/cli/clitest" @@ -30,7 +29,8 @@ func TestNetcheck(t *testing.T) { var report healthsdk.DERPHealthReport require.NoError(t, json.Unmarshal(b, &report)) - assert.True(t, report.Healthy) + // We do not assert that the report is healthy, just that + // it has the expected number of reports per region. require.Len(t, report.Regions, 1+1) // 1 built-in region + 1 test-managed STUN region for _, v := range report.Regions { require.Len(t, v.NodeReports, len(v.Region.Nodes)) From 7c9d51a0afcb19ec6fb666c040cbc917216ef8fd Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Thu, 6 Jun 2024 15:49:57 +0100 Subject: [PATCH 2/3] fix(coderd/healthcheck/derphealth): do not override parent context deadline --- coderd/healthcheck/derphealth/derp.go | 8 +++-- coderd/healthcheck/derphealth/derp_test.go | 42 ++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/coderd/healthcheck/derphealth/derp.go b/coderd/healthcheck/derphealth/derp.go index 65d905f16917e..f74db243cbc18 100644 --- a/coderd/healthcheck/derphealth/derp.go +++ b/coderd/healthcheck/derphealth/derp.go @@ -236,8 +236,12 @@ func (r *NodeReport) derpURL() *url.URL { } func (r *NodeReport) Run(ctx context.Context) { - ctx, cancel := context.WithTimeout(ctx, 10*time.Second) - defer cancel() + // If there already is a deadline set on the context, do not override it. + if _, ok := ctx.Deadline(); !ok { + dCtx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + ctx = dCtx + } r.Severity = health.SeverityOK r.ClientLogs = [][]string{} diff --git a/coderd/healthcheck/derphealth/derp_test.go b/coderd/healthcheck/derphealth/derp_test.go index 90e5db63c9763..4728aebb0e2da 100644 --- a/coderd/healthcheck/derphealth/derp_test.go +++ b/coderd/healthcheck/derphealth/derp_test.go @@ -8,6 +8,7 @@ import ( "net/http/httptest" "net/url" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -84,6 +85,47 @@ func TestDERP(t *testing.T) { } }) + t.Run("TimeoutCtx", func(t *testing.T) { + t.Parallel() + + derpSrv := derp.NewServer(key.NewNode(), func(format string, args ...any) { t.Logf(format, args...) }) + defer derpSrv.Close() + srv := httptest.NewServer(derphttp.Handler(derpSrv)) + defer srv.Close() + + var ( + // nolint:gocritic // testing a deadline exceeded + ctx, cancel = context.WithTimeout(context.Background(), time.Nanosecond) + report = derphealth.Report{} + derpURL, _ = url.Parse(srv.URL) + opts = &derphealth.ReportOptions{ + DERPMap: &tailcfg.DERPMap{Regions: map[int]*tailcfg.DERPRegion{ + 1: { + EmbeddedRelay: true, + RegionID: 999, + Nodes: []*tailcfg.DERPNode{{ + Name: "1a", + RegionID: 999, + HostName: derpURL.Host, + IPv4: derpURL.Host, + STUNPort: -1, + InsecureForTests: true, + ForceHTTP: true, + }}, + }, + }}, + } + ) + cancel() + + report.Run(ctx, opts) + + assert.False(t, report.Healthy) + if assert.NotNil(t, report.Error) { + assert.Contains(t, context.DeadlineExceeded, *report.Error) + } + }) + t.Run("HealthyWithNodeDegraded", func(t *testing.T) { t.Parallel() From 62ce1c5fd5f6ffb3a96c4ea5bc0fbed4928aec6d Mon Sep 17 00:00:00 2001 From: Cian Johnston Date: Thu, 6 Jun 2024 15:55:18 +0100 Subject: [PATCH 3/3] fixup! fix(coderd/healthcheck/derphealth): do not override parent context deadline --- coderd/healthcheck/derphealth/derp_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/coderd/healthcheck/derphealth/derp_test.go b/coderd/healthcheck/derphealth/derp_test.go index 4728aebb0e2da..c009ea982d620 100644 --- a/coderd/healthcheck/derphealth/derp_test.go +++ b/coderd/healthcheck/derphealth/derp_test.go @@ -121,9 +121,7 @@ func TestDERP(t *testing.T) { report.Run(ctx, opts) assert.False(t, report.Healthy) - if assert.NotNil(t, report.Error) { - assert.Contains(t, context.DeadlineExceeded, *report.Error) - } + assert.Nil(t, report.Error) }) t.Run("HealthyWithNodeDegraded", func(t *testing.T) {