ledisdb/server/http/cmd_hash_test.go

370 lines
8.0 KiB
Go

package http
import (
"fmt"
"testing"
"time"
)
func TestHSetCommand(t *testing.T) {
db := getTestDB()
_, err := hsetCommand(db, "test_hset")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hset") {
t.Fatalf("invalid err %v", err)
}
n, err := hsetCommand(db, "test_hset", "f", "v")
if err != nil {
t.Fatal(err)
}
if n.(int64) != 1 {
t.Fatal("invalid result ", n)
}
v, err := db.HGet([]byte("test_hset"), []byte("f"))
if err != nil {
t.Fatal(err.Error())
}
if string(v) != "v" {
t.Fatalf("invalid result %s", v)
}
}
func TestHGetCommand(t *testing.T) {
db := getTestDB()
_, err := hgetCommand(db, "test_hget")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hget") {
t.Fatalf("invalid err %v", err)
}
if _, err := db.HSet([]byte("test_hget"), []byte("f"), []byte("v")); err != nil {
t.Fatal(err.Error())
}
v, err := hgetCommand(db, "test_hget", "f")
if err != nil {
t.Fatal(err.Error())
}
if v.(string) != "v" {
t.Fatal("invalid result ", v)
}
}
func TestHExistsCommand(t *testing.T) {
db := getTestDB()
_, err := hexistsCommand(db, "test_hexists")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hexists") {
t.Fatalf("invalid err %v", err)
}
_, err = db.HSet([]byte("test_hexists"), []byte("f"), []byte("v"))
if err != nil {
t.Fatal(err.Error())
}
v, err := hexistsCommand(db, "test_hexists", "f")
if err != nil {
t.Fatal(err.Error())
}
if v.(int64) != 1 {
t.Fatal("invalid result ", v)
}
}
func TestHDelCommand(t *testing.T) {
db := getTestDB()
_, err := hdelCommand(db, "test_hdel")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hdel") {
t.Fatalf("invalid err %v", err)
}
_, err = db.HSet([]byte("test_hdel"), []byte("f"), []byte("v"))
if err != nil {
t.Fatal(err.Error())
}
v, err := hdelCommand(db, "test_hdel", "f")
if err != nil {
t.Fatal(err.Error())
}
if v.(int64) != 1 {
t.Fatal("invalid result ", v)
}
r, err := db.HGet([]byte("test_hdel"), []byte("f"))
if err != nil {
t.Fatal(err.Error())
}
if r != nil {
t.Fatalf("invalid result %v", r)
}
}
func TestHLenCommand(t *testing.T) {
db := getTestDB()
_, err := hlenCommand(db, "test_hlen", "a")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hlen") {
t.Fatalf("invalid err %v", err)
}
_, err = db.HSet([]byte("test_hlen"), []byte("f1"), []byte("v1"))
if err != nil {
t.Fatal(err.Error())
}
_, err = db.HSet([]byte("test_hlen"), []byte("f2"), []byte("v2"))
if err != nil {
t.Fatal(err.Error())
}
v, err := hlenCommand(db, "test_hlen")
if err != nil {
t.Fatal(err.Error())
}
if v.(int64) != 2 {
t.Fatal("invalid result ", v)
}
}
func TestHIncrbyCommand(t *testing.T) {
db := getTestDB()
_, err := hincrbyCommand(db, "test_hincrby")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hincrby") {
t.Fatalf("invalid err %v", err)
}
_, err = db.HSet([]byte("test_hincrby"), []byte("f"), []byte("10"))
if err != nil {
t.Fatal(err.Error())
}
_, err = hincrbyCommand(db, "test_hincrby", "f", "x")
if err != ErrValue {
t.Fatal("invalid err ", err)
}
v, err := hincrbyCommand(db, "test_hincrby", "f", "10")
if err != nil {
t.Fatal(err.Error())
}
if v.(int64) != 20 {
t.Fatal("invalid result ", v)
}
}
func TestHMsetCommand(t *testing.T) {
db := getTestDB()
_, err := hmsetCommand(db, "test_hmset")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hmset") {
t.Fatalf("invalid err %v", err)
}
_, err = hmsetCommand(db, "test_hmset", "f1", "v1", "f2", "v2")
if err != nil {
t.Fatal(err.Error())
}
v, err := db.HGet([]byte("test_hmset"), []byte("f1"))
if err != nil {
t.Fatal(err.Error())
}
if string(v) != "v1" {
t.Fatalf("invalid result %s", v)
}
v, err = db.HGet([]byte("test_hmset"), []byte("f2"))
if err != nil {
t.Fatal(err.Error())
}
if string(v) != "v2" {
t.Fatalf("invalid result %s", v)
}
}
func TestHMgetCommand(t *testing.T) {
db := getTestDB()
_, err := hmgetCommand(db, "test_hmget")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hmget") {
t.Fatalf("invalid err %v", err)
}
_, err = db.HSet([]byte("test_hmget"), []byte("f1"), []byte("v1"))
if err != nil {
t.Fatal(err.Error())
}
_, err = db.HSet([]byte("test_hmget"), []byte("f2"), []byte("v2"))
if err != nil {
t.Fatal(err.Error())
}
v, err := hmgetCommand(db, "test_hmget", "f1", "f2")
if err != nil {
t.Fatal(err.Error())
}
arr := v.([]interface{})
if len(arr) != 2 {
t.Fatalf("invalid arr %v", arr)
}
if arr[0].(string) != "v1" {
t.Fatal("invalid result ", v)
}
if arr[1].(string) != "v2" {
t.Fatal("invalid result ", v)
}
}
func TestHGetallCommand(t *testing.T) {
db := getTestDB()
_, err := hgetallCommand(db, "test_hgetall", "a")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hgetall") {
t.Fatalf("invalid err %v", err)
}
_, err = db.HSet([]byte("test_hgetall"), []byte("f"), []byte("v"))
if err != nil {
t.Fatal(err.Error())
}
v, err := hgetallCommand(db, "test_hgetall")
if err != nil {
t.Fatal(err.Error())
}
m := v.(map[string]string)
if m["f"] != "v" {
t.Fatal("invalid result ", v)
}
}
func TestHKeysCommand(t *testing.T) {
db := getTestDB()
_, err := hkeysCommand(db, "test_hkeys", "a")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hkeys") {
t.Fatalf("invalid err %v", err)
}
_, err = db.HSet([]byte("test_hkeys"), []byte("f"), []byte("v"))
if err != nil {
t.Fatal(err.Error())
}
v, err := hkeysCommand(db, "test_hkeys")
if err != nil {
t.Fatal(err.Error())
}
arr := v.([]string)
if arr[0] != "f" {
t.Fatal("invalid result ", v)
}
}
func TestHClearCommand(t *testing.T) {
db := getTestDB()
_, err := hclearCommand(db, "test_hclear", "a")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hclear") {
t.Fatalf("invalid err %v", err)
}
_, err = db.HSet([]byte("test_hclear"), []byte("f"), []byte("v"))
if err != nil {
t.Fatal(err.Error())
}
v, err := hclearCommand(db, "test_hclear")
if err != nil {
t.Fatal(err.Error())
}
if v.(int64) != 1 {
t.Fatal("invalid result ", v)
}
}
func TestHMclearCommand(t *testing.T) {
db := getTestDB()
_, err := hmclearCommand(db)
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hmclear") {
t.Fatalf("invalid err %v", err)
}
v, err := hmclearCommand(db, "test_hmclear1", "test_hmclear2")
if err != nil {
t.Fatal(err.Error())
}
if v.(int64) != 2 {
t.Fatal("invalid result ", v)
}
}
func TestHExpireCommand(t *testing.T) {
db := getTestDB()
_, err := hexpireCommand(db, "test_hexpire")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hexpire") {
t.Fatalf("invalid err %v", err)
}
v, err := hexpireCommand(db, "test_hexpire", "10")
if err != nil {
t.Fatal(err.Error())
}
if v.(int64) != 0 {
t.Fatal("invalid result ", v)
}
}
func TestHExpireAtCommand(t *testing.T) {
db := getTestDB()
_, err := hexpireAtCommand(db, "test_hexpireat")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hexpireat") {
t.Fatalf("invalid err %v", err)
}
expireAt := fmt.Sprintf("%d", time.Now().Unix()+10)
v, err := hexpireCommand(db, "test_hexpireat", expireAt)
if err != nil {
t.Fatal(err.Error())
}
if v.(int64) != 0 {
t.Fatal("invalid result ", v)
}
}
func TestHTTLCommand(t *testing.T) {
db := getTestDB()
_, err := httlCommand(db, "test_httl", "a")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "httl") {
t.Fatalf("invalid err %v", err)
}
v, err := httlCommand(db, "test_httl")
if err != nil {
t.Fatal(err.Error())
}
if v.(int64) != -1 {
t.Fatal("invalid result ", v)
}
}
func TestHPersistCommand(t *testing.T) {
db := getTestDB()
_, err := hpersistCommand(db, "test_hpersist", "a")
if err == nil || err.Error() != fmt.Sprintf(ERR_ARGUMENT_FORMAT, "hpersist") {
t.Fatalf("invalid err %v", err)
}
v, err := hpersistCommand(db, "test_hpersist")
if err != nil {
t.Fatal(err.Error())
}
if v.(int64) != 0 {
t.Fatal("invalid result ", v)
}
}