完善 cache 相关内容

This commit is contained in:
dragon
2025-01-02 17:19:16 +08:00
parent bf46501a10
commit 6fcf929331
5 changed files with 150 additions and 61 deletions

View File

@@ -0,0 +1,69 @@
package services
import (
"fmt"
"github.com/stretchr/testify/require"
"io"
"os"
"strings"
"testing"
)
func TestCacheGetPutDelete(t *testing.T) {
memory := NewCacheMemory(1024, 10240)
require.NoError(t, memory.Put("hello", strings.NewReader("world")))
value, err := memory.Get("hello")
require.NoError(t, err)
all, err := io.ReadAll(value)
require.NoError(t, err)
require.Equal(t, "world", string(all))
require.Equal(t, 5, memory.current)
require.NoError(t, memory.Put("hello", strings.NewReader("kotlin")))
value, err = memory.Get("hello")
require.NoError(t, err)
all, err = io.ReadAll(value)
require.NoError(t, err)
require.Equal(t, "kotlin", string(all))
require.Equal(t, 6, memory.current)
require.Equal(t, 1, len(memory.data))
require.NoError(t, memory.Put("data", strings.NewReader("kotlin")))
require.Equal(t, 12, memory.current)
require.Equal(t, 2, len(memory.data))
require.Equal(t, 2, len(memory.ordered))
require.NoError(t, memory.Delete("hello"))
value, err = memory.Get("hello")
require.Error(t, err)
require.Equal(t, 1, len(memory.data))
require.Equal(t, 1, len(memory.ordered))
}
func TestCacheLimit(t *testing.T) {
memory := NewCacheMemory(5, 5*5)
require.NoError(t, memory.Put("hello", strings.NewReader("world")))
require.Equal(t, 5, memory.current)
require.ErrorIs(t, memory.Put("hello", strings.NewReader("world1")), ErrCacheOutOfMemory)
require.Equal(t, 5, memory.current)
for i := 0; i < 4; i++ {
require.NoError(t, memory.Put(fmt.Sprintf("hello-%d", i), strings.NewReader("govet")))
}
value, err := memory.Get("hello")
require.NoError(t, err)
all, err := io.ReadAll(value)
require.NoError(t, err)
require.Equal(t, "world", string(all))
require.NoError(t, memory.Put("test", strings.NewReader("govet")))
value, err = memory.Get("hello")
require.ErrorIs(t, err, os.ErrNotExist)
require.Equal(t, 5, len(memory.data))
require.Equal(t, 5, len(memory.ordered))
}