func TestCmdEval(t *testing.T) { c := getTestConn() defer c.Close() if v, err := goredis.Strings(c.Do("eval", "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}", 2, "key1", "key2", "first", "second")); err != nil { t.Fatal(err) } else if !reflect.DeepEqual(v, []string{"key1", "key2", "first", "second"}) { t.Fatal(fmt.Sprintf("%v", v)) } if v, err := goredis.Strings(c.Do("eval", "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}", 2, "key1", "key2", "first", "second")); err != nil { t.Fatal(err) } else if !reflect.DeepEqual(v, []string{"key1", "key2", "first", "second"}) { t.Fatal(fmt.Sprintf("%v", v)) } var sha1 string var err error if sha1, err = goredis.String(c.Do("script", "load", "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}")); err != nil { t.Fatal(err) } else if len(sha1) != 40 { t.Fatal(sha1) } if v, err := goredis.Strings(c.Do("evalsha", sha1, 2, "key1", "key2", "first", "second")); err != nil { t.Fatal(err) } else if !reflect.DeepEqual(v, []string{"key1", "key2", "first", "second"}) { t.Fatal(fmt.Sprintf("%v", v)) } if ay, err := goredis.Values(c.Do("script", "exists", sha1, "01234567890123456789")); err != nil { t.Fatal(err) } else if !reflect.DeepEqual(ay, []interface{}{int64(1), int64(0)}) { t.Fatal(fmt.Sprintf("%v", ay)) } if ok, err := goredis.String(c.Do("script", "flush")); err != nil { t.Fatal(err) } else if ok != "OK" { t.Fatal(ok) } if ay, err := goredis.Values(c.Do("script", "exists", sha1)); err != nil { t.Fatal(err) } else if !reflect.DeepEqual(ay, []interface{}{int64(0)}) { t.Fatal(fmt.Sprintf("%v", ay)) } }
func TestKVM(t *testing.T) { c := getTestConn() defer c.Close() if ok, err := goredis.String(c.Do("mset", "a", "1", "b", "2")); err != nil { t.Fatal(err) } else if ok != OK { t.Fatal(ok) } if v, err := goredis.MultiBulk(c.Do("mget", "a", "b", "c")); err != nil { t.Fatal(err) } else if len(v) != 3 { t.Fatal(len(v)) } else { if vv, ok := v[0].([]byte); !ok || string(vv) != "1" { t.Fatal("not 1") } if vv, ok := v[1].([]byte); !ok || string(vv) != "2" { t.Fatal("not 2") } if v[2] != nil { t.Fatal("must nil") } } }
func TestHashM(t *testing.T) { c := getTestConn() defer c.Close() key := []byte("b") if ok, err := goredis.String(c.Do("hmset", key, 1, 1, 2, 2, 3, 3)); err != nil { t.Fatal(err) } else if ok != OK { t.Fatal(ok) } if n, err := goredis.Int(c.Do("hlen", key)); err != nil { t.Fatal(err) } else if n != 3 { t.Fatal(n) } if v, err := goredis.MultiBulk(c.Do("hmget", key, 1, 2, 3, 4)); err != nil { t.Fatal(err) } else { if err := testHashArray(v, 1, 2, 3, 0); err != nil { t.Fatal(err) } } if n, err := goredis.Int(c.Do("hdel", key, 1, 2, 3, 4)); err != nil { t.Fatal(err) } else if n != 3 { t.Fatal(n) } if n, err := goredis.Int(c.Do("hlen", key)); err != nil { t.Fatal(err) } else if n != 0 { t.Fatal(n) } if v, err := goredis.MultiBulk(c.Do("hmget", key, 1, 2, 3, 4)); err != nil { t.Fatal(err) } else { if err := testHashArray(v, 0, 0, 0, 0); err != nil { t.Fatal(err) } } if n, err := goredis.Int(c.Do("hlen", key)); err != nil { t.Fatal(err) } else if n != 0 { t.Fatal(n) } }
func (m *master) replConf() error { _, port, err := net.SplitHostPort(m.app.cfg.Addr) if err != nil { return err } if s, err := goredis.String(m.conn.Do("replconf", "listening-port", port)); err != nil { return err } else if strings.ToUpper(s) != "OK" { return fmt.Errorf("not ok but %s", s) } return nil }
func TestHashGetAll(t *testing.T) { c := getTestConn() defer c.Close() key := []byte("d") if ok, err := goredis.String(c.Do("hmset", key, 1, 1, 2, 2, 3, 3)); err != nil { t.Fatal(err) } else if ok != OK { t.Fatal(ok) } if v, err := goredis.MultiBulk(c.Do("hgetall", key)); err != nil { t.Fatal(err) } else { if err := testHashArray(v, 1, 1, 2, 2, 3, 3); err != nil { t.Fatal(err) } } if v, err := goredis.MultiBulk(c.Do("hkeys", key)); err != nil { t.Fatal(err) } else { if err := testHashArray(v, 1, 2, 3); err != nil { t.Fatal(err) } } if v, err := goredis.MultiBulk(c.Do("hvals", key)); err != nil { t.Fatal(err) } else { if err := testHashArray(v, 1, 2, 3); err != nil { t.Fatal(err) } } if n, err := goredis.Int(c.Do("hclear", key)); err != nil { t.Fatal(err) } else if n != 3 { t.Fatal(n) } if n, err := goredis.Int(c.Do("hlen", key)); err != nil { t.Fatal(err) } else if n != 0 { t.Fatal(n) } }
func TestMigrate(t *testing.T) { data_dir := "/tmp/test_migrate" os.RemoveAll(data_dir) s1Cfg := config.NewConfigDefault() s1Cfg.DataDir = fmt.Sprintf("%s/s1", data_dir) s1Cfg.Addr = "127.0.0.1:11185" s2Cfg := config.NewConfigDefault() s2Cfg.DataDir = fmt.Sprintf("%s/s2", data_dir) s2Cfg.Addr = "127.0.0.1:11186" s1, err := NewApp(s1Cfg) if err != nil { t.Fatal(err) } defer s1.Close() s2, err := NewApp(s2Cfg) if err != nil { t.Fatal(err) } defer s2.Close() go s1.Run() go s2.Run() time.Sleep(1 * time.Second) c1, _ := goredis.Connect(s1Cfg.Addr) defer c1.Close() c2, _ := goredis.Connect(s2Cfg.Addr) defer c2.Close() if _, err = c1.Do("set", "a", "1"); err != nil { t.Fatal(err) } timeout := 30000 if _, err = c1.Do("xmigrate", "127.0.0.1", 11186, "KV", "a", 0, timeout); err != nil { t.Fatal(err) } if s, err := goredis.String(c2.Do("get", "a")); err != nil { t.Fatal(err) } else if s != "1" { t.Fatal(s, "must 1") } if s, err := goredis.String(c1.Do("get", "a")); err != nil && err != goredis.ErrNil { t.Fatal(err) } else if s != "" { t.Fatal(s, "must empty") } if num, err := goredis.Int(c2.Do("xmigratedb", "127.0.0.1", 11185, "KV", 10, 0, timeout)); err != nil { t.Fatal(err) } else if num != 1 { t.Fatal(num, "must number 1") } if s, err := goredis.String(c1.Do("get", "a")); err != nil { t.Fatal(err) } else if s != "1" { t.Fatal(s, "must 1") } if s, err := goredis.String(c2.Do("get", "a")); err != nil && err != goredis.ErrNil { t.Fatal(err) } else if s != "" { t.Fatal(s, "must empty") } if _, err = c1.Do("xmigrate", "127.0.0.1", 11186, "ALL", "a", 0, timeout); err != nil { t.Fatal(err) } if s, err := goredis.String(c2.Do("get", "a")); err != nil { t.Fatal(err) } else if s != "1" { t.Fatal(s, "must 1") } if s, err := goredis.String(c1.Do("get", "a")); err != nil && err != goredis.ErrNil { t.Fatal(err) } else if s != "" { t.Fatal(s, "must empty") } }
func TestKV(t *testing.T) { c := getTestConn() defer c.Close() if ok, err := goredis.String(c.Do("set", "a", "1234")); err != nil { t.Fatal(err) } else if ok != OK { t.Fatal(ok) } if n, err := goredis.Int(c.Do("setnx", "a", "123")); err != nil { t.Fatal(err) } else if n != 0 { t.Fatal(n) } if n, err := goredis.Int(c.Do("setnx", "b", "123")); err != nil { t.Fatal(err) } else if n != 1 { t.Fatal(n) } if ok, err := goredis.String(c.Do("setex", "xx", 10, "hello world")); err != nil { t.Fatal(err) } else if ok != OK { t.Fatal(ok) } if v, err := goredis.String(c.Do("get", "a")); err != nil { t.Fatal(err) } else if v != "1234" { t.Fatal(v) } if v, err := goredis.String(c.Do("getset", "a", "123")); err != nil { t.Fatal(err) } else if v != "1234" { t.Fatal(v) } if v, err := goredis.String(c.Do("get", "a")); err != nil { t.Fatal(err) } else if v != "123" { t.Fatal(v) } if n, err := goredis.Int(c.Do("exists", "a")); err != nil { t.Fatal(err) } else if n != 1 { t.Fatal(n) } if n, err := goredis.Int(c.Do("exists", "empty_key_test")); err != nil { t.Fatal(err) } else if n != 0 { t.Fatal(n) } if _, err := goredis.Int(c.Do("del", "a", "b")); err != nil { t.Fatal(err) } if n, err := goredis.Int(c.Do("exists", "a")); err != nil { t.Fatal(err) } else if n != 0 { t.Fatal(n) } if n, err := goredis.Int(c.Do("exists", "b")); err != nil { t.Fatal(err) } else if n != 0 { t.Fatal(n) } rangeKey := "range_key" if n, err := goredis.Int(c.Do("append", rangeKey, "Hello ")); err != nil { t.Fatal(err) } else if n != 6 { t.Fatal(n) } if n, err := goredis.Int(c.Do("setrange", rangeKey, 6, "Redis")); err != nil { t.Fatal(err) } else if n != 11 { t.Fatal(n) } if n, err := goredis.Int(c.Do("strlen", rangeKey)); err != nil { t.Fatal(err) } else if n != 11 { t.Fatal(n) } if v, err := goredis.String(c.Do("getrange", rangeKey, 0, -1)); err != nil { t.Fatal(err) } else if v != "Hello Redis" { t.Fatal(v) } bitKey := "bit_key" if n, err := goredis.Int(c.Do("setbit", bitKey, 7, 1)); err != nil { t.Fatal(err) } else if n != 0 { t.Fatal(n) } if n, err := goredis.Int(c.Do("getbit", bitKey, 7)); err != nil { t.Fatal(err) } else if n != 1 { t.Fatal(n) } if n, err := goredis.Int(c.Do("bitcount", bitKey)); err != nil { t.Fatal(err) } else if n != 1 { t.Fatal(n) } if n, err := goredis.Int(c.Do("bitpos", bitKey, 1)); err != nil { t.Fatal(err) } else if n != 7 { t.Fatal(n) } c.Do("set", "key1", "foobar") c.Do("set", "key2", "abcdef") if n, err := goredis.Int(c.Do("bitop", "and", "bit_dest_key", "key1", "key2")); err != nil { t.Fatal(err) } else if n != 6 { t.Fatal(n) } if v, err := goredis.String(c.Do("get", "bit_dest_key")); err != nil { t.Fatal(err) } else if v != "`bc`ab" { t.Fatal(v) } }