2016-10-24 09:03:18 +00:00
|
|
|
package memcached
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"path"
|
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/rainycape/memcache"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/xenolf/lego/acme"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
memcachedHosts []string
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
domain = "lego.test"
|
|
|
|
token = "foo"
|
|
|
|
keyAuth = "bar"
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
memcachedHostsStr := os.Getenv("MEMCACHED_HOSTS")
|
|
|
|
if len(memcachedHostsStr) > 0 {
|
|
|
|
memcachedHosts = strings.Split(memcachedHostsStr, ",")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestNewMemcachedProviderEmpty(t *testing.T) {
|
|
|
|
emptyHosts := make([]string, 0)
|
|
|
|
_, err := NewMemcachedProvider(emptyHosts)
|
2018-05-30 17:53:04 +00:00
|
|
|
assert.EqualError(t, err, "no memcached hosts provided")
|
2016-10-24 09:03:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestNewMemcachedProviderValid(t *testing.T) {
|
|
|
|
if len(memcachedHosts) == 0 {
|
|
|
|
t.Skip("Skipping memcached tests")
|
|
|
|
}
|
|
|
|
_, err := NewMemcachedProvider(memcachedHosts)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMemcachedPresentSingleHost(t *testing.T) {
|
|
|
|
if len(memcachedHosts) == 0 {
|
|
|
|
t.Skip("Skipping memcached tests")
|
|
|
|
}
|
|
|
|
p, err := NewMemcachedProvider(memcachedHosts[0:1])
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
challengePath := path.Join("/", acme.HTTP01ChallengePath(token))
|
|
|
|
|
|
|
|
err = p.Present(domain, token, keyAuth)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
mc, err := memcache.New(memcachedHosts[0])
|
|
|
|
assert.NoError(t, err)
|
|
|
|
i, err := mc.Get(challengePath)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, i.Value, []byte(keyAuth))
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMemcachedPresentMultiHost(t *testing.T) {
|
|
|
|
if len(memcachedHosts) <= 1 {
|
|
|
|
t.Skip("Skipping memcached multi-host tests")
|
|
|
|
}
|
|
|
|
p, err := NewMemcachedProvider(memcachedHosts)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
challengePath := path.Join("/", acme.HTTP01ChallengePath(token))
|
|
|
|
|
|
|
|
err = p.Present(domain, token, keyAuth)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
for _, host := range memcachedHosts {
|
|
|
|
mc, err := memcache.New(host)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
i, err := mc.Get(challengePath)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, i.Value, []byte(keyAuth))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMemcachedPresentPartialFailureMultiHost(t *testing.T) {
|
|
|
|
if len(memcachedHosts) == 0 {
|
|
|
|
t.Skip("Skipping memcached tests")
|
|
|
|
}
|
|
|
|
hosts := append(memcachedHosts, "5.5.5.5:11211")
|
|
|
|
p, err := NewMemcachedProvider(hosts)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
|
|
|
|
challengePath := path.Join("/", acme.HTTP01ChallengePath(token))
|
|
|
|
|
|
|
|
err = p.Present(domain, token, keyAuth)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
for _, host := range memcachedHosts {
|
|
|
|
mc, err := memcache.New(host)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
i, err := mc.Get(challengePath)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, i.Value, []byte(keyAuth))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMemcachedCleanup(t *testing.T) {
|
|
|
|
if len(memcachedHosts) == 0 {
|
|
|
|
t.Skip("Skipping memcached tests")
|
|
|
|
}
|
|
|
|
p, err := NewMemcachedProvider(memcachedHosts)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.NoError(t, p.CleanUp(domain, token, keyAuth))
|
|
|
|
}
|