mirror of
https://github.com/mxpv/podsync.git
synced 2024-05-11 05:55:04 +00:00
Cleanup unused packages
This commit is contained in:
117
pkg/cache/redis.go
vendored
117
pkg/cache/redis.go
vendored
@@ -1,117 +0,0 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/go-redis/redis"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/vmihailenco/msgpack"
|
||||
)
|
||||
|
||||
var ErrNotFound = errors.New("not found")
|
||||
|
||||
// RedisCache implements caching layer for feeds using Redis
|
||||
//
|
||||
// Inside docker can be connected as:
|
||||
// docker exec -it redis redis-cli
|
||||
// View available keys:
|
||||
// 127.0.0.1:6379> keys *
|
||||
//
|
||||
type RedisCache struct {
|
||||
client *redis.Client
|
||||
}
|
||||
|
||||
func NewRedisCache(redisURL string) (RedisCache, error) {
|
||||
opts, err := redis.ParseURL(redisURL)
|
||||
if err != nil {
|
||||
return RedisCache{}, err
|
||||
}
|
||||
|
||||
client := redis.NewClient(opts)
|
||||
if err := client.Ping().Err(); err != nil {
|
||||
return RedisCache{}, err
|
||||
}
|
||||
|
||||
return RedisCache{client: client}, nil
|
||||
}
|
||||
|
||||
func (c RedisCache) Set(key, value string, ttl time.Duration) error {
|
||||
return c.client.Set(key, value, ttl).Err()
|
||||
}
|
||||
|
||||
func (c RedisCache) Get(key string) (string, error) {
|
||||
val, err := c.client.Get(key).Result()
|
||||
if err == redis.Nil {
|
||||
return "", ErrNotFound
|
||||
} else {
|
||||
return val, err
|
||||
}
|
||||
}
|
||||
|
||||
func (c RedisCache) SaveItem(key string, item interface{}, exp time.Duration) error {
|
||||
data, err := msgpack.Marshal(item)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.client.Set(key, data, exp).Err()
|
||||
}
|
||||
|
||||
func (c RedisCache) GetItem(key string, item interface{}) error {
|
||||
data, err := c.client.Get(key).Bytes()
|
||||
if err == redis.Nil {
|
||||
return ErrNotFound
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := msgpack.Unmarshal(data, item); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c RedisCache) SetMap(key string, fields map[string]interface{}, exp time.Duration) error {
|
||||
if err := c.client.HMSet(key, fields).Err(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := c.client.TTL(key).Err(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c RedisCache) GetMap(key string, fields ...string) (map[string]string, error) {
|
||||
result, err := c.client.HMGet(key, fields...).Result()
|
||||
if err == redis.Nil {
|
||||
return nil, ErrNotFound
|
||||
} else if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
data := map[string]string{}
|
||||
for idx, key := range fields {
|
||||
if result[idx] == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
data[key] = result[idx].(string)
|
||||
}
|
||||
|
||||
if len(data) == 0 {
|
||||
return nil, ErrNotFound
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (c RedisCache) Invalidate(key... string) error {
|
||||
return c.client.Del(key...).Err()
|
||||
}
|
||||
|
||||
func (c RedisCache) Close() error {
|
||||
return c.client.Close()
|
||||
}
|
||||
119
pkg/cache/redis_test.go
vendored
119
pkg/cache/redis_test.go
vendored
@@ -1,119 +0,0 @@
|
||||
package cache
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/mxpv/podsync/pkg/model"
|
||||
)
|
||||
|
||||
func TestRedisCache_Get(t *testing.T) {
|
||||
s := createRedisClient(t)
|
||||
defer s.Close()
|
||||
|
||||
err := s.Set("1", "value", 1*time.Minute)
|
||||
assert.NoError(t, err)
|
||||
|
||||
val, err := s.Get("1")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "value", val)
|
||||
}
|
||||
|
||||
func TestRedisCache_GetInvalidKey(t *testing.T) {
|
||||
s := createRedisClient(t)
|
||||
defer s.Close()
|
||||
|
||||
val, err := s.Get("1")
|
||||
assert.Equal(t, ErrNotFound, err)
|
||||
assert.Empty(t, val)
|
||||
}
|
||||
|
||||
func TestNewRedisCache_TTL(t *testing.T) {
|
||||
s := createRedisClient(t)
|
||||
defer s.Close()
|
||||
|
||||
err := s.Set("1", "value", 500*time.Millisecond)
|
||||
assert.NoError(t, err)
|
||||
|
||||
val, err := s.Get("1")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "value", val)
|
||||
|
||||
time.Sleep(501 * time.Millisecond)
|
||||
|
||||
_, err = s.Get("1")
|
||||
assert.Equal(t, ErrNotFound, err)
|
||||
}
|
||||
|
||||
func TestRedisCache_SaveItem(t *testing.T) {
|
||||
type test struct {
|
||||
Feed []byte `msgpack:"feed"`
|
||||
UpdatedAt model.Timestamp `msgpack:"updated_at"`
|
||||
}
|
||||
|
||||
s := createRedisClient(t)
|
||||
defer s.Close()
|
||||
|
||||
item := &test{
|
||||
Feed: []byte("123"),
|
||||
UpdatedAt: model.Timestamp(time.Now().UTC()),
|
||||
}
|
||||
|
||||
err := s.SaveItem("test", item, time.Minute)
|
||||
assert.NoError(t, err)
|
||||
|
||||
var out test
|
||||
err = s.GetItem("test", &out)
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.EqualValues(t, item.Feed, out.Feed)
|
||||
assert.EqualValues(t, time.Time(item.UpdatedAt).Unix(), time.Time(out.UpdatedAt).Unix())
|
||||
}
|
||||
|
||||
func TestRedisCache_Map(t *testing.T) {
|
||||
s := createRedisClient(t)
|
||||
defer s.Close()
|
||||
|
||||
data := map[string]interface{}{
|
||||
"1": "123",
|
||||
"2": "test",
|
||||
}
|
||||
|
||||
err := s.SetMap("2", data, time.Minute)
|
||||
assert.NoError(t, err)
|
||||
|
||||
out, err := s.GetMap("2", "1", "2")
|
||||
assert.NoError(t, err)
|
||||
assert.EqualValues(t, data, out)
|
||||
}
|
||||
|
||||
func TestRedisCache_GetMapInvalidKey(t *testing.T) {
|
||||
s := createRedisClient(t)
|
||||
defer s.Close()
|
||||
|
||||
_, err := s.GetMap("unknown_key", "1", "2")
|
||||
assert.Equal(t, ErrNotFound, err)
|
||||
}
|
||||
|
||||
// docker run -it --rm -p 6379:6379 redis
|
||||
func createRedisClient(t *testing.T) RedisCache {
|
||||
if testing.Short() {
|
||||
t.Skip("run redis tests manually")
|
||||
}
|
||||
|
||||
client, err := NewRedisCache("redis://localhost")
|
||||
require.NoError(t, err)
|
||||
|
||||
keys, err := client.client.Keys("*").Result()
|
||||
assert.NoError(t, err)
|
||||
|
||||
if len(keys) > 0 {
|
||||
err = client.client.Del(keys...).Err()
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
return client
|
||||
}
|
||||
Reference in New Issue
Block a user