github.com/sequix/cortex@v1.1.6/pkg/chunk/cache/memcached_client_selector_test.go (about) 1 package cache_test 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/bradfitz/gomemcache/memcache" 8 "github.com/sequix/cortex/pkg/chunk/cache" 9 "github.com/facette/natsort" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestNatSort(t *testing.T) { 14 // Validate that the order of SRV records returned by a DNS 15 // lookup for a k8s StatefulSet are ordered as expected when 16 // a natsort is done. 17 input := []string{ 18 "memcached-10.memcached.cortex.svc.cluster.local.", 19 "memcached-1.memcached.cortex.svc.cluster.local.", 20 "memcached-6.memcached.cortex.svc.cluster.local.", 21 "memcached-3.memcached.cortex.svc.cluster.local.", 22 "memcached-25.memcached.cortex.svc.cluster.local.", 23 } 24 25 expected := []string{ 26 "memcached-1.memcached.cortex.svc.cluster.local.", 27 "memcached-3.memcached.cortex.svc.cluster.local.", 28 "memcached-6.memcached.cortex.svc.cluster.local.", 29 "memcached-10.memcached.cortex.svc.cluster.local.", 30 "memcached-25.memcached.cortex.svc.cluster.local.", 31 } 32 33 natsort.Sort(input) 34 require.Equal(t, expected, input) 35 } 36 37 func TestMemcachedJumpHashSelector_PickSever(t *testing.T) { 38 s := cache.MemcachedJumpHashSelector{} 39 err := s.SetServers("google.com:80", "microsoft.com:80", "duckduckgo.com:80") 40 require.NoError(t, err) 41 42 // We store the string representation instead of the net.Addr 43 // to make sure different IPs were discovered during SetServers 44 distribution := make(map[string]int) 45 46 for i := 0; i < 100; i++ { 47 key := fmt.Sprintf("key-%d", i) 48 addr, err := s.PickServer(key) 49 require.NoError(t, err) 50 distribution[addr.String()]++ 51 } 52 53 // All of the servers should have been returned at least 54 // once 55 require.Len(t, distribution, 3) 56 for _, v := range distribution { 57 require.NotZero(t, v) 58 } 59 } 60 61 func TestMemcachedJumpHashSelector_PickSever_ErrNoServers(t *testing.T) { 62 s := cache.MemcachedJumpHashSelector{} 63 _, err := s.PickServer("foo") 64 require.Error(t, memcache.ErrNoServers, err) 65 }