60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
// File Path: monorepo/cloud/maplefile-backend/pkg/distributedmutex/distributedmutex_test.go
|
|
package distributedmutex
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/redis/go-redis/v9"
|
|
)
|
|
|
|
// mockRedisClient implements minimal required methods
|
|
type mockRedisClient struct {
|
|
redis.UniversalClient
|
|
}
|
|
|
|
func (m *mockRedisClient) Get(ctx context.Context, key string) *redis.StringCmd {
|
|
return redis.NewStringCmd(ctx)
|
|
}
|
|
|
|
func (m *mockRedisClient) Set(ctx context.Context, key string, value any, expiration time.Duration) *redis.StatusCmd {
|
|
return redis.NewStatusCmd(ctx)
|
|
}
|
|
|
|
func (m *mockRedisClient) Eval(ctx context.Context, script string, keys []string, args ...any) *redis.Cmd {
|
|
return redis.NewCmd(ctx)
|
|
}
|
|
|
|
func (m *mockRedisClient) EvalSha(ctx context.Context, sha string, keys []string, args ...any) *redis.Cmd {
|
|
return redis.NewCmd(ctx)
|
|
}
|
|
|
|
func (m *mockRedisClient) ScriptExists(ctx context.Context, scripts ...string) *redis.BoolSliceCmd {
|
|
return redis.NewBoolSliceCmd(ctx)
|
|
}
|
|
|
|
func (m *mockRedisClient) ScriptLoad(ctx context.Context, script string) *redis.StringCmd {
|
|
return redis.NewStringCmd(ctx)
|
|
}
|
|
|
|
func TestNewAdapter(t *testing.T) {
|
|
logger, _ := zap.NewDevelopment()
|
|
adapter := NewAdapter(logger, &mockRedisClient{})
|
|
if adapter == nil {
|
|
t.Fatal("expected non-nil adapter")
|
|
}
|
|
}
|
|
|
|
func TestAcquireAndRelease(t *testing.T) {
|
|
ctx := context.Background()
|
|
logger, _ := zap.NewDevelopment()
|
|
adapter := NewAdapter(logger, &mockRedisClient{})
|
|
|
|
adapter.Acquire(ctx, "test-key")
|
|
adapter.Acquiref(ctx, "test-key-%d", 1)
|
|
adapter.Release(ctx, "test-key")
|
|
adapter.Releasef(ctx, "test-key-%d", 1)
|
|
}
|