mirror of
https://github.com/halejohn/Cloudreve.git
synced 2026-01-27 01:51:56 +08:00
Test: get source URL of files
This commit is contained in:
7
pkg/cache/driver.go
vendored
7
pkg/cache/driver.go
vendored
@@ -33,6 +33,8 @@ type Driver interface {
|
||||
Gets(keys []string, prefix string) (map[string]interface{}, []string)
|
||||
// 批量设置值
|
||||
Sets(values map[string]interface{}, prefix string) error
|
||||
// 删除值
|
||||
Delete(keys []string, prefix string) error
|
||||
}
|
||||
|
||||
// Set 设置缓存值
|
||||
@@ -45,6 +47,11 @@ func Get(key string) (interface{}, bool) {
|
||||
return Store.Get(key)
|
||||
}
|
||||
|
||||
// Deletes 删除值
|
||||
func Deletes(keys []string, prefix string) error {
|
||||
return Store.Delete(keys, prefix)
|
||||
}
|
||||
|
||||
// GetSettings 根据名称批量获取设置项缓存
|
||||
func GetSettings(keys []string, prefix string) (map[string]string, []string) {
|
||||
raw, miss := Store.Gets(keys, prefix)
|
||||
|
||||
8
pkg/cache/memo.go
vendored
8
pkg/cache/memo.go
vendored
@@ -48,3 +48,11 @@ func (store *MemoStore) Sets(values map[string]interface{}, prefix string) error
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete 批量删除值
|
||||
func (store *MemoStore) Delete(keys []string, prefix string) error {
|
||||
for _, key := range keys {
|
||||
store.Store.Delete(prefix + key)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
19
pkg/cache/memo_test.go
vendored
19
pkg/cache/memo_test.go
vendored
@@ -106,3 +106,22 @@ func TestMemoStore_Sets(t *testing.T) {
|
||||
"4": "4.val",
|
||||
}, vals)
|
||||
}
|
||||
|
||||
func TestMemoStore_Delete(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
store := NewMemoStore()
|
||||
|
||||
err := store.Sets(map[string]interface{}{
|
||||
"1": "1.val",
|
||||
"2": "2.val",
|
||||
"3": "3.val",
|
||||
"4": "4.val",
|
||||
}, "test_")
|
||||
asserts.NoError(err)
|
||||
|
||||
err = store.Delete([]string{"1", "2"}, "test_")
|
||||
asserts.NoError(err)
|
||||
values, miss := store.Gets([]string{"1", "2", "3", "4"}, "test_")
|
||||
asserts.Equal([]string{"1", "2"}, miss)
|
||||
asserts.Equal(map[string]interface{}{"3": "3.val", "4": "4.val"}, values)
|
||||
}
|
||||
|
||||
31
pkg/cache/redis.go
vendored
31
pkg/cache/redis.go
vendored
@@ -169,13 +169,30 @@ func (store *RedisStore) Sets(values map[string]interface{}, prefix string) erro
|
||||
setValues[prefix+key] = serialized
|
||||
}
|
||||
|
||||
if rc.Err() == nil {
|
||||
_, err := rc.Do("MSET", redis.Args{}.AddFlat(setValues)...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
_, err := rc.Do("MSET", redis.Args{}.AddFlat(setValues)...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
// Delete 批量删除给定的键
|
||||
func (store *RedisStore) Delete(keys []string, prefix string) error {
|
||||
rc := store.pool.Get()
|
||||
defer rc.Close()
|
||||
if rc.Err() != nil {
|
||||
return rc.Err()
|
||||
}
|
||||
|
||||
return rc.Err()
|
||||
// 处理前缀
|
||||
for i := 0; i < len(keys); i++ {
|
||||
keys[i] = prefix + keys[i]
|
||||
}
|
||||
|
||||
_, err := rc.Do("DEL", redis.Args{}.AddFlat(keys)...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
44
pkg/cache/redis_test.go
vendored
44
pkg/cache/redis_test.go
vendored
@@ -266,3 +266,47 @@ func TestRedisStore_Sets(t *testing.T) {
|
||||
asserts.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRedisStore_Delete(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
conn := redigomock.NewConn()
|
||||
pool := &redis.Pool{
|
||||
Dial: func() (redis.Conn, error) { return conn, nil },
|
||||
MaxIdle: 10,
|
||||
}
|
||||
store := &RedisStore{pool: pool}
|
||||
|
||||
// 正常
|
||||
{
|
||||
cmd := conn.Command("DEL", redigomock.NewAnyData(), redigomock.NewAnyData(), redigomock.NewAnyData(), redigomock.NewAnyData()).ExpectSlice("OK")
|
||||
err := store.Delete([]string{"1", "2", "3", "4"}, "test_")
|
||||
asserts.NoError(err)
|
||||
if conn.Stats(cmd) != 1 {
|
||||
fmt.Println("Command was not used")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 命令执行失败
|
||||
{
|
||||
conn.Clear()
|
||||
cmd := conn.Command("DEL", redigomock.NewAnyData(), redigomock.NewAnyData(), redigomock.NewAnyData(), redigomock.NewAnyData()).ExpectError(errors.New("error"))
|
||||
err := store.Delete([]string{"1", "2", "3", "4"}, "test_")
|
||||
asserts.Error(err)
|
||||
if conn.Stats(cmd) != 1 {
|
||||
fmt.Println("Command was not used")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 连接失败
|
||||
{
|
||||
conn.Clear()
|
||||
store.pool = &redis.Pool{
|
||||
Dial: func() (redis.Conn, error) { return nil, errors.New("error") },
|
||||
MaxIdle: 10,
|
||||
}
|
||||
err := store.Delete([]string{"1", "2", "3", "4"}, "test_")
|
||||
asserts.Error(err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user