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") } }