From 8f26f199508ddd2968c12d068e3a615b925b48e9 Mon Sep 17 00:00:00 2001 From: Marc Boudreau Date: Tue, 2 Jul 2024 10:47:32 -0400 Subject: [PATCH] add retry logic in ldap.PrepareTestContainer (#27617) --- helper/testhelpers/ldap/ldaphelper.go | 56 ++++++++++++++++----------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/helper/testhelpers/ldap/ldaphelper.go b/helper/testhelpers/ldap/ldaphelper.go index 0663e3b2dd..fa6cf9ff99 100644 --- a/helper/testhelpers/ldap/ldaphelper.go +++ b/helper/testhelpers/ldap/ldaphelper.go @@ -49,35 +49,47 @@ func PrepareTestContainer(t *testing.T, version string) (cleanup func(), cfg *ld cfg.RequestTimeout = 60 cfg.MaximumPageSize = 1000 - svc, err := runner.StartService(context.Background(), func(ctx context.Context, host string, port int) (docker.ServiceConfig, error) { - connURL := fmt.Sprintf("ldap://%s:%d", host, port) - cfg.Url = connURL + var started bool - client, err := ldap.NewClient(ctx, ldaputil.ConvertConfig(cfg)) + for i := 0; i < 3; i++ { + svc, err := runner.StartService(context.Background(), func(ctx context.Context, host string, port int) (docker.ServiceConfig, error) { + connURL := fmt.Sprintf("ldap://%s:%d", host, port) + cfg.Url = connURL + + client, err := ldap.NewClient(ctx, ldaputil.ConvertConfig(cfg)) + if err != nil { + return nil, err + } + + defer client.Close(ctx) + + _, err = client.Authenticate(ctx, "Philip J. Fry", "fry") + if err != nil { + return nil, err + } + + return docker.NewServiceURLParse(connURL) + }) if err != nil { - return nil, err + t.Logf("could not start local LDAP docker container: %s", err) + t.Log("Docker container logs: ") + t.Log(logsWriter.String()) + continue } - defer client.Close(ctx) - - _, err = client.Authenticate(ctx, "Philip J. Fry", "fry") - if err != nil { - return nil, err + started = true + cleanup = func() { + if t.Failed() { + t.Log(logsWriter.String()) + } + svc.Cleanup() } + break + } - return docker.NewServiceURLParse(connURL) - }) - if err != nil { - t.Logf("could not start local LDAP docker container: %s", err) - t.Log("Docker container logs: ") - t.Log(logsWriter.String()) + if !started { t.FailNow() } - return func() { - if t.Failed() { - t.Log(logsWriter.String()) - } - svc.Cleanup() - }, cfg + return cleanup, cfg }