2014-11-27 09:03:44 +03:00
|
|
|
package server
|
|
|
|
|
|
|
|
import (
|
2014-12-03 11:27:52 +03:00
|
|
|
"fmt"
|
2015-03-03 05:18:54 +03:00
|
|
|
"github.com/siddontang/ledisdb/client/goledis"
|
2014-12-03 11:27:52 +03:00
|
|
|
"github.com/siddontang/ledisdb/config"
|
|
|
|
"os"
|
2014-11-27 09:03:44 +03:00
|
|
|
"testing"
|
2014-12-03 11:27:52 +03:00
|
|
|
"time"
|
2014-11-27 09:03:44 +03:00
|
|
|
)
|
|
|
|
|
2014-12-03 11:27:52 +03:00
|
|
|
func TestDumpRestore(t *testing.T) {
|
2014-11-27 09:03:44 +03:00
|
|
|
c := getTestConn()
|
|
|
|
defer c.Close()
|
|
|
|
|
|
|
|
var err error
|
|
|
|
_, err = c.Do("set", "mtest_a", "1")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
_, err = c.Do("rpush", "mtest_la", "1", "2", "3")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
_, err = c.Do("hmset", "mtest_ha", "a", "1", "b", "2")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
_, err = c.Do("sadd", "mtest_sa", "1", "2", "3")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
_, err = c.Do("zadd", "mtest_za", 1, "a", 2, "b", 3, "c")
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
2014-12-03 11:27:52 +03:00
|
|
|
testDumpRestore(c, "dump", "mtest_a", t)
|
|
|
|
testDumpRestore(c, "ldump", "mtest_la", t)
|
|
|
|
testDumpRestore(c, "hdump", "mtest_ha", t)
|
|
|
|
testDumpRestore(c, "sdump", "mtest_sa", t)
|
|
|
|
testDumpRestore(c, "zdump", "mtest_za", t)
|
2014-11-27 09:03:44 +03:00
|
|
|
}
|
|
|
|
|
2014-12-03 11:27:52 +03:00
|
|
|
func testDumpRestore(c *ledis.Conn, dump string, key string, t *testing.T) {
|
2014-11-27 09:03:44 +03:00
|
|
|
if data, err := ledis.Bytes(c.Do(dump, key)); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
} else if _, err := c.Do("restore", key, 0, data); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
}
|
2014-12-03 11:27:52 +03:00
|
|
|
|
|
|
|
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)
|
|
|
|
|
2015-03-02 12:12:55 +03:00
|
|
|
c1, _ := ledis.Connect(s1Cfg.Addr)
|
2014-12-03 11:27:52 +03:00
|
|
|
defer c1.Close()
|
|
|
|
|
2015-03-02 12:12:55 +03:00
|
|
|
c2, _ := ledis.Connect(s2Cfg.Addr)
|
2014-12-03 11:27:52 +03:00
|
|
|
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 := ledis.String(c2.Do("get", "a")); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
} else if s != "1" {
|
|
|
|
t.Fatal(s, "must 1")
|
|
|
|
}
|
|
|
|
|
|
|
|
if s, err := ledis.String(c1.Do("get", "a")); err != nil && err != ledis.ErrNil {
|
|
|
|
t.Fatal(err)
|
|
|
|
} else if s != "" {
|
|
|
|
t.Fatal(s, "must empty")
|
|
|
|
}
|
|
|
|
|
|
|
|
if num, err := ledis.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 := ledis.String(c1.Do("get", "a")); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
} else if s != "1" {
|
|
|
|
t.Fatal(s, "must 1")
|
|
|
|
}
|
|
|
|
|
|
|
|
if s, err := ledis.String(c2.Do("get", "a")); err != nil && err != ledis.ErrNil {
|
|
|
|
t.Fatal(err)
|
|
|
|
} else if s != "" {
|
|
|
|
t.Fatal(s, "must empty")
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|