src.dualinventive.com/go/lib/kv/rediskv/rediskv_test.go

189 lines
3.5 KiB
Go

package rediskv
import (
"fmt"
"testing"
)
type redisMock struct {
reply interface{}
err error
}
func (r redisMock) Err() error {
return r.err
}
func (r redisMock) Close() error {
return nil
}
func (r redisMock) Receive() (reply interface{}, err error) {
return r.reply, r.err
}
func (r redisMock) Flush() error {
return nil
}
func (r redisMock) Send(commandName string, args ...interface{}) error {
return nil
}
func (r redisMock) Do(cmd string, args ...interface{}) (reply interface{}, err error) {
return r.reply, r.err
}
func TestGetSet(t *testing.T) {
mock := redisMock{}
kvStorage := Rediskv{}
kvStorage.c = &mock
mock.reply = nil
mock.err = nil
err := kvStorage.Set("value", `"{"name": "simulator", "value": "20"}"`)
if err != nil {
t.Error("Couln't set value name:simulator, value:20")
}
mock.reply = `"{"name": "simulator", "value": "20"}"`
mock.err = nil
value, err := kvStorage.Get("value")
if err != nil {
t.Error("Couln't get value for initialized value")
t.Error(err)
}
if value != `"{"name": "simulator", "value": "20"}"` {
t.Error("Unexpected get value for initialized value")
}
}
func TestDel(t *testing.T) {
mock := redisMock{}
kvStorage := Rediskv{}
kvStorage.c = &mock
mock.reply = nil
mock.err = nil
err := kvStorage.Set("value", `{"name": "simulator", "value": "20"}`)
if err != nil {
t.Error("Couln't set value name:simulator, value:20")
}
mock.reply = `{"name": "simulator", "value": "20"}`
mock.err = nil
value, err := kvStorage.Get("value")
if err != nil {
t.Error("Couln't get value for initialized value")
}
if value != `{"name": "simulator", "value": "20"}` {
t.Errorf("Unexpected get value for initialized value got: %v", value)
}
mock.reply = nil
mock.err = nil
ok, err := kvStorage.Del("value")
if err != nil {
t.Error("Couln't del value")
}
if !ok {
t.Error("No value deleted")
}
mock.reply = nil
mock.err = nil
value, err = kvStorage.Get("value")
if err == nil {
t.Error("Couln't get value for initialized value")
}
if value != "" {
t.Error("Unexpected get value for removed value")
}
}
func TestHGetHSet(t *testing.T) {
mock := redisMock{}
kvStorage := Rediskv{}
kvStorage.c = &mock
mock.reply = nil
mock.err = nil
err := kvStorage.HSet("value", "name", "simulator")
if err != nil {
t.Error("Couln't hset value with field name and value simulator")
}
mock.reply = "simulator"
mock.err = nil
value, err := kvStorage.HGet("value", "name")
if err != nil {
t.Error("Couln't hget value for field name")
}
if value != "simulator" {
t.Error("Unexpected hget value for field name")
}
}
func TestHDel(t *testing.T) {
mock := redisMock{}
kvStorage := Rediskv{}
kvStorage.c = &mock
mock.reply = nil
mock.err = nil
err := kvStorage.HSet("value", "name", "simulator")
if err != nil {
t.Error("Couln't hset value with field name and value simulator")
}
mock.reply = "simulator"
mock.err = nil
value, err := kvStorage.HGet("value", "name")
if err != nil {
t.Error("Couln't hget value for field name")
}
if value != "simulator" {
t.Error("Unexpected hget value for field name")
}
mock.reply = nil
mock.err = nil
err = kvStorage.HDel("value", "name")
if err != nil {
t.Error("Couln't del value")
}
}
func TestKeys(t *testing.T) {
mock := redisMock{}
kvStorage := Rediskv{}
kvStorage.c = &mock
mock.reply = nil
mock.err = fmt.Errorf("test-err")
k, err := kvStorage.Keys("*")
if err.Error() != "test-err" {
t.Errorf("keys error didnt match: %s (%v)", err.Error(), err)
}
if k != nil {
t.Error("keys must be nil")
}
}