Refactor tests (#171)

- Refactored tests to improve execution time - @kelvinmwinuka
This commit is contained in:
Kelvin Mwinuka
2025-01-27 01:42:41 +08:00
committed by GitHub
parent ec69e52a5b
commit 63a4652d9f
12 changed files with 12079 additions and 11853 deletions

View File

@@ -14,12 +14,18 @@ build-modules-test:
test:
env RACE=false OUT=internal/modules/admin/testdata make build-modules-test && \
env RACE=false OUT=sugardb/testdata make build-modules-test && \
CGO_ENABLED=1 go test ./... -coverprofile coverage/coverage.out
CGO_ENABLED=1 go test ./... -coverprofile coverage/coverage.out && \
rm -rf ./internal/modules/admin/testdata && \
rm -rf ./sugardb/testdata && \
rm -rf ./sugardb/aof
test-race:
env RACE=true OUT=internal/modules/admin/testdata make build-modules-test && \
env RACE=true OUT=sugardb/testdata make build-modules-test && \
CGO_ENABLED=1 go test ./... --race
CGO_ENABLED=1 go test ./... --race && \
rm -rf ./internal/modules/admin/testdata && \
rm -rf ./sugardb/testdata && \
rm -rf ./sugardb/aof
testenv-run:
docker-compose -f test_env/run/docker-compose.yaml build

File diff suppressed because it is too large Load Diff

View File

@@ -124,8 +124,14 @@ func generateSHA256Password(plain string) string {
return hex.EncodeToString(h.Sum(nil))
}
func TestSugarDB_ACLCat(t *testing.T) {
func TestSugarDB_ACL(t *testing.T) {
t.Run("TestSugarDB_ACLCat", func(t *testing.T) {
t.Parallel()
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
getCategoryCommands := func(category string) []string {
var commands []string
@@ -262,10 +268,15 @@ func TestSugarDB_ACLCat(t *testing.T) {
}
})
}
}
})
t.Run("TestSugarDB_ACLUsers", func(t *testing.T) {
t.Parallel()
func TestSugarDB_ACLUsers(t *testing.T) {
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
// Set Users
users := []User{
@@ -367,9 +378,11 @@ func TestSugarDB_ACLUsers(t *testing.T) {
if len(list) != 2 {
t.Errorf("ACLList() got list length %d, want %d", len(list), 2)
}
}
})
t.Run("TestSugarDB_ACLConfig", func(t *testing.T) {
t.Parallel()
func TestSugarDB_ACLConfig(t *testing.T) {
t.Run("Test_HandleSave", func(t *testing.T) {
baseDir := path.Join(".", "testdata", "save")
t.Cleanup(func() {
@@ -418,11 +431,15 @@ func TestSugarDB_ACLConfig(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
t.Parallel()
// Create new server instance
conf := DefaultConfig()
conf.DataDir = ""
conf.AclConfig = test.path
server := createSugarDBWithConfig(conf)
// Add the initial test users to the ACL module.
for _, user := range generateInitialTestUsers() {
if _, err := server.ACLSetUser(user); err != nil {
@@ -596,11 +613,15 @@ func TestSugarDB_ACLConfig(t *testing.T) {
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
t.Parallel()
// Create server.
conf := DefaultConfig()
conf.DataDir = ""
conf.AclConfig = test.path
server := createSugarDBWithConfig(conf)
// Add the initial test users to the ACL module.
for _, user := range generateInitialTestUsers() {
if _, err := server.ACLSetUser(user); err != nil {
@@ -615,8 +636,9 @@ func TestSugarDB_ACLConfig(t *testing.T) {
return
}
ticker := time.NewTicker(200 * time.Millisecond)
ticker := time.NewTicker(100 * time.Millisecond)
<-ticker.C
ticker.Stop()
// Add some users to the ACL.
for _, user := range test.users {
@@ -659,4 +681,5 @@ func TestSugarDB_ACLConfig(t *testing.T) {
})
}
})
})
}

View File

@@ -31,7 +31,10 @@ import (
"time"
)
func TestSugarDB_AddCommand(t *testing.T) {
func TestSugarDB_Admin(t *testing.T) {
t.Run("TestSugarDB_AddCommand", func(t *testing.T) {
t.Parallel()
type args struct {
command CommandOptions
}
@@ -176,8 +179,14 @@ The value passed must be an integer.`,
},
}
for _, tt := range tests {
server := createSugarDB()
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
if err := server.AddCommand(tt.args.command); (err != nil) != tt.wantErr {
t.Errorf("AddCommand() error = %v, wantErr %v", err, tt.wantErr)
}
@@ -197,9 +206,11 @@ The value passed must be an integer.`,
}
})
}
}
})
t.Run("TestSugarDB_ExecuteCommand", func(t *testing.T) {
t.Parallel()
func TestSugarDB_ExecuteCommand(t *testing.T) {
type args struct {
key string
presetValue []string
@@ -233,8 +244,13 @@ func TestSugarDB_ExecuteCommand(t *testing.T) {
},
}
for _, tt := range tests {
server := createSugarDB()
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
if tt.args.presetValue != nil {
_, _ = server.LPush(tt.args.key, tt.args.presetValue...)
}
@@ -251,9 +267,11 @@ func TestSugarDB_ExecuteCommand(t *testing.T) {
}
})
}
}
})
t.Run("TestSugarDB_RemoveCommand", func(t *testing.T) {
t.Parallel()
func TestSugarDB_RemoveCommand(t *testing.T) {
type args struct {
removeCommand []string
executeCommand []string
@@ -289,8 +307,14 @@ func TestSugarDB_RemoveCommand(t *testing.T) {
},
}
for _, tt := range tests {
server := createSugarDB()
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
server.RemoveCommand(tt.args.removeCommand...)
_, err := server.ExecuteCommand(tt.args.executeCommand...)
if tt.wantErr != nil {
@@ -300,14 +324,19 @@ func TestSugarDB_RemoveCommand(t *testing.T) {
}
})
}
}
})
t.Run("TestSugarDB_Plugins", func(t *testing.T) {
t.Parallel()
func TestSugarDB_Plugins(t *testing.T) {
t.Cleanup(func() {
_ = os.RemoveAll("./testdata/modules")
})
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
tests := []struct {
name string
@@ -490,10 +519,15 @@ func TestSugarDB_Plugins(t *testing.T) {
t.Errorf("expected modules list to not contain module \"%s\" but found it", test.path)
}
}
}
})
t.Run("TestSugarDB_CommandList", func(t *testing.T) {
t.Parallel()
func TestSugarDB_CommandList(t *testing.T) {
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
tests := []struct {
name string
@@ -564,6 +598,7 @@ func TestSugarDB_CommandList(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
var got []string
var err error
if tt.options == nil {
@@ -580,10 +615,15 @@ func TestSugarDB_CommandList(t *testing.T) {
}
})
}
}
})
t.Run("TestSugarDB_CommandCount", func(t *testing.T) {
t.Parallel()
func TestSugarDB_CommandCount(t *testing.T) {
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
tests := []struct {
name string
@@ -610,6 +650,7 @@ func TestSugarDB_CommandCount(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := server.CommandCount()
if (err != nil) != tt.wantErr {
t.Errorf("CommandCount() error = %v, wantErr %v", err, tt.wantErr)
@@ -620,13 +661,19 @@ func TestSugarDB_CommandCount(t *testing.T) {
}
})
}
}
})
t.Run("TestSugarDB_Save", func(t *testing.T) {
t.Parallel()
func TestSugarDB_Save(t *testing.T) {
conf := DefaultConfig()
conf.DataDir = path.Join(".", "testdata", "data")
conf.EvictionPolicy = constants.NoEviction
server := createSugarDBWithConfig(conf)
t.Cleanup(func() {
server.ShutDown()
})
tests := []struct {
name string
@@ -651,11 +698,16 @@ func TestSugarDB_Save(t *testing.T) {
}
})
}
}
})
t.Run("TestSugarDB_LastSave", func(t *testing.T) {
t.Parallel()
func TestSugarDB_LastSave(t *testing.T) {
server := createSugarDB()
server.setLatestSnapshot(clock.NewClock().Now().Add(5 * time.Minute).UnixMilli())
t.Cleanup(func() {
server.ShutDown()
})
tests := []struct {
name string
@@ -680,4 +732,5 @@ func TestSugarDB_LastSave(t *testing.T) {
}
})
}
})
}

