shithub: hugo

Download patch

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()
 }