ref: b3c8056de24f6090d1fdf41707bc39cc57a9416a
parent: fe132e1c3e883f0100824eafa097cdd28d0fc441
author: Bjørn Erik Pedersen <[email protected]>
date: Wed Jun 28 18:44:37 EDT 2017
cache: Add concurrent cache test
--- a/cache/partitioned_lazy_cache_test.go
+++ b/cache/partitioned_lazy_cache_test.go
@@ -15,6 +15,7 @@
import (
"errors"
+ "sync"
"testing"
"github.com/stretchr/testify/require"
@@ -89,4 +90,47 @@
_, err = cache.Get("p3", "doesnotexist")
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()
}