Skip to content

Commit cb37b91

Browse files
committed
fix test suite
1 parent a5ea7d6 commit cb37b91

10 files changed

+568
-557
lines changed

.github/workflows/main.yml

+10-10
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ on:
99
pull_request:
1010
branches: [ "master" ]
1111
workflow_dispatch:
12-
12+
1313

1414
jobs:
1515

1616
build:
1717
runs-on: ubuntu-latest
1818
steps:
19-
- uses: actions/checkout@v3
20-
21-
- uses: actions/setup-go@v3
22-
with:
23-
go-version: '1.18'
24-
- run: go test -v -coverprofile=profile.cov ./...
19+
- uses: actions/checkout@v3
20+
21+
- uses: actions/setup-go@v3
22+
with:
23+
go-version: '1.18'
24+
- run: go test -v -coverpkg=./core,./ -coverprofile=profile.cov ./...
2525

26-
- uses: shogo82148/actions-goveralls@v1
27-
with:
28-
path-to-profile: profile.cov
26+
- uses: shogo82148/actions-goveralls@v1
27+
with:
28+
path-to-profile: profile.cov

cases/listpack.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[
22
{"db":0,"key":"l","size":124,"type":"list","encoding":"quicklist2","values":["1","20000","aaaa","4","16380","-16380","1048576","268435456","8589934592"]},
3-
{"db":0,"key":"z","size":1308,"type":"zset","encoding":"listpack","entries":[{"member":"11","score":-8589934592},{"member":"9","score":-268435456},{"member":"7","score":-1048576},{"member":"5","score":-16380},{"member":"12","score":-2000},{"member":"3","score":0},{"member":"1","score":1},{"member":"2","score":2000},{"member":"4","score":16380},{"member":"6","score":1048576},{"member":"8","score":268435456},{"member":"10","score":8589934592}]},
3+
{"db":0,"key":"z","size":1292,"type":"zset","encoding":"listpack","entries":[{"member":"11","score":-8589934592},{"member":"9","score":-268435456},{"member":"7","score":-1048576},{"member":"5","score":-16380},{"member":"12","score":-2000},{"member":"3","score":0},{"member":"1","score":1},{"member":"2","score":2000},{"member":"4","score":16380},{"member":"6","score":1048576},{"member":"8","score":268435456},{"member":"10","score":8589934592}]},
44
{"db":0,"key":"h","size":620,"type":"hash","encoding":"listpack","hash":{"1":"1","10":"8589934592","11":"8589934592","2":"2000","3":"aaaaaaaaaaaaaaaa","4":"16380","5":"-16380","6":"1048576","7":"-1048576","8":"268435456","9":"-268435456"}}
55
]

cases/rdb_version_8_with_64b_length_and_scores.json

+1-1
Large diffs are not rendered by default.

cases/regular_sorted_set.json

+1-1
Large diffs are not rendered by default.

core/specialobj_test.go

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package core
2+
3+
import (
4+
"github.com/hdt3213/rdb/model"
5+
"os"
6+
"path/filepath"
7+
"testing"
8+
)
9+
10+
func TestWithSpecialObject(t *testing.T) {
11+
rdbFilename := filepath.Join("../cases", "memory.rdb")
12+
rdbFile, err := os.Open(rdbFilename)
13+
if err != nil {
14+
t.Errorf("open rdb %s failed, %v", rdbFilename, err)
15+
return
16+
}
17+
defer func() {
18+
_ = rdbFile.Close()
19+
}()
20+
expectAux := map[string]string{
21+
"redis-ver": "6.0.6",
22+
"redis-bits": "64",
23+
"ctime": "1644136130",
24+
"used-mem": "1167584",
25+
"aof-preamble": "0",
26+
}
27+
expectKeyCount := map[int]uint64{
28+
0: 7,
29+
}
30+
expectTTLCount := map[int]uint64{
31+
0: 1,
32+
}
33+
var auxCount, dbSizeCount int
34+
dec := NewDecoder(rdbFile).WithSpecialOpCode()
35+
err = dec.Parse(func(object model.RedisObject) bool {
36+
switch o := object.(type) {
37+
case *model.AuxObject:
38+
if o.GetType() != model.AuxType {
39+
t.Error("aux obj with wrong type")
40+
}
41+
expectValue := expectAux[o.Key]
42+
if o.Value != expectValue {
43+
t.Errorf("aux %s has wrong value", o.GetKey())
44+
}
45+
auxCount++
46+
case *model.DBSizeObject:
47+
dbSizeCount++
48+
if o.KeyCount != expectKeyCount[o.DB] {
49+
t.Errorf("db %d has wrong key count", o.DB)
50+
}
51+
if o.TTLCount != expectTTLCount[o.DB] {
52+
t.Errorf("db %d has wrong ttl count", o.DB)
53+
}
54+
}
55+
return true
56+
})
57+
if err != nil {
58+
t.Error(err)
59+
}
60+
if auxCount != len(expectAux) {
61+
t.Error("wrong aux object count")
62+
}
63+
if dbSizeCount != 1 {
64+
t.Error("wrong db size object count")
65+
}
66+
}

