Files
sablier/pkg/store/inmemory/inmemory_test.go
Alexis Couvreur f29b13a55a refactor(storage): add store.Store interface
There is a first implementation with ValKey that will allow to use redis APIs as a backend for Sablier with Hight Availability
2025-02-02 18:13:45 -05:00

75 lines
1.7 KiB
Go

package inmemory
import (
"context"
"github.com/sablierapp/sablier/app/instance"
"github.com/sablierapp/sablier/pkg/store"
"gotest.tools/v3/assert"
"testing"
"time"
)
func TestInMemory(t *testing.T) {
t.Parallel()
t.Run("InMemoryErrNotFound", func(t *testing.T) {
t.Parallel()
ctx := context.Background()
vk := NewInMemory()
_, err := vk.Get(ctx, "test")
assert.ErrorIs(t, err, store.ErrKeyNotFound)
})
t.Run("InMemoryPut", func(t *testing.T) {
t.Parallel()
ctx := context.Background()
vk := NewInMemory()
err := vk.Put(ctx, instance.State{Name: "test"}, 1*time.Second)
assert.NilError(t, err)
i, err := vk.Get(ctx, "test")
assert.NilError(t, err)
assert.Equal(t, i.Name, "test")
<-time.After(2 * time.Second)
_, err = vk.Get(ctx, "test")
assert.ErrorIs(t, err, store.ErrKeyNotFound)
})
t.Run("InMemoryDelete", func(t *testing.T) {
t.Parallel()
ctx := context.Background()
vk := NewInMemory()
err := vk.Put(ctx, instance.State{Name: "test"}, 30*time.Second)
assert.NilError(t, err)
i, err := vk.Get(ctx, "test")
assert.NilError(t, err)
assert.Equal(t, i.Name, "test")
err = vk.Delete(ctx, "test")
assert.NilError(t, err)
_, err = vk.Get(ctx, "test")
assert.ErrorIs(t, err, store.ErrKeyNotFound)
})
t.Run("InMemoryOnExpire", func(t *testing.T) {
t.Parallel()
vk := NewInMemory()
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
expirations := make(chan string)
err := vk.OnExpire(ctx, func(key string) {
expirations <- key
})
assert.NilError(t, err)
err = vk.Put(ctx, instance.State{Name: "test"}, 1*time.Second)
assert.NilError(t, err)
expired := <-expirations
assert.Equal(t, expired, "test")
})
}