mukan-ignite/ignite/pkg/cache/cache_test.go
Mukan Erkin Törük 26b204bd04
Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
feat: fork Ignite CLI v29 as Mukan Ignite — remove cosmos-sdk restrictions
2026-05-11 03:31:37 +03:00

205 lines
5.1 KiB
Go

package cache_test
import (
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
"github.com/ignite/cli/v29/ignite/pkg/cache"
)
type TestStruct struct {
Num int
}
func TestCreateStorage(t *testing.T) {
cases := []struct {
name string
options []cache.StorageOption
}{
{
name: "simple",
},
{
name: "versioned",
options: []cache.StorageOption{
cache.WithVersion("v0.1.0"),
},
},
}
for _, tt := range cases {
t.Run(tt.name, func(t *testing.T) {
_, err := cache.NewStorage(filepath.Join(t.TempDir(), "cache.db"), tt.options...)
require.NoError(t, err)
})
}
}
func TestStoreWithVersion(t *testing.T) {
path := filepath.Join(t.TempDir(), "cache.db")
storage, err := cache.NewStorage(path, cache.WithVersion("v0.1.0"))
require.NoError(t, err)
nsCache := cache.New[string](storage, "cacheNS")
err = nsCache.Put("myKey", "myValue")
require.NoError(t, err)
v, err := nsCache.Get("myKey")
require.NoError(t, err)
require.Equal(t, "myValue", v)
// Create a non versioned storage with the same file path
storage, err = cache.NewStorage(path)
require.NoError(t, err)
nsCache = cache.New[string](storage, "cacheNS")
_, err = nsCache.Get("myKey")
require.ErrorIs(t, err, cache.ErrorNotFound)
}
func TestStoreString(t *testing.T) {
tmpDir := t.TempDir()
cacheStorage, err := cache.NewStorage(filepath.Join(tmpDir, "testdbfile.db"))
require.NoError(t, err)
strNamespace := cache.New[string](cacheStorage, "myNameSpace")
err = strNamespace.Put("myKey", "myValue")
require.NoError(t, err)
val, err := strNamespace.Get("myKey")
require.NoError(t, err)
require.Equal(t, "myValue", val)
strNamespaceAgain := cache.New[string](cacheStorage, "myNameSpace")
valAgain, err := strNamespaceAgain.Get("myKey")
require.NoError(t, err)
require.Equal(t, "myValue", valAgain)
}
func TestStoreObjects(t *testing.T) {
tmpDir := t.TempDir()
cacheStorage, err := cache.NewStorage(filepath.Join(tmpDir, "testdbfile.db"))
require.NoError(t, err)
structCache := cache.New[TestStruct](cacheStorage, "mySimpleNamespace")
err = structCache.Put("myKey", TestStruct{
Num: 42,
})
require.NoError(t, err)
val, err := structCache.Get("myKey")
require.NoError(t, err)
require.Equal(t, val, TestStruct{
Num: 42,
})
arrayNamespace := cache.New[[]TestStruct](cacheStorage, "myArrayNamespace")
err = arrayNamespace.Put("myKey", []TestStruct{
{
Num: 42,
},
{
Num: 420,
},
})
require.NoError(t, err)
val2, err := arrayNamespace.Get("myKey")
require.NoError(t, err)
require.Equal(t, 2, len(val2))
require.Equal(t, 42, (val2)[0].Num)
require.Equal(t, 420, (val2)[1].Num)
empty, err := arrayNamespace.Get("doesNotExists")
require.Equal(t, cache.ErrorNotFound, err)
require.Nil(t, empty)
}
func TestConflicts(t *testing.T) {
tmpDir := t.TempDir()
tmpDir2 := t.TempDir()
cacheStorage1, err := cache.NewStorage(filepath.Join(tmpDir, "testdbfile.db"))
require.NoError(t, err)
cacheStorage2, err := cache.NewStorage(filepath.Join(tmpDir2, "testdbfile.db"))
require.NoError(t, err)
sameStorageDifferentNamespaceCache1 := cache.New[int](cacheStorage1, "ns1")
sameStorageDifferentNamespaceCache2 := cache.New[int](cacheStorage1, "ns2")
differentStorageSameNamespace := cache.New[int](cacheStorage2, "ns1")
// Put values in caches
err = sameStorageDifferentNamespaceCache1.Put("myKey", 41)
require.NoError(t, err)
err = sameStorageDifferentNamespaceCache2.Put("myKey", 1337)
require.NoError(t, err)
err = differentStorageSameNamespace.Put("myKey", 9001)
require.NoError(t, err)
// Overwrite a value
err = sameStorageDifferentNamespaceCache1.Put("myKey", 42)
require.NoError(t, err)
// Check that everything comes back as expected
val1, err := sameStorageDifferentNamespaceCache1.Get("myKey")
require.NoError(t, err)
require.Equal(t, 42, val1)
val2, err := sameStorageDifferentNamespaceCache2.Get("myKey")
require.NoError(t, err)
require.Equal(t, 1337, val2)
val3, err := differentStorageSameNamespace.Get("myKey")
require.NoError(t, err)
require.Equal(t, 9001, val3)
}
func TestDeleteKey(t *testing.T) {
tmpDir := t.TempDir()
cacheStorage, err := cache.NewStorage(filepath.Join(tmpDir, "testdbfile.db"))
require.NoError(t, err)
strNamespace := cache.New[string](cacheStorage, "myNameSpace")
err = strNamespace.Put("myKey", "someValue")
require.NoError(t, err)
err = strNamespace.Delete("myKey")
require.NoError(t, err)
_, err = strNamespace.Get("myKey")
require.Equal(t, cache.ErrorNotFound, err)
}
func TestClearStorage(t *testing.T) {
tmpDir := t.TempDir()
cacheStorage, err := cache.NewStorage(filepath.Join(tmpDir, "testdbfile.db"))
require.NoError(t, err)
strNamespace := cache.New[string](cacheStorage, "myNameSpace")
err = strNamespace.Put("myKey", "myValue")
require.NoError(t, err)
err = cacheStorage.Clear()
require.NoError(t, err)
_, err = strNamespace.Get("myKey")
require.Equal(t, cache.ErrorNotFound, err)
}
func TestKey(t *testing.T) {
singleKey := cache.Key("test1")
require.Equal(t, "test1", singleKey)
multiKey := cache.Key("test1", "test2", "test3")
require.Equal(t, "test1test2test3", multiKey)
}