From 69887ecf0fa831cdaeacfe16e555170c20f847f9 Mon Sep 17 00:00:00 2001 From: Michael Weibel Date: Thu, 8 Jan 2026 14:40:04 +0100 Subject: [PATCH 1/2] chore: increase integration test reliability sometimes the first response doesn't actually work since it's in the middle of reconciling. Use polling during 10s every half a second and fail only afterwards. --- pkg/internal/integration/service_test.go | 37 ++++++++++++++++++------ 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/pkg/internal/integration/service_test.go b/pkg/internal/integration/service_test.go index f5b066a..e78bb29 100644 --- a/pkg/internal/integration/service_test.go +++ b/pkg/internal/integration/service_test.go @@ -470,16 +470,35 @@ func (s *IntegrationTestSuite) verifyLBAvailability(name string, start time.Time s.Require().Len(service.Status.LoadBalancer.Ingress, 2) addr := service.Status.LoadBalancer.Ingress[0].IP - response, err := testkit.HelloNginx(addr, 80) - if reachable { - s.Assert().NoError(err, "request failed") - if s.Assert().NotNil(response, "response is empty") { - s.Assert().NotEmpty(response.ServerName) + pollInterval := 500 * time.Millisecond + pollTimeout := 10 * time.Second + + err := wait.PollUntilContextTimeout(s.T().Context(), pollInterval, pollTimeout, true, func(ctx context.Context) (bool, error) { + response, err := testkit.HelloNginx(addr, 80) + + if reachable { + if err != nil { + s.T().Logf("waiting for connectivity: %s", err) + return false, nil + } + if response == nil || response.ServerName == "" { + s.T().Log("waiting for valid response body", "response", response) + return false, nil + } + return true, nil } - } else { - s.Assert().Error(err, "request successful") - s.Assert().Nil(response, "response is empty") - } + + if err == nil { + s.T().Log("waiting for service to be unreachable, but got no error") + return false, nil + } + if response != nil { + s.T().Log("waiting for service to be unreachable, but got a response") + return false, nil + } + return true, nil + }) + s.Assert().NoError(err, "polling failed") // we expect no warnings. Errors can happen for a short time when setting to 0 nodes reachable. s.T().Log("Checking log output for errors/warnings") From 08b6e10b62484c7b5c64d58b2d5bd7ce41ef6ea1 Mon Sep 17 00:00:00 2001 From: Michael Weibel Date: Thu, 8 Jan 2026 14:41:08 +0100 Subject: [PATCH 2/2] chore: small cleanups - venv in gitignore since we use venv for releases - TestMain is unneeeded - alias is unused --- .gitignore | 1 + pkg/internal/integration/main_test.go | 7 +------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index a668696..60d023b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ cover.out k8test bin/ image.tar +venv/ \ No newline at end of file diff --git a/pkg/internal/integration/main_test.go b/pkg/internal/integration/main_test.go index 18e45ae..8fecef0 100644 --- a/pkg/internal/integration/main_test.go +++ b/pkg/internal/integration/main_test.go @@ -12,7 +12,7 @@ import ( "testing" "time" - cloudscale "github.com/cloudscale-ch/cloudscale-go-sdk/v6" + "github.com/cloudscale-ch/cloudscale-go-sdk/v6" "github.com/stretchr/testify/suite" "golang.org/x/oauth2" v1 "k8s.io/api/core/v1" @@ -23,11 +23,6 @@ import ( "k8s.io/client-go/tools/clientcmd" ) -func TestMain(m *testing.M) { - exitStatus := m.Run() - os.Exit(exitStatus) -} - func TestIntegration(t *testing.T) { suite.Run(t, new(IntegrationTestSuite)) }