Files
zeekay a89a8cf648 Reach our own key store instead of redis
The cache, the session revocation fanout and the git-ref lock all move onto
hanzokv, which speaks the same protocol and carries the pub/sub the fanout
needs — so nothing had to be dropped or redesigned.
2026-09-04 14:05:33 -07:00

78 lines
2.3 KiB
Go
Generated

package mocks
import (
"testing"
"time"
"github.com/alicebob/miniredis/v2"
"github.com/hanzokv/go/v9"
"github.com/stretchr/testify/mock"
cacheutil "github.com/hanzoai/cd/util/cache"
cacheutilmocks "github.com/hanzoai/cd/util/cache/mocks"
)
type MockCacheType int
const (
MockCacheTypeRedis MockCacheType = iota
MockCacheTypeInMem
)
type MockRepoCache struct {
mock.Mock
RedisClient *cacheutilmocks.MockCacheClient
StopRedisCallback func()
}
type MockCacheOptions struct {
RepoCacheExpiration time.Duration
RevisionCacheExpiration time.Duration
ReadDelay time.Duration
WriteDelay time.Duration
}
type CacheCallCounts struct {
ExternalSets int
ExternalGets int
ExternalDeletes int
ExternalRenames int
}
// Checks that the cache was called the expected number of times
func (mockCache *MockRepoCache) AssertCacheCalledTimes(t *testing.T, calls *CacheCallCounts) {
t.Helper()
mockCache.RedisClient.AssertNumberOfCalls(t, "Get", calls.ExternalGets)
mockCache.RedisClient.AssertNumberOfCalls(t, "Set", calls.ExternalSets)
mockCache.RedisClient.AssertNumberOfCalls(t, "Delete", calls.ExternalDeletes)
mockCache.RedisClient.AssertNumberOfCalls(t, "Rename", calls.ExternalRenames)
}
func (mockCache *MockRepoCache) ConfigureDefaultCallbacks() {
mockCache.RedisClient.On("Get", mock.Anything, mock.Anything).Return(nil)
mockCache.RedisClient.On("Set", mock.Anything).Return(nil)
mockCache.RedisClient.On("Delete", mock.Anything).Return(nil)
mockCache.RedisClient.On("Rename", mock.Anything, mock.Anything, mock.Anything).Return(nil)
}
func NewInMemoryRedis() (*kv.Client, func()) {
cacheutil.NewInMemoryCache(5 * time.Second)
mr, err := miniredis.Run()
if err != nil {
panic(err)
}
return kv.NewClient(&kv.Options{Addr: mr.Addr()}), mr.Close
}
func NewMockRepoCache(cacheOpts *MockCacheOptions) *MockRepoCache {
redisClient, stopRedis := NewInMemoryRedis()
redisCacheClient := &cacheutilmocks.MockCacheClient{
ReadDelay: cacheOpts.ReadDelay,
WriteDelay: cacheOpts.WriteDelay,
BaseCache: cacheutil.NewRedisCache(redisClient, cacheOpts.RepoCacheExpiration, cacheutil.RedisCompressionNone),
}
newMockCache := &MockRepoCache{RedisClient: redisCacheClient, StopRedisCallback: stopRedis}
newMockCache.ConfigureDefaultCallbacks()
return newMockCache
}