From b3c8056de24f6090d1fdf41707bc39cc57a9416a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 28 Jun 2017 22:44:37 +0200 Subject: [PATCH] cache: Add concurrent cache test --- cache/partitioned_lazy_cache_test.go | 44 ++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/cache/partitioned_lazy_cache_test.go b/cache/partitioned_lazy_cache_test.go index 73f75fe17..97c8e09da 100644 --- a/cache/partitioned_lazy_cache_test.go +++ b/cache/partitioned_lazy_cache_test.go @@ -15,6 +15,7 @@ package cache import ( "errors" + "sync" "testing" "github.com/stretchr/testify/require" @@ -90,3 +91,46 @@ func TestNewPartitionedLazyCache(t *testing.T) { assert.Error(err) } + +func TestConcurrentPartitionedLazyCache(t *testing.T) { + t.Parallel() + + assert := require.New(t) + + var wg sync.WaitGroup + + p1 := Partition{ + Key: "p1", + Load: func() (map[string]interface{}, error) { + return map[string]interface{}{ + "p1_1": "p1v1", + "p1_2": "p1v2", + "p1_nil": nil, + }, nil + }, + } + + p2 := Partition{ + Key: "p2", + Load: func() (map[string]interface{}, error) { + return map[string]interface{}{ + "p2_1": "p2v1", + "p2_2": "p2v2", + "p2_3": "p2v3", + }, nil + }, + } + + cache := NewPartitionedLazyCache(p1, p2) + + for j := 0; j < 100; j++ { + wg.Add(1) + go func() { + defer wg.Done() + v, err := cache.Get("p1", "p1_1") + assert.NoError(err) + assert.Equal("p1v1", v) + }() + } + wg.Wait() +}