cache: Add concurrent cache test
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 28 Jun 2017 20:44:37 +0000 (22:44 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 28 Jun 2017 20:44:37 +0000 (22:44 +0200)
cache/partitioned_lazy_cache_test.go

index 73f75fe171d359cda2a3593ac60bcb54c677ed37..97c8e09da755423706340e505d1e5291306e2002 100644 (file)
@@ -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()
+}