From 757802bd2659e8437871453357361cca98c58200 Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Wed, 28 Jan 2026 19:52:34 +0100 Subject: [PATCH] tests: refactor memcached tests --- providers/http/memcached/README.md | 16 +++++++++++++++- providers/http/memcached/memcached.go | 6 +++++- providers/http/memcached/memcached_test.go | 15 ++++++++++++--- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/providers/http/memcached/README.md b/providers/http/memcached/README.md index f14d216df..6ebd4000a 100644 --- a/providers/http/memcached/README.md +++ b/providers/http/memcached/README.md @@ -1,4 +1,4 @@ -# Memcached http provider +# Memcached HTTP provider Publishes challenges into memcached where they can be retrieved by nginx. Allows specifying multiple memcached servers and the responses will be published to all @@ -13,3 +13,17 @@ Example nginx config: memcached_pass 127.0.0.1:11211; } ``` + +## Local Development + +```bash +docker run -d --rm -p 11211:11211 memcached:alpine +``` + +```bash +MEMCACHED_HOSTS=localhost:11211 +``` + +```go + os.Setenv("MEMCACHED_HOSTS", "localhost:11211") +``` diff --git a/providers/http/memcached/memcached.go b/providers/http/memcached/memcached.go index 2d0378416..d0a6d47c9 100644 --- a/providers/http/memcached/memcached.go +++ b/providers/http/memcached/memcached.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "path" + "time" "github.com/bradfitz/gomemcache/memcache" "github.com/go-acme/lego/v5/challenge/http01" @@ -34,6 +35,9 @@ func (w *HTTPProvider) Present(_ context.Context, _, token, keyAuth string) erro for _, host := range w.hosts { mc := memcache.New(host) + // Only because this is slow on GitHub action. + mc.Timeout = 1 * time.Second + item := &memcache.Item{ Key: challengePath, Value: []byte(keyAuth), @@ -48,7 +52,7 @@ func (w *HTTPProvider) Present(_ context.Context, _, token, keyAuth string) erro } if len(errs) == len(w.hosts) { - return fmt.Errorf("unable to store key in any of the memcache hosts: %w", errors.Join(errs...)) + return fmt.Errorf("unable to store key in any of the memcached hosts: %w", errors.Join(errs...)) } return nil diff --git a/providers/http/memcached/memcached_test.go b/providers/http/memcached/memcached_test.go index 4e1e28c15..4f7cc8b5b 100644 --- a/providers/http/memcached/memcached_test.go +++ b/providers/http/memcached/memcached_test.go @@ -18,10 +18,9 @@ const ( keyAuth = "bar" ) -var memcachedHosts = loadMemcachedHosts() - -func loadMemcachedHosts() []string { +func getMemcachedHosts() []string { memcachedHostsStr := os.Getenv("MEMCACHED_HOSTS") + if memcachedHostsStr != "" { return strings.Split(memcachedHostsStr, ",") } @@ -36,6 +35,8 @@ func TestNewMemcachedProviderEmpty(t *testing.T) { } func TestNewMemcachedProviderValid(t *testing.T) { + memcachedHosts := getMemcachedHosts() + if len(memcachedHosts) == 0 { t.Skip("Skipping memcached tests") } @@ -45,6 +46,8 @@ func TestNewMemcachedProviderValid(t *testing.T) { } func TestMemcachedPresentSingleHost(t *testing.T) { + memcachedHosts := getMemcachedHosts() + if len(memcachedHosts) == 0 { t.Skip("Skipping memcached tests") } @@ -65,6 +68,8 @@ func TestMemcachedPresentSingleHost(t *testing.T) { } func TestMemcachedPresentMultiHost(t *testing.T) { + memcachedHosts := getMemcachedHosts() + if len(memcachedHosts) <= 1 { t.Skip("Skipping memcached multi-host tests") } @@ -87,6 +92,8 @@ func TestMemcachedPresentMultiHost(t *testing.T) { } func TestMemcachedPresentPartialFailureMultiHost(t *testing.T) { + memcachedHosts := getMemcachedHosts() + if len(memcachedHosts) == 0 { t.Skip("Skipping memcached tests") } @@ -110,6 +117,8 @@ func TestMemcachedPresentPartialFailureMultiHost(t *testing.T) { } func TestMemcachedCleanup(t *testing.T) { + memcachedHosts := getMemcachedHosts() + if len(memcachedHosts) == 0 { t.Skip("Skipping memcached tests") }