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  }