github.com/hdt3213/godis@v1.2.9/database/persistence_test.go (about) 1 package database 2 3 import ( 4 "github.com/hdt3213/godis/aof" 5 "github.com/hdt3213/godis/config" 6 "github.com/hdt3213/godis/lib/utils" 7 "github.com/hdt3213/godis/redis/connection" 8 "github.com/hdt3213/godis/redis/protocol/asserts" 9 "io/ioutil" 10 "path/filepath" 11 "runtime" 12 "testing" 13 "time" 14 ) 15 16 func TestLoadRDB(t *testing.T) { 17 _, b, _, _ := runtime.Caller(0) 18 projectRoot := filepath.Dir(filepath.Dir(b)) 19 config.Properties = &config.ServerProperties{ 20 AppendOnly: false, 21 RDBFilename: filepath.Join(projectRoot, "test.rdb"), // set working directory to project root 22 } 23 conn := connection.NewFakeConn() 24 rdbDB := NewStandaloneServer() 25 result := rdbDB.Exec(conn, utils.ToCmdLine("Get", "str")) 26 asserts.AssertBulkReply(t, result, "str") 27 result = rdbDB.Exec(conn, utils.ToCmdLine("TTL", "str")) 28 asserts.AssertIntReplyGreaterThan(t, result, 0) 29 result = rdbDB.Exec(conn, utils.ToCmdLine("LRange", "list", "0", "-1")) 30 asserts.AssertMultiBulkReply(t, result, []string{"1", "2", "3", "4"}) 31 result = rdbDB.Exec(conn, utils.ToCmdLine("HGetAll", "hash")) 32 asserts.AssertMultiBulkReply(t, result, []string{"1", "1"}) 33 result = rdbDB.Exec(conn, utils.ToCmdLine("ZRange", "zset", "0", "1", "WITHSCORES")) 34 asserts.AssertMultiBulkReply(t, result, []string{"1", "1"}) 35 result = rdbDB.Exec(conn, utils.ToCmdLine("SCard", "set")) 36 asserts.AssertIntReply(t, result, 1) 37 38 config.Properties = &config.ServerProperties{ 39 AppendOnly: false, 40 RDBFilename: filepath.Join(projectRoot, "none", "test.rdb"), // set working directory to project root 41 } 42 rdbDB = NewStandaloneServer() 43 result = rdbDB.Exec(conn, utils.ToCmdLine("Get", "str")) 44 asserts.AssertNullBulk(t, result) 45 } 46 47 func TestServerFsyncAlways(t *testing.T) { 48 aofFile, err := ioutil.TempFile("", "*.aof") 49 if err != nil { 50 t.Error(err) 51 return 52 } 53 config.Properties.AppendOnly = true 54 config.Properties.AppendFilename = aofFile.Name() 55 config.Properties.AppendFsync = aof.FsyncAlways 56 server := NewStandaloneServer() 57 conn := connection.NewFakeConn() 58 server.Exec(conn, utils.ToCmdLine("del", "1")) 59 ret := server.Exec(conn, utils.ToCmdLine("incr", "1")) 60 asserts.AssertNotError(t, ret) 61 reader := NewStandaloneServer() 62 ret = reader.Exec(conn, utils.ToCmdLine("get", "1")) 63 asserts.AssertBulkReply(t, ret, "1") 64 } 65 66 func TestServerFsyncEverySec(t *testing.T) { 67 aofFile, err := ioutil.TempFile("", "*.aof") 68 if err != nil { 69 t.Error(err) 70 return 71 } 72 config.Properties.AppendOnly = true 73 config.Properties.AppendFilename = aofFile.Name() 74 config.Properties.AppendFsync = aof.FsyncEverySec 75 server := NewStandaloneServer() 76 conn := connection.NewFakeConn() 77 server.Exec(conn, utils.ToCmdLine("del", "1")) 78 ret := server.Exec(conn, utils.ToCmdLine("incr", "1")) 79 asserts.AssertNotError(t, ret) 80 time.Sleep(1500 * time.Millisecond) 81 reader := NewStandaloneServer() 82 ret = reader.Exec(conn, utils.ToCmdLine("get", "1")) 83 asserts.AssertBulkReply(t, ret, "1") 84 }