View File

@@ -25,7 +25,8 @@ import (
"testing"
)
func TestSugarDB_Hello(t *testing.T) {
func TestSugarDB_Connection(t *testing.T) {
t.Run("TestSugarDB_Hello", func(t *testing.T) {
t.Parallel()
port, err := internal.GetFreePort()
@@ -145,9 +146,9 @@ func TestSugarDB_Hello(t *testing.T) {
// Close connection
_ = conn.Close()
}
}
})
func TestSugarDB_SelectDB(t *testing.T) {
t.Run("TestSugarDB_SelectDB", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -184,7 +185,11 @@ func TestSugarDB_SelectDB(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
if tt.presetValues != nil {
for db, data := range tt.presetValues {
@@ -235,11 +240,16 @@ func TestSugarDB_SelectDB(t *testing.T) {
}
})
}
}
})
func TestSugarDB_SetProtocol(t *testing.T) {
t.Run("TestSugarDB_SetProtocol", func(t *testing.T) {
t.Parallel()
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
tests := []struct {
name string
protocol int
@@ -282,4 +292,5 @@ func TestSugarDB_SetProtocol(t *testing.T) {
}
})
}
})
}

File diff suppressed because it is too large Load Diff

View File

@@ -16,16 +16,21 @@ package sugardb
import (
"context"
"github.com/echovault/sugardb/internal/modules/hash"
"reflect"
"slices"
"testing"
"time"
"github.com/echovault/sugardb/internal/modules/hash"
)
func TestSugarDB_HDEL(t *testing.T) {
func TestSugarDB_Hash(t *testing.T) {
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
t.Run("TestSugarDB_HDEL", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -36,8 +41,8 @@ func TestSugarDB_HDEL(t *testing.T) {
wantErr bool
}{
{
name: "Return count of deleted fields in the specified hash",
key: "key1",
name: "1. Return count of deleted fields in the specified hash",
key: "hdel_key1",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
@@ -49,8 +54,8 @@ func TestSugarDB_HDEL(t *testing.T) {
wantErr: false,
},
{
name: "0 response when passing delete fields that are non-existent on valid hash",
key: "key2",
name: "2. 0 response when passing delete fields that are non-existent on valid hash",
key: "hdel_key2",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: "value2"},
@@ -61,17 +66,17 @@ func TestSugarDB_HDEL(t *testing.T) {
wantErr: false,
},
{
name: "0 response when trying to call HDEL on non-existent key",
key: "key3",
name: "3. 0 response when trying to call HDEL on non-existent key",
key: "hdel_key3",
presetValue: nil,
fields: []string{"field1"},
want: 0,
wantErr: false,
},
{
name: "Trying to get lengths on a non hash map returns error",
name: "4. Trying to get lengths on a non hash map returns error",
presetValue: "Default value",
key: "key5",
key: "hdel_key5",
fields: []string{"field1"},
want: 0,
wantErr: true,
@@ -79,6 +84,7 @@ func TestSugarDB_HDEL(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -96,10 +102,10 @@ func TestSugarDB_HDEL(t *testing.T) {
}
})
}
}
})
func TestSugarDB_HEXISTS(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_HEXISTS", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -110,29 +116,29 @@ func TestSugarDB_HEXISTS(t *testing.T) {
wantErr bool
}{
{
name: "Return 1 if the field exists in the hash",
name: "1. Return 1 if the field exists in the hash",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
"field3": {Value: 3.142},
},
key: "key1",
key: "hexists_key1",
field: "field1",
want: true,
wantErr: false,
},
{
name: "False response when trying to call HEXISTS on non-existent key",
name: "2. False response when trying to call HEXISTS on non-existent key",
presetValue: hash.Hash{},
key: "key2",
key: "hexists_key2",
field: "field1",
want: false,
wantErr: false,
},
{
name: "Trying to get lengths on a non hash map returns error",
name: "3. Trying to get lengths on a non hash map returns error",
presetValue: "Default value",
key: "key5",
key: "hexists_key5",
field: "field1",
want: false,
wantErr: true,
@@ -140,6 +146,7 @@ func TestSugarDB_HEXISTS(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -157,10 +164,10 @@ func TestSugarDB_HEXISTS(t *testing.T) {
}
})
}
}
})
func TestSugarDB_HGETALL(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_HGETALL", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -170,8 +177,8 @@ func TestSugarDB_HGETALL(t *testing.T) {
wantErr bool
}{
{
name: "Return an array containing all the fields and values of the hash",
key: "key1",
name: "1. Return an array containing all the fields and values of the hash",
key: "hgetall_key1",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
@@ -181,15 +188,15 @@ func TestSugarDB_HGETALL(t *testing.T) {
wantErr: false,
},
{
name: "Empty array response when trying to call HGETALL on non-existent key",
key: "key2",
name: "2. Empty array response when trying to call HGETALL on non-existent key",
key: "hgetall_key2",
presetValue: hash.Hash{},
want: []string{},
wantErr: false,
},
{
name: "Trying to get lengths on a non hash map returns error",
key: "key5",
name: "3. Trying to get lengths on a non hash map returns error",
key: "hgetall_key5",
presetValue: "Default value",
want: nil,
wantErr: true,
@@ -197,6 +204,7 @@ func TestSugarDB_HGETALL(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -221,10 +229,10 @@ func TestSugarDB_HGETALL(t *testing.T) {
}
})
}
}
})
func TestSugarDB_HINCRBY(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_HINCRBY", func(t *testing.T) {
t.Parallel()
const (
HINCRBY = "HINCRBY"
@@ -243,60 +251,60 @@ func TestSugarDB_HINCRBY(t *testing.T) {
wantErr bool
}{
{
name: "Increment by integer on non-existent hash should create a new one",
name: "1. Increment by integer on non-existent hash should create a new one",
presetValue: nil,
incr_type: HINCRBY,
key: "key1",
key: "hincrby_key1",
field: "field1",
increment_int: 1,
want: 1,
wantErr: false,
},
{
name: "Increment by float on non-existent hash should create one",
name: "2. Increment by float on non-existent hash should create one",
presetValue: nil,
incr_type: HINCRBYFLOAT,
key: "key2",
key: "hincrby_key2",
field: "field1",
increment_float: 3.142,
want: 3.142,
wantErr: false,
},
{
name: "Increment by integer on existing hash",
name: "3. Increment by integer on existing hash",
presetValue: hash.Hash{"field1": {Value: 1}},
incr_type: HINCRBY,
key: "key3",
key: "hincrby_key3",
field: "field1",
increment_int: 10,
want: 11,
wantErr: false,
},
{
name: "Increment by float on an existing hash",
name: "4. Increment by float on an existing hash",
presetValue: hash.Hash{"field1": {Value: 3.142}},
incr_type: HINCRBYFLOAT,
key: "key4",
key: "hincrby_key4",
field: "field1",
increment_float: 3.142,
want: 6.284,
wantErr: false,
},
{
name: "Error when trying to increment on a key that is not a hash",
name: "5. Error when trying to increment on a key that is not a hash",
presetValue: "Default value",
incr_type: HINCRBY,
key: "key9",
key: "hincrby_key9",
field: "field1",
increment_int: 3,
want: 0,
wantErr: true,
},
{
name: "Error when trying to increment a hash field that is not a number",
name: "6. Error when trying to increment a hash field that is not a number",
presetValue: hash.Hash{"field1": {Value: "value1"}},
incr_type: HINCRBY,
key: "key10",
key: "hincrby_key10",
field: "field1",
increment_int: 1,
want: 0,
@@ -305,6 +313,7 @@ func TestSugarDB_HINCRBY(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -333,10 +342,10 @@ func TestSugarDB_HINCRBY(t *testing.T) {
}
})
}
}
})
func TestSugarDB_HKEYS(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_HKEYS", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -346,33 +355,34 @@ func TestSugarDB_HKEYS(t *testing.T) {
wantErr bool
}{
{
name: "Return an array containing all the keys of the hash",
name: "1. Return an array containing all the keys of the hash",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
"field3": {Value: 3.142},
},
key: "key1",
key: "hkeys_key1",
want: []string{"field1", "field2", "field3"},
wantErr: false,
},
{
name: "Empty array response when trying to call HKEYS on non-existent key",
name: "2. Empty array response when trying to call HKEYS on non-existent key",
presetValue: hash.Hash{},
key: "key2",
key: "hkeys_key2",
want: []string{},
wantErr: false,
},
{
name: "Trying to get lengths on a non hash map returns error",
name: "3. Trying to get lengths on a non hash map returns error",
presetValue: "Default value",
key: "key3",
key: "hkeys_key3",
want: nil,
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -395,10 +405,10 @@ func TestSugarDB_HKEYS(t *testing.T) {
}
})
}
}
})
func TestSugarDB_HLEN(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_HLEN", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -408,33 +418,34 @@ func TestSugarDB_HLEN(t *testing.T) {
wantErr bool
}{
{
name: "Return the correct length of the hash",
name: "1. Return the correct length of the hash",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
"field3": {Value: 3.142},
},
key: "key1",
key: "hlen_key1",
want: 3,
wantErr: false,
},
{
name: "0 Response when trying to call HLEN on non-existent key",
name: "2. 0 Response when trying to call HLEN on non-existent key",
presetValue: nil,
key: "key2",
key: "hlen_key2",
want: 0,
wantErr: false,
},
{
name: "Trying to get lengths on a non hash map returns error",
name: "3. Trying to get lengths on a non hash map returns error",
presetValue: "Default value",
key: "key5",
key: "hlen_key5",
want: 0,
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -452,10 +463,10 @@ func TestSugarDB_HLEN(t *testing.T) {
}
})
}
}
})
func TestSugarDB_HRANDFIELD(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_HRANDFIELD", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -467,33 +478,33 @@ func TestSugarDB_HRANDFIELD(t *testing.T) {
wantErr bool
}{
{
name: "Get a random field",
name: "1. Get a random field",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
"field3": {Value: 3.142},
},
key: "key1",
key: "hrandfield_key1",
options: HRandFieldOptions{Count: 1},
wantCount: 1,
want: []string{"field1", "field2", "field3"},
wantErr: false,
},
{
name: "Get a random field with a value",
name: "2. Get a random field with a value",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
"field3": {Value: 3.142},
},
key: "key2",
key: "hrandfield_key2",
options: HRandFieldOptions{WithValues: true, Count: 1},
wantCount: 2,
want: []string{"field1", "value1", "field2", "123456789", "field3", "3.142"},
wantErr: false,
},
{
name: "Get several random fields",
name: "3. Get several random fields",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
@@ -501,14 +512,14 @@ func TestSugarDB_HRANDFIELD(t *testing.T) {
"field4": {Value: "value4"},
"field5": {Value: "value6"},
},
key: "key3",
key: "hrandfield_key3",
options: HRandFieldOptions{Count: 3},
wantCount: 3,
want: []string{"field1", "field2", "field3", "field4", "field5"},
wantErr: false,
},
{
name: "Get several random fields with their corresponding values",
name: "4. Get several random fields with their corresponding values",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
@@ -516,7 +527,7 @@ func TestSugarDB_HRANDFIELD(t *testing.T) {
"field4": {Value: "value4"},
"field5": {Value: "value5"},
},
key: "key4",
key: "hrandfield_key4",
options: HRandFieldOptions{WithValues: true, Count: 3},
wantCount: 6,
want: []string{
@@ -526,7 +537,7 @@ func TestSugarDB_HRANDFIELD(t *testing.T) {
wantErr: false,
},
{
name: "Get the entire hash",
name: "5. Get the entire hash",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
@@ -534,14 +545,14 @@ func TestSugarDB_HRANDFIELD(t *testing.T) {
"field4": {Value: "value4"},
"field5": {Value: "value5"},
},
key: "key5",
key: "hrandfield_key5",
options: HRandFieldOptions{Count: 5},
wantCount: 5,
want: []string{"field1", "field2", "field3", "field4", "field5"},
wantErr: false,
},
{
name: "Get the entire hash with values",
name: "6. Get the entire hash with values",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
@@ -549,7 +560,7 @@ func TestSugarDB_HRANDFIELD(t *testing.T) {
"field4": {Value: "value4"},
"field5": {Value: "value5"},
},
key: "key5",
key: "hrandfield_key6",
options: HRandFieldOptions{WithValues: true, Count: 5},
wantCount: 10,
want: []string{
@@ -559,9 +570,9 @@ func TestSugarDB_HRANDFIELD(t *testing.T) {
wantErr: false,
},
{
name: "Trying to get random field on a non hash map returns error",
name: "7. Trying to get random field on a non hash map returns error",
presetValue: "Default value",
key: "key12",
key: "hrandfield_key7",
options: HRandFieldOptions{},
wantCount: 0,
want: nil,
@@ -570,6 +581,7 @@ func TestSugarDB_HRANDFIELD(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -592,10 +604,10 @@ func TestSugarDB_HRANDFIELD(t *testing.T) {
}
})
}
}
})
func TestSugarDB_HSET(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_HSET", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -607,8 +619,8 @@ func TestSugarDB_HSET(t *testing.T) {
wantErr bool
}{
{
name: "HSETNX set field on non-existent hash map",
key: "key1",
name: "1. HSETNX set field on non-existent hash map",
key: "hset_key1",
presetValue: nil,
hsetFunc: server.HSetNX,
fieldValuePairs: map[string]string{"field1": "value1"},
@@ -616,8 +628,8 @@ func TestSugarDB_HSET(t *testing.T) {
wantErr: false,
},
{
name: "HSETNX set field on existing hash map",
key: "key2",
name: "2. HSETNX set field on existing hash map",
key: "hset_key2",
presetValue: hash.Hash{"field1": {Value: "value1"}},
hsetFunc: server.HSetNX,
fieldValuePairs: map[string]string{"field2": "value2"},
@@ -625,8 +637,8 @@ func TestSugarDB_HSET(t *testing.T) {
wantErr: false,
},
{
name: "HSETNX skips operation when setting on existing field",
key: "key3",
name: "3. HSETNX skips operation when setting on existing field",
key: "hset_key3",
presetValue: hash.Hash{"field1": {Value: "value1"}},
hsetFunc: server.HSetNX,
fieldValuePairs: map[string]string{"field1": "value1"},
@@ -634,8 +646,8 @@ func TestSugarDB_HSET(t *testing.T) {
wantErr: false,
},
{
name: "Regular HSET command on non-existent hash map",
key: "key4",
name: "4. Regular HSET command on non-existent hash map",
key: "hset_key4",
presetValue: nil,
fieldValuePairs: map[string]string{"field1": "value1", "field2": "value2"},
hsetFunc: server.HSet,
@@ -643,8 +655,8 @@ func TestSugarDB_HSET(t *testing.T) {
wantErr: false,
},
{
name: "Regular HSET update on existing hash map",
key: "key5",
name: "5. Regular HSET update on existing hash map",
key: "hset_key5",
presetValue: hash.Hash{"field1": {Value: "value1"}, "field2": {Value: "value2"}},
fieldValuePairs: map[string]string{"field1": "value1-new", "field2": "value2-ne2", "field3": "value3"},
hsetFunc: server.HSet,
@@ -652,8 +664,8 @@ func TestSugarDB_HSET(t *testing.T) {
wantErr: false,
},
{
name: "HSET overwrites when the target key is not a map",
key: "key6",
name: "6. HSET overwrites when the target key is not a map",
key: "hset_key6",
presetValue: "Default preset value",
fieldValuePairs: map[string]string{"field1": "value1"},
hsetFunc: server.HSet,
@@ -663,6 +675,7 @@ func TestSugarDB_HSET(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -680,10 +693,10 @@ func TestSugarDB_HSET(t *testing.T) {
}
})
}
}
})
func TestSugarDB_HSTRLEN(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_HSTRLEN", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -702,7 +715,7 @@ func TestSugarDB_HSTRLEN(t *testing.T) {
"field2": {Value: 123456789},
"field3": {Value: 3.142},
},
key: "key1",
key: "hstrlen_key1",
fields: []string{"field1", "field2", "field3", "field4"},
want: []int{len("value1"), len("123456789"), len("3.142"), 0},
wantErr: false,
@@ -710,14 +723,14 @@ func TestSugarDB_HSTRLEN(t *testing.T) {
{
name: "2. Response when trying to get HSTRLEN non-existent key",
presetValue: hash.Hash{},
key: "key2",
key: "hstrlen_key2",
fields: []string{"field1"},
want: []int{0},
wantErr: false,
},
{
name: "3. Command too short",
key: "key3",
key: "hstrlen_key3",
presetValue: hash.Hash{},
fields: []string{},
want: nil,
@@ -725,7 +738,7 @@ func TestSugarDB_HSTRLEN(t *testing.T) {
},
{
name: "4. Trying to get lengths on a non hash map returns error",
key: "key4",
key: "hstrlen_key4",
presetValue: "Default value",
fields: []string{"field1"},
want: nil,
@@ -734,6 +747,7 @@ func TestSugarDB_HSTRLEN(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
t.Log(tt.name)
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
@@ -752,10 +766,10 @@ func TestSugarDB_HSTRLEN(t *testing.T) {
}
})
}
}
})
func TestSugarDB_HVALS(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_HVALS", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -765,8 +779,8 @@ func TestSugarDB_HVALS(t *testing.T) {
wantErr bool
}{
{
name: "Return all the values from a hash",
key: "key1",
name: "1. Return all the values from a hash",
key: "hvals_key1",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 123456789},
@@ -776,15 +790,15 @@ func TestSugarDB_HVALS(t *testing.T) {
wantErr: false,
},
{
name: "Empty array response when trying to get HSTRLEN non-existent key",
key: "key2",
name: "2. Empty array response when trying to get HSTRLEN non-existent key",
key: "hvals_key2",
presetValue: nil,
want: []string{},
wantErr: false,
},
{
name: "Trying to get lengths on a non hash map returns error",
key: "key5",
name: "3. Trying to get lengths on a non hash map returns error",
key: "hvals_key5",
presetValue: "Default value",
want: nil,
wantErr: true,
@@ -792,6 +806,7 @@ func TestSugarDB_HVALS(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -814,10 +829,11 @@ func TestSugarDB_HVALS(t *testing.T) {
}
})
}
}
})
t.Run("TestSugarDB_HGet", func(t *testing.T) {
t.Parallel()
func TestSugarDB_HGet(t *testing.T) {
server := createSugarDB()
tests := []struct {
name string
presetValue interface{}
@@ -857,6 +873,7 @@ func TestSugarDB_HGet(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -874,10 +891,11 @@ func TestSugarDB_HGet(t *testing.T) {
}
})
}
}
})
t.Run("TestSugarDB_HMGet", func(t *testing.T) {
t.Parallel()
func TestSugarDB_HMGet(t *testing.T) {
server := createSugarDB()
tests := []struct {
name string
presetValue interface{}
@@ -888,7 +906,7 @@ func TestSugarDB_HMGet(t *testing.T) {
}{
{
name: "1. Get values from existing hash.",
key: "HgetKey1",
key: "HMgetKey1",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 365},
@@ -901,7 +919,7 @@ func TestSugarDB_HMGet(t *testing.T) {
{
name: "2. Return empty slice when attempting to get from non-existed key",
presetValue: nil,
key: "HgetKey2",
key: "HMgetKey2",
fields: []string{"field1"},
want: []string{},
wantErr: false,
@@ -909,7 +927,7 @@ func TestSugarDB_HMGet(t *testing.T) {
{
name: "3. Error when trying to get from a value that is not a hash map",
presetValue: "Default Value",
key: "HgetKey3",
key: "HMgetKey3",
fields: []string{"field1"},
want: nil,
wantErr: true,
@@ -917,6 +935,7 @@ func TestSugarDB_HMGet(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -934,10 +953,11 @@ func TestSugarDB_HMGet(t *testing.T) {
}
})
}
}
})
t.Run("TestSugarDB_HExpire", func(t *testing.T) {
t.Parallel()
func TestSugarDB_HExpire(t *testing.T) {
server := createSugarDB()
tests := []struct {
name string
presetValue interface{}
@@ -1030,6 +1050,7 @@ func TestSugarDB_HExpire(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -1047,10 +1068,11 @@ func TestSugarDB_HExpire(t *testing.T) {
}
})
}
}
})
t.Run("TestSugarDB_HTTL", func(t *testing.T) {
t.Parallel()
func TestSugarDB_HTTL(t *testing.T) {
server := createSugarDB()
tests := []struct {
name string
presetValue interface{}
@@ -1061,7 +1083,7 @@ func TestSugarDB_HTTL(t *testing.T) {
}{
{
name: "1. Get TTL for one field when expireTime is set.",
key: "HExpireKey1",
key: "HTTL_Key1",
presetValue: hash.Hash{
"field1": {Value: "value1", ExpireAt: server.clock.Now().Add(time.Duration(500) * time.Second)},
},
@@ -1076,7 +1098,7 @@ func TestSugarDB_HTTL(t *testing.T) {
"field2": {Value: "value2", ExpireAt: server.clock.Now().Add(time.Duration(500) * time.Second)},
"field3": {Value: "value3", ExpireAt: server.clock.Now().Add(time.Duration(500) * time.Second)},
},
key: "HExpireKey2",
key: "HTTL_Key2",
fields: []string{"field1", "field2", "field3"},
want: []int{500, 500, 500},
wantErr: false,
@@ -1086,14 +1108,14 @@ func TestSugarDB_HTTL(t *testing.T) {
presetValue: hash.Hash{
"field1": {Value: "value1"},
},
key: "HExpireKey3",
key: "HTTL_Key3",
fields: []string{"field1"},
want: []int{-1},
wantErr: false,
},
{
name: "4. Get TTL for multiple fields when expireTime is not set.",
key: "HExpireKey4",
key: "HTTL_Key4",
presetValue: hash.Hash{
"field1": {Value: "value1"},
"field2": {Value: 365},
@@ -1105,7 +1127,7 @@ func TestSugarDB_HTTL(t *testing.T) {
},
{
name: "5. Try to get TTL for key that doesn't exist.",
key: "HExpireKey5",
key: "HTTL_Key5",
presetValue: nil,
fields: []string{"field1"},
want: []int{-2},
@@ -1113,7 +1135,7 @@ func TestSugarDB_HTTL(t *testing.T) {
},
{
name: "6. Try to get TTL for key that isn't a hash.",
key: "HExpireKey6",
key: "HTTL_Key6",
presetValue: "not a hash",
fields: []string{"field1", "field2", "field3"},
want: nil,
@@ -1122,6 +1144,7 @@ func TestSugarDB_HTTL(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -1139,4 +1162,5 @@ func TestSugarDB_HTTL(t *testing.T) {
}
})
}
})
}

View File

@@ -20,8 +20,14 @@ import (
"testing"
)
func TestSugarDB_LLEN(t *testing.T) {
func TestSugarDB_List(t *testing.T) {
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
t.Run("TestSugarDB_LLEN", func(t *testing.T) {
t.Parallel()
tests := []struct {
preset bool
@@ -34,7 +40,7 @@ func TestSugarDB_LLEN(t *testing.T) {
{
name: "1. If key exists and is a list, return the lists length",
preset: true,
key: "key1",
key: "llen_key1",
presetValue: []string{"value1", "value2", "value3", "value4"},
want: 4,
wantErr: false,
@@ -42,14 +48,14 @@ func TestSugarDB_LLEN(t *testing.T) {
{
name: "2. If key does not exist, return 0",
preset: false,
key: "key2",
key: "llen_key2",
presetValue: nil,
want: 0,
wantErr: false,
},
{
preset: true,
key: "key5",
key: "llen_key5",
name: "3. Trying to get lengths on a non-list returns error",
presetValue: "Default value",
want: 0,
@@ -58,6 +64,7 @@ func TestSugarDB_LLEN(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.preset {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -75,10 +82,10 @@ func TestSugarDB_LLEN(t *testing.T) {
}
})
}
}
})
func TestSugarDB_LINDEX(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_LINDEX", func(t *testing.T) {
t.Parallel()
tests := []struct {
preset bool
@@ -93,7 +100,7 @@ func TestSugarDB_LINDEX(t *testing.T) {
name: "1. Return last element within range",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key1",
key: "lindex_key1",
index: 3,
want: "value4",
wantErr: false,
@@ -102,7 +109,7 @@ func TestSugarDB_LINDEX(t *testing.T) {
name: "2. Return first element within range",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key2",
key: "lindex_key2",
index: 0,
want: "value1",
wantErr: false,
@@ -111,7 +118,7 @@ func TestSugarDB_LINDEX(t *testing.T) {
name: "3. Return middle element within range",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key3",
key: "lindex_key3",
index: 1,
want: "value2",
wantErr: false,
@@ -120,7 +127,7 @@ func TestSugarDB_LINDEX(t *testing.T) {
name: "4. If key does not exist, return error",
preset: false,
presetValue: nil,
key: "key4",
key: "lindex_key4",
index: 0,
want: "",
wantErr: false,
@@ -129,7 +136,7 @@ func TestSugarDB_LINDEX(t *testing.T) {
name: "5. Trying to get element by index on a non-list returns error",
preset: true,
presetValue: "Default value",
key: "key5",
key: "lindex_key5",
index: 0,
want: "",
wantErr: true,
@@ -138,7 +145,7 @@ func TestSugarDB_LINDEX(t *testing.T) {
name: "6. Trying to get index out of range index beyond last index",
preset: true,
presetValue: []string{"value1", "value2", "value3"},
key: "key6",
key: "lindex_key6",
index: 3,
want: "",
wantErr: false,
@@ -153,6 +160,7 @@ func TestSugarDB_LINDEX(t *testing.T) {
}
}
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, err := server.LIndex(tt.key, tt.index)
if (err != nil) != tt.wantErr {
t.Errorf("LINDEX() error = %v, wantErr %v", err, tt.wantErr)
@@ -163,10 +171,10 @@ func TestSugarDB_LINDEX(t *testing.T) {
}
})
}
}
})
func TestSugarDB_LMOVE(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_LMOVE", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -183,11 +191,11 @@ func TestSugarDB_LMOVE(t *testing.T) {
name: "1. Move element from LEFT of left list to LEFT of right list",
preset: true,
presetValue: map[string]interface{}{
"source1": []string{"one", "two", "three"},
"destination1": []string{"one", "two", "three"},
"lmove_source1": []string{"one", "two", "three"},
"lmove_destination1": []string{"one", "two", "three"},
},
source: "source1",
destination: "destination1",
source: "lmove_source1",
destination: "lmove_destination1",
whereFrom: "LEFT",
whereTo: "LEFT",
want: true,
@@ -197,11 +205,11 @@ func TestSugarDB_LMOVE(t *testing.T) {
name: "2. Move element from LEFT of left list to RIGHT of right list",
preset: true,
presetValue: map[string]interface{}{
"source2": []string{"one", "two", "three"},
"destination2": []string{"one", "two", "three"},
"lmove_source2": []string{"one", "two", "three"},
"lmove_destination2": []string{"one", "two", "three"},
},
source: "source2",
destination: "destination2",
source: "lmove_source2",
destination: "lmove_destination2",
whereFrom: "LEFT",
whereTo: "RIGHT",
want: true,
@@ -211,11 +219,11 @@ func TestSugarDB_LMOVE(t *testing.T) {
name: "3. Move element from RIGHT of left list to LEFT of right list",
preset: true,
presetValue: map[string]interface{}{
"source3": []string{"one", "two", "three"},
"destination3": []string{"one", "two", "three"},
"lmove_source3": []string{"one", "two", "three"},
"lmove_destination3": []string{"one", "two", "three"},
},
source: "source3",
destination: "destination3",
source: "lmove_source3",
destination: "lmove_destination3",
whereFrom: "RIGHT",
whereTo: "LEFT",
want: true,
@@ -225,11 +233,11 @@ func TestSugarDB_LMOVE(t *testing.T) {
name: "4. Move element from RIGHT of left list to RIGHT of right list",
preset: true,
presetValue: map[string]interface{}{
"source4": []string{"one", "two", "three"},
"destination4": []string{"one", "two", "three"},
"lmove_source4": []string{"one", "two", "three"},
"lmove_destination4": []string{"one", "two", "three"},
},
source: "source4",
destination: "destination4",
source: "lmove_source4",
destination: "lmove_destination4",
whereFrom: "RIGHT",
whereTo: "RIGHT",
want: true,
@@ -239,10 +247,10 @@ func TestSugarDB_LMOVE(t *testing.T) {
name: "5. Throw error when the right list is non-existent",
preset: true,
presetValue: map[string]interface{}{
"source5": []string{"one", "two", "three"},
"lmove_source5": []string{"one", "two", "three"},
},
source: "source5",
destination: "destination5",
source: "lmove_source5",
destination: "lmove_destination5",
whereFrom: "LEFT",
whereTo: "LEFT",
want: false,
@@ -252,11 +260,11 @@ func TestSugarDB_LMOVE(t *testing.T) {
name: "6. Throw error when right list in not a list",
preset: true,
presetValue: map[string]interface{}{
"source6": []string{"one", "two", "tree"},
"destination6": "Default value",
"lmove_source6": []string{"one", "two", "tree"},
"lmove_destination6": "Default value",
},
source: "source6",
destination: "destination6",
source: "lmove_source6",
destination: "lmove_destination6",
whereFrom: "LEFT",
whereTo: "LEFT",
want: false,
@@ -266,10 +274,10 @@ func TestSugarDB_LMOVE(t *testing.T) {
name: "7. Throw error when left list is non-existent",
preset: true,
presetValue: map[string]interface{}{
"destination7": []string{"one", "two", "three"},
"lmove_destination7": []string{"one", "two", "three"},
},
source: "source7",
destination: "destination7",
source: "lmove_source7",
destination: "lmove_destination7",
whereFrom: "LEFT",
whereTo: "LEFT",
want: false,
@@ -279,11 +287,11 @@ func TestSugarDB_LMOVE(t *testing.T) {
name: "8. Throw error when left list is not a list",
preset: true,
presetValue: map[string]interface{}{
"source8": "Default value",
"destination8": []string{"one", "two", "three"},
"lmove_source8": "Default value",
"lmove_destination8": []string{"one", "two", "three"},
},
source: "source8",
destination: "destination8",
source: "lmove_source8",
destination: "lmove_destination8",
whereFrom: "LEFT",
whereTo: "LEFT",
want: false,
@@ -293,8 +301,8 @@ func TestSugarDB_LMOVE(t *testing.T) {
name: "9. Throw error when WHEREFROM argument is not LEFT/RIGHT",
preset: false,
presetValue: map[string]interface{}{},
source: "source9",
destination: "destination9",
source: "lmove_source9",
destination: "lmove_destination9",
whereFrom: "LEFT",
whereTo: "LEFT",
want: false,
@@ -304,8 +312,8 @@ func TestSugarDB_LMOVE(t *testing.T) {
name: "10. Throw error when WHERETO argument is not LEFT/RIGHT",
preset: false,
presetValue: map[string]interface{}{},
source: "source10",
destination: "destination10",
source: "lmove_source10",
destination: "lmove_destination10",
whereFrom: "LEFT",
whereTo: "LEFT",
want: false,
@@ -314,6 +322,7 @@ func TestSugarDB_LMOVE(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.preset {
for k, v := range tt.presetValue {
err := presetValue(server, context.Background(), k, v)
@@ -333,10 +342,10 @@ func TestSugarDB_LMOVE(t *testing.T) {
}
})
}
}
})
func TestSugarDB_POP(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_POP", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -352,7 +361,7 @@ func TestSugarDB_POP(t *testing.T) {
name: "1. LPOP returns last element and removed first element from the list",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key1",
key: "pop_key1",
count: 1,
popFunc: server.LPop,
want: []string{"value1"},
@@ -362,7 +371,7 @@ func TestSugarDB_POP(t *testing.T) {
name: "2. RPOP returns last element and removed last element from the list",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key2",
key: "pop_key2",
count: 1,
popFunc: server.RPop,
want: []string{"value4"},
@@ -371,7 +380,7 @@ func TestSugarDB_POP(t *testing.T) {
{
name: "3. Trying to execute LPOP from a non-list item return an error",
preset: true,
key: "key3",
key: "pop_key3",
count: 1,
presetValue: "Default value",
popFunc: server.LPop,
@@ -382,7 +391,7 @@ func TestSugarDB_POP(t *testing.T) {
name: "4. Trying to execute RPOP from a non-list item return an error",
preset: true,
presetValue: "Default value",
key: "key6",
key: "pop_key6",
count: 1,
popFunc: server.RPop,
want: []string{},
@@ -391,6 +400,7 @@ func TestSugarDB_POP(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.preset {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -408,10 +418,10 @@ func TestSugarDB_POP(t *testing.T) {
}
})
}
}
})
func TestSugarDB_LPUSH(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_LPUSH", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -427,7 +437,7 @@ func TestSugarDB_LPUSH(t *testing.T) {
name: "1. LPUSHX to existing list prepends the element to the list",
preset: true,
presetValue: []string{"1", "2", "4", "5"},
key: "key1",
key: "lpush_key1",
values: []string{"value1", "value2"},
lpushFunc: server.LPushX,
want: 6,
@@ -437,7 +447,7 @@ func TestSugarDB_LPUSH(t *testing.T) {
name: "2. LPUSH on existing list prepends the elements to the list",
preset: true,
presetValue: []string{"1", "2", "4", "5"},
key: "key2",
key: "lpush_key2",
values: []string{"value1", "value2"},
lpushFunc: server.LPush,
want: 6,
@@ -447,7 +457,7 @@ func TestSugarDB_LPUSH(t *testing.T) {
name: "3. LPUSH on non-existent list creates the list",
preset: false,
presetValue: nil,
key: "key3",
key: "lpush_key3",
values: []string{"value1", "value2"},
lpushFunc: server.LPush,
want: 2,
@@ -457,7 +467,7 @@ func TestSugarDB_LPUSH(t *testing.T) {
name: "4. LPUSHX command returns error on non-existent list",
preset: false,
presetValue: nil,
key: "key4",
key: "lpush_key4",
values: []string{"value1", "value2"},
lpushFunc: server.LPushX,
want: 0,
@@ -466,6 +476,7 @@ func TestSugarDB_LPUSH(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.preset {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -483,10 +494,10 @@ func TestSugarDB_LPUSH(t *testing.T) {
}
})
}
}
})
func TestSugarDB_RPUSH(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_RPUSH", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -502,7 +513,7 @@ func TestSugarDB_RPUSH(t *testing.T) {
name: "1. RPUSH on non-existent list creates the list",
preset: false,
presetValue: nil,
key: "key1",
key: "rpush_key1",
values: []string{"value1", "value2"},
rpushFunc: server.RPush,
want: 2,
@@ -512,7 +523,7 @@ func TestSugarDB_RPUSH(t *testing.T) {
name: "2. RPUSHX command returns error on non-existent list",
preset: false,
presetValue: nil,
key: "key2",
key: "rpush_key2",
values: []string{"value1", "value2"},
rpushFunc: server.RPushX,
want: 0,
@@ -521,6 +532,7 @@ func TestSugarDB_RPUSH(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.preset {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -538,10 +550,10 @@ func TestSugarDB_RPUSH(t *testing.T) {
}
})
}
}
})
func TestSugarDB_LRANGE(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_LRANGE", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -560,7 +572,7 @@ func TestSugarDB_LRANGE(t *testing.T) {
name: "1. Return sub-list within range.",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8"},
key: "key1",
key: "lrange_key1",
start: 3,
end: 6,
want: []string{"value4", "value5", "value6", "value7"},
@@ -570,7 +582,7 @@ func TestSugarDB_LRANGE(t *testing.T) {
name: "2. Return sub-list from start index to the end of the list when end index is -1",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8"},
key: "key2",
key: "lrange_key2",
start: 3,
end: -1,
want: []string{"value4", "value5", "value6", "value7", "value8"},
@@ -580,7 +592,7 @@ func TestSugarDB_LRANGE(t *testing.T) {
name: "3. Return empty list when the end index is less than start index",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8"},
key: "key3",
key: "lrange_key3",
start: 3,
end: 0,
want: []string{},
@@ -590,7 +602,7 @@ func TestSugarDB_LRANGE(t *testing.T) {
name: "4. If key does not exist, return empty list",
preset: false,
presetValue: nil,
key: "key4",
key: "lrange_key4",
start: 0,
end: 2,
want: []string{},
@@ -601,7 +613,7 @@ func TestSugarDB_LRANGE(t *testing.T) {
name: "5. Error when executing command on non-list command",
preset: true,
presetValue: "Default value",
key: "key5",
key: "lrange_key5",
start: 0,
end: 3,
want: nil,
@@ -611,7 +623,7 @@ func TestSugarDB_LRANGE(t *testing.T) {
name: "6. Start index calculated from end of list when start index is less than 0",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key6",
key: "lrange_key6",
start: -3,
end: 3,
want: []string{"value2", "value3", "value4"},
@@ -621,7 +633,7 @@ func TestSugarDB_LRANGE(t *testing.T) {
name: "7. Empty list when start index is higher than the length of the list",
preset: true,
presetValue: []string{"value1", "value2", "value3"},
key: "key7",
key: "lrange_key7",
start: 10,
end: 11,
want: []string{},
@@ -631,7 +643,7 @@ func TestSugarDB_LRANGE(t *testing.T) {
name: "8. One element when start and end indices are equal",
preset: true,
presetValue: []string{"value1", "value2", "value3"},
key: "key8",
key: "lrange_key8",
start: 1,
end: 1,
want: []string{"value2"},
@@ -640,6 +652,7 @@ func TestSugarDB_LRANGE(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.preset {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -657,10 +670,10 @@ func TestSugarDB_LRANGE(t *testing.T) {
}
})
}
}
})
func TestSugarDB_LREM(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_LREM", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -676,7 +689,7 @@ func TestSugarDB_LREM(t *testing.T) {
name: "1. Remove the first 3 elements that appear in the list",
preset: true,
presetValue: []string{"1", "2", "4", "4", "5", "6", "7", "4", "8", "4", "9", "10", "5", "4"},
key: "key1",
key: "lrem_key1",
count: 3,
value: "4",
want: 3,
@@ -686,7 +699,7 @@ func TestSugarDB_LREM(t *testing.T) {
name: "2. Remove the last 3 elements that appear in the list",
preset: true,
presetValue: []string{"1", "2", "4", "4", "5", "6", "7", "4", "8", "4", "9", "10", "5", "4"},
key: "key2",
key: "lrem_key2",
count: -3,
value: "4",
want: 3,
@@ -696,7 +709,7 @@ func TestSugarDB_LREM(t *testing.T) {
name: "3. Throw error on non-list item",
preset: true,
presetValue: "Default value",
key: "LremKey8",
key: "lrem_key8",
count: 0,
value: "value1",
want: 0,
@@ -704,6 +717,8 @@ func TestSugarDB_LREM(t *testing.T) {
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.preset {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -711,7 +726,6 @@ func TestSugarDB_LREM(t *testing.T) {
return
}
}
t.Run(tt.name, func(t *testing.T) {
got, err := server.LRem(tt.key, tt.count, tt.value)
if (err != nil) != tt.wantErr {
t.Errorf("LREM() error = %v, wantErr %v", err, tt.wantErr)
@@ -722,10 +736,10 @@ func TestSugarDB_LREM(t *testing.T) {
}
})
}
}
})
func TestSugarDB_LSET(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_LSET", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -741,7 +755,7 @@ func TestSugarDB_LSET(t *testing.T) {
name: "1. Return last element within range",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key1",
key: "lset_key1",
index: 3,
value: "new-value",
want: true,
@@ -751,7 +765,7 @@ func TestSugarDB_LSET(t *testing.T) {
name: "2. Return first element within range",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key2",
key: "lset_key2",
index: 0,
value: "new-value",
want: true,
@@ -761,7 +775,7 @@ func TestSugarDB_LSET(t *testing.T) {
name: "3. Return middle element within range",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key3",
key: "lset_key3",
index: 1,
value: "new-value",
want: true,
@@ -771,7 +785,7 @@ func TestSugarDB_LSET(t *testing.T) {
name: "4. If key does not exist, return error",
preset: false,
presetValue: nil,
key: "key4",
key: "lset_key4",
index: 0,
value: "element",
want: false,
@@ -781,7 +795,7 @@ func TestSugarDB_LSET(t *testing.T) {
name: "5. Trying to get element by index on a non-list returns error",
preset: true,
presetValue: "Default value",
key: "key5",
key: "lset_key5",
index: 0,
value: "element",
want: false,
@@ -791,7 +805,7 @@ func TestSugarDB_LSET(t *testing.T) {
name: "6. Trying to get index out of range index beyond last index",
preset: true,
presetValue: []string{"value1", "value2", "value3"},
key: "key6",
key: "lset_key6",
index: 3,
value: "element",
want: false,
@@ -801,7 +815,7 @@ func TestSugarDB_LSET(t *testing.T) {
name: "7. Trying to get index out of range with negative index",
preset: true,
presetValue: []string{"value1", "value2", "value3"},
key: "key7",
key: "lset_key7",
index: -4,
value: "element",
want: false,
@@ -810,6 +824,7 @@ func TestSugarDB_LSET(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.preset {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -827,10 +842,10 @@ func TestSugarDB_LSET(t *testing.T) {
}
})
}
}
})
func TestSugarDB_LTRIM(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_LTRIM", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
@@ -849,7 +864,7 @@ func TestSugarDB_LTRIM(t *testing.T) {
name: "1. Return trim within range",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8"},
key: "key1",
key: "ltrim_key1",
start: 3,
end: 6,
want: true,
@@ -859,7 +874,7 @@ func TestSugarDB_LTRIM(t *testing.T) {
name: "2. Return element from start index to end index when end index is greater than length of the list",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4", "value5", "value6", "value7", "value8"},
key: "key2",
key: "ltrim_key2",
start: 5,
end: -1,
want: true,
@@ -869,7 +884,7 @@ func TestSugarDB_LTRIM(t *testing.T) {
name: "3. Return false when end index is smaller than start index.",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key3",
key: "ltrim_key3",
start: 3,
end: 1,
want: true,
@@ -879,7 +894,7 @@ func TestSugarDB_LTRIM(t *testing.T) {
name: "4. If key does not exist, return true",
preset: false,
presetValue: nil,
key: "key4",
key: "ltrim_key4",
start: 0,
end: 2,
want: true,
@@ -889,7 +904,7 @@ func TestSugarDB_LTRIM(t *testing.T) {
name: "5. Trying to get element by index on a non-list returns error",
preset: true,
presetValue: "Default value",
key: "key5",
key: "ltrim_key5",
start: 0,
end: 3,
want: false,
@@ -899,7 +914,7 @@ func TestSugarDB_LTRIM(t *testing.T) {
name: "6. Trim from the end when start index is less than 0",
preset: true,
presetValue: []string{"value1", "value2", "value3", "value4"},
key: "key6",
key: "ltrim_key6",
start: -3,
end: 3,
want: true,
@@ -909,7 +924,7 @@ func TestSugarDB_LTRIM(t *testing.T) {
name: "7. Return true when start index is higher than the length of the list",
preset: true,
presetValue: []string{"value1", "value2", "value3"},
key: "key7",
key: "ltrim_key7",
start: 10,
end: 11,
want: true,
@@ -918,6 +933,7 @@ func TestSugarDB_LTRIM(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.preset {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -935,4 +951,5 @@ func TestSugarDB_LTRIM(t *testing.T) {
}
})
}
})
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -19,9 +19,16 @@ import (
"testing"
)
func TestSugarDB_SUBSTR(t *testing.T) {
func TestSugarDB_String(t *testing.T) {
server := createSugarDB()
t.Cleanup(func() {
server.ShutDown()
})
t.Run("TestSugarDB_SUBSTR", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
presetValue interface{}
@@ -34,7 +41,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
}{
{
name: "Return substring within the range of the string",
key: "key1",
key: "substr_key1",
substrFunc: server.SubStr,
presetValue: "Test String One",
start: 5,
@@ -44,7 +51,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
},
{
name: "Return substring at the end of the string with exact end index",
key: "key2",
key: "substr_key2",
substrFunc: server.SubStr,
presetValue: "Test String Two",
start: 12,
@@ -54,7 +61,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
},
{
name: "Return substring at the end of the string with end index greater than length",
key: "key3",
key: "substr_key3",
substrFunc: server.SubStr,
presetValue: "Test String Three",
start: 12,
@@ -63,7 +70,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
},
{
name: "Return the substring at the start of the string with 0 start index",
key: "key4",
key: "substr_key4",
substrFunc: server.SubStr,
presetValue: "Test String Four",
start: 0,
@@ -75,7 +82,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
// Return the substring with negative start index.
// Substring should begin abs(start) from the end of the string when start is negative.
name: "Return the substring with negative start index",
key: "key5",
key: "substr_key5",
substrFunc: server.SubStr,
presetValue: "Test String Five",
start: -11,
@@ -87,7 +94,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
// Return reverse substring with end index smaller than start index.
// When end index is smaller than start index, the 2 indices are reversed.
name: "Return reverse substring with end index smaller than start index",
key: "key6",
key: "substr_key6",
substrFunc: server.SubStr,
presetValue: "Test String Six",
start: 4,
@@ -96,7 +103,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
},
{
name: "Return substring within the range of the string",
key: "key7",
key: "substr_key7",
substrFunc: server.GetRange,
presetValue: "Test String One",
start: 5,
@@ -106,7 +113,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
},
{
name: "Return substring at the end of the string with exact end index",
key: "key8",
key: "substr_key8",
substrFunc: server.GetRange,
presetValue: "Test String Two",
start: 12,
@@ -116,7 +123,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
},
{
name: "Return substring at the end of the string with end index greater than length",
key: "key9",
key: "substr_key9",
substrFunc: server.GetRange,
presetValue: "Test String Three",
start: 12,
@@ -125,7 +132,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
},
{
name: "Return the substring at the start of the string with 0 start index",
key: "key10",
key: "substr_key10",
substrFunc: server.GetRange,
presetValue: "Test String Four",
start: 0,
@@ -137,7 +144,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
// Return the substring with negative start index.
// Substring should begin abs(start) from the end of the string when start is negative.
name: "Return the substring with negative start index",
key: "key11",
key: "substr_key11",
substrFunc: server.GetRange,
presetValue: "Test String Five",
start: -11,
@@ -149,7 +156,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
// Return reverse substring with end index smaller than start index.
// When end index is smaller than start index, the 2 indices are reversed.
name: "Return reverse substring with end index smaller than start index",
key: "key12",
key: "substr_key12",
substrFunc: server.GetRange,
presetValue: "Test String Six",
start: 4,
@@ -159,6 +166,7 @@ func TestSugarDB_SUBSTR(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -176,11 +184,10 @@ func TestSugarDB_SUBSTR(t *testing.T) {
}
})
}
}
func TestSugarDB_SETRANGE(t *testing.T) {
server := createSugarDB()
})
t.Run("TestSugarDB_SETRANGE", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
presetValue interface{}
@@ -192,7 +199,7 @@ func TestSugarDB_SETRANGE(t *testing.T) {
}{
{
name: "Test that SETRANGE on non-existent string creates new string",
key: "key1",
key: "setrange_key1",
presetValue: "",
offset: 10,
new: "New String Value",
@@ -201,7 +208,7 @@ func TestSugarDB_SETRANGE(t *testing.T) {
},
{
name: "Test SETRANGE with an offset that leads to a longer resulting string",
key: "key2",
key: "setrange_key2",
presetValue: "Original String Value",
offset: 16,
new: "Portion Replaced With This New String",
@@ -210,7 +217,7 @@ func TestSugarDB_SETRANGE(t *testing.T) {
},
{
name: "SETRANGE with negative offset prepends the string",
key: "key3",
key: "setrange_key3",
presetValue: "This is a preset value",
offset: -10,
new: "Prepended ",
@@ -219,7 +226,7 @@ func TestSugarDB_SETRANGE(t *testing.T) {
},
{
name: "SETRANGE with offset that embeds new string inside the old string",
key: "key4",
key: "setrange_key4",
presetValue: "This is a preset value",
offset: 0,
new: "That",
@@ -228,7 +235,7 @@ func TestSugarDB_SETRANGE(t *testing.T) {
},
{
name: "SETRANGE with offset longer than original lengths appends the string",
key: "key5",
key: "setrange_key5",
presetValue: "This is a preset value",
offset: 100,
new: " Appended",
@@ -237,7 +244,7 @@ func TestSugarDB_SETRANGE(t *testing.T) {
},
{
name: "SETRANGE with offset on the last character replaces last character with new string",
key: "key6",
key: "setrange_key6",
presetValue: "This is a preset value",
offset: len("This is a preset value") - 1,
new: " replaced",
@@ -247,6 +254,7 @@ func TestSugarDB_SETRANGE(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -264,11 +272,10 @@ func TestSugarDB_SETRANGE(t *testing.T) {
}
})
}
}
func TestSugarDB_STRLEN(t *testing.T) {
server := createSugarDB()
})
t.Run("TestSugarDB_STRLEN", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
presetValue interface{}
@@ -278,14 +285,14 @@ func TestSugarDB_STRLEN(t *testing.T) {
}{
{
name: "Return the correct string length for an existing string",
key: "key1",
key: "strlen_key1",
presetValue: "Test String",
want: len("Test String"),
wantErr: false,
},
{
name: "If the string does not exist, return 0",
key: "key2",
key: "strlen_key2",
presetValue: "",
want: 0,
wantErr: false,
@@ -293,6 +300,7 @@ func TestSugarDB_STRLEN(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -310,10 +318,10 @@ func TestSugarDB_STRLEN(t *testing.T) {
}
})
}
}
})
func TestSugarDB_APPEND(t *testing.T) {
server := createSugarDB()
t.Run("TestSugarDB_APPEND", func(t *testing.T) {
t.Parallel()
tests := []struct {
name string
presetValue interface{}
@@ -324,7 +332,7 @@ func TestSugarDB_APPEND(t *testing.T) {
}{
{
name: "Test APPEND with no preset value",
key: "key1",
key: "append_key1",
value: "Hello ",
want: 6,
wantErr: false,
@@ -332,14 +340,14 @@ func TestSugarDB_APPEND(t *testing.T) {
{
name: "Test APPEND with preset value",
presetValue: "Hello ",
key: "key2",
key: "append_key2",
value: "World",
want: 11,
wantErr: false,
},
{
name: "Test APPEND with integer preset value",
key: "key3",
key: "append_key3",
presetValue: 10,
value: "Hello ",
wantErr: true,
@@ -347,6 +355,7 @@ func TestSugarDB_APPEND(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
if tt.presetValue != nil {
err := presetValue(server, context.Background(), tt.key, tt.presetValue)
if err != nil {
@@ -364,4 +373,5 @@ func TestSugarDB_APPEND(t *testing.T) {
}
})
}
})
}

View File

@@ -212,6 +212,8 @@ func makeCluster(size int) ([]ClientServerPair, error) {
}
func Test_Cluster(t *testing.T) {
t.Parallel()
nodes, err := makeCluster(5)
if err != nil {
t.Error(err)
@@ -274,9 +276,7 @@ func Test_Cluster(t *testing.T) {
// Yield
ticker := time.NewTicker(200 * time.Millisecond)
defer func() {
ticker.Stop()
}()
defer ticker.Stop()
<-ticker.C
// Check if the data has been replicated on a quorum (majority of the cluster).
@@ -322,10 +322,8 @@ func Test_Cluster(t *testing.T) {
// Yield
ticker := time.NewTicker(200 * time.Millisecond)
defer func() {
ticker.Stop()
}()
<-ticker.C
ticker.Stop()
// Check if the data has been replicated on a quorum (majority of the cluster).
quorum := int(math.Ceil(float64(len(nodes)/2)) + 1)
@@ -963,8 +961,18 @@ func Test_Standalone(t *testing.T) {
name: "1. Snapshot in embedded instance",
dataDir: path.Join(dataDir, "embedded_instance"),
values: map[int]map[string]string{
0: {"key5": "value-05", "key6": "value-06", "key7": "value-07", "key8": "value-08"},
1: {"key5": "value-15", "key6": "value-16", "key7": "value-17", "key8": "value-18"},
0: {
"test_snapshot_key5": "value-05",
"test_snapshot_key6": "value-06",
"test_snapshot_key7": "value-07",
"test_snapshot_key8": "value-08",
},
1: {
"test_snapshot_key5": "value-15",
"test_snapshot_key6": "value-16",
"test_snapshot_key7": "value-17",
"test_snapshot_key8": "value-18",
},
},
snapshotFunc: func(mockServer *SugarDB) error {
if _, err := mockServer.Save(); err != nil {
@@ -1022,7 +1030,7 @@ func Test_Standalone(t *testing.T) {
}
// Yield to allow snapshot to complete sync.
ticker := time.NewTicker(20 * time.Millisecond)
ticker := time.NewTicker(200 * time.Millisecond)
<-ticker.C
ticker.Stop()
@@ -1121,10 +1129,10 @@ func Test_Standalone(t *testing.T) {
<-ticker.C
// Rewrite AOF
if _, err := mockServer.RewriteAOF(); err != nil {
t.Error(err)
return
}
mockServer.RewriteAOF()
// Yield
<-ticker.C
// Perform write commands from "after-rewrite"
for key, value := range data["after-rewrite"] {