helper/bigkey_test.go

+90
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package helper
33
import (
44
"github.com/hdt3213/rdb/model"
55
"math/rand"
6+
"os"
7+
"path/filepath"
68
"sort"
79
"strconv"
810
"testing"
@@ -47,3 +49,91 @@ func TestRedisHeap_Append(t *testing.T) {
4749
}
4850
}
4951
}
52+
53+
func TestFindLargestKeys(t *testing.T) {
54+
err := os.MkdirAll("tmp", os.ModePerm)
55+
if err != nil {
56+
return
57+
}
58+
defer func() {
59+
err := os.RemoveAll("tmp")
60+
if err != nil {
61+
t.Logf("remove tmp directory failed: %v", err)
62+
}
63+
}()
64+
srcRdb := filepath.Join("../cases", "memory.rdb")
65+
expectFile := filepath.Join("../cases", "largest.csv")
66+
outputFilePath := filepath.Join("tmp", "largest.csv")
67+
output, err := os.Create(outputFilePath)
68+
if err != nil {
69+
t.Errorf("create output file failed: %v", err)
70+
return
71+
}
72+
err = FindBiggestKeys(srcRdb, 5, output)
73+
if err != nil {
74+
t.Errorf("FindLargestKeys failed: %v", err)
75+
}
76+
err = output.Close()
77+
if err != nil {
78+
t.Errorf("error occurs during close output %s, err: %v", srcRdb, err)
79+
return
80+
}
81+
equals, err := compareFileByLine(t, outputFilePath, expectFile)
82+
if err != nil {
83+
t.Errorf("error occurs during compare %s, err: %v", srcRdb, err)
84+
return
85+
}
86+
if !equals {
87+
t.Errorf("result is not equal of %s", srcRdb)
88+
return
89+
}
90+
91+
err = FindBiggestKeys("", 5, os.Stdout)
92+
if err == nil || err.Error() != "src file path is required" {
93+
t.Error("failed when empty output")
94+
}
95+
err = FindBiggestKeys("cases/memory.rdb", 0, os.Stdout)
96+
if err == nil || err.Error() != "n must greater than 0" {
97+
t.Error("failed when empty output")
98+
}
99+
}
100+
101+
func TestFindBiggestKeyWithRegex(t *testing.T) {
102+
err := os.MkdirAll("tmp", os.ModePerm)
103+
if err != nil {
104+
return
105+
}
106+
defer func() {
107+
err := os.RemoveAll("tmp")
108+
if err != nil {
109+
t.Logf("remove tmp directory failed: %v", err)
110+
}
111+
}()
112+
srcRdb := filepath.Join("../cases", "memory.rdb")
113+
actualFile := filepath.Join("../cases", "memory_regex.biggest.csv")
114+
expectFile := filepath.Join("../cases", "memory_regex.biggest.csv")
115+
output, err := os.Create(actualFile)
116+
if err != nil {
117+
t.Errorf("create output file failed: %v", err)
118+
return
119+
}
120+
err = FindBiggestKeys(srcRdb, 2, output, WithRegexOption("^l.*"))
121+
if err != nil {
122+
t.Errorf("error occurs during parse, err: %v", err)
123+
return
124+
}
125+
equals, err := compareFileByLine(t, actualFile, expectFile)
126+
if err != nil {
127+
t.Errorf("error occurs during compare err: %v", err)
128+
return
129+
}
130+
if !equals {
131+
t.Errorf("result is not equal")
132+
return
133+
}
134+
135+
err = FindBiggestKeys(srcRdb, 2, output, WithRegexOption(`(i)\1`))
136+
if err == nil {
137+
t.Error("expect error")
138+
}
139+
}

0 commit comments

Comments
 (0)