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  }