Skip to content

Commit 1601742

Browse files
authored
Merge pull request #9 from Nailcui/main
feat: init test data
2 parents 634afc3 + 619d196 commit 1601742

File tree

4 files changed

+498
-43
lines changed

4 files changed

+498
-43
lines changed

README.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,38 @@ curl http://localhost:8080/set/bucket001/foo
2020
# List all list
2121
curl http://localhost:8080/list/bucket001/key1?start=0&end=10
2222
```
23+
24+
**modify example data**
25+
26+
You can modify the tests in the sample program by modifying the file "example/init.yaml".
27+
28+
The file format is as follows:
29+
30+
```yaml
31+
# kv data
32+
kv:
33+
bucket-a: # bucket name
34+
key-1: # key
35+
str: value-1 # value
36+
key-2: # key
37+
base64: dW50c2Ri # data in base64 format
38+
# list data
39+
list:
40+
bucket-b: # bucket name
41+
key-1:
42+
- str: value-1
43+
- str: value-2
44+
# set data
45+
set:
46+
bucket-c: # bucket name
47+
key-1:
48+
- str: value-1
49+
- str: value-2
50+
# sorted-set data
51+
zset:
52+
bucket-d: # bucket name
53+
key-1:
54+
- score: 1660575966082
55+
str: value
56+
57+
```

examples/hello.go

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,49 +23,8 @@ func main() {
2323
}
2424
}()
2525

26-
testDB(db)
26+
// init test data
27+
initData(db)
2728

2829
select {}
2930
}
30-
31-
func testDB(db *nutsdb.DB) {
32-
var (
33-
bucket = "bucket001"
34-
35-
key = []byte("foo")
36-
value = []byte("bar")
37-
)
38-
39-
if err := db.Update(func(tx *nutsdb.Tx) error {
40-
if err := tx.SAdd(bucket, key, value); err != nil {
41-
return err
42-
}
43-
44-
if err := tx.SAdd(bucket, key, []byte("bar2")); err != nil {
45-
return err
46-
}
47-
48-
_ = tx.RPush(bucket, []byte("key1"), []byte("value1"))
49-
_ = tx.RPush(bucket, []byte("key1"), []byte("value2"))
50-
51-
return nil
52-
53-
}); err != nil {
54-
log.Fatal(err)
55-
}
56-
57-
if err := db.View(func(tx *nutsdb.Tx) error {
58-
items, err := tx.SMembers(bucket, key)
59-
if err != nil {
60-
return err
61-
}
62-
63-
for _, item := range items {
64-
log.Printf("item: %s", item)
65-
}
66-
return nil
67-
}); err != nil {
68-
69-
log.Fatal(err)
70-
}
71-
}

examples/init.go

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
package main
2+
3+
import (
4+
"encoding/base64"
5+
"fmt"
6+
"github.com/xujiajun/nutsdb"
7+
"gopkg.in/yaml.v2"
8+
"os"
9+
"time"
10+
)
11+
12+
type initValueType struct {
13+
Score float64 `yaml:"score"`
14+
Str string `yaml:"str"`
15+
Base64 string `yaml:"base64"`
16+
}
17+
18+
type initDataType struct {
19+
Kv map[string]map[string]initValueType `yaml:"kv"`
20+
List map[string]map[string][]initValueType `yaml:"list"`
21+
Set map[string]map[string][]initValueType `yaml:"set"`
22+
ZSet map[string]map[string][]initValueType `yaml:"zset"`
23+
}
24+
25+
func initData(db *nutsdb.DB) {
26+
bytes, err := os.ReadFile("examples/init.yaml")
27+
if err != nil {
28+
panic(err)
29+
}
30+
var yamlData initDataType
31+
err = yaml.Unmarshal(bytes, &yamlData)
32+
if err != nil {
33+
panic(err)
34+
}
35+
36+
// init kv data
37+
initKvData(db, &yamlData)
38+
39+
// init list data
40+
initListData(db, &yamlData)
41+
42+
// init set data
43+
initSetData(db, &yamlData)
44+
45+
// init sorted set data
46+
initSortedSetData(db, &yamlData)
47+
}
48+
49+
func initKvData(db *nutsdb.DB, yamlData *initDataType) {
50+
_ = db.Update(func(tx *nutsdb.Tx) error {
51+
// init data from yaml
52+
for bucket, kv := range yamlData.Kv {
53+
for key, value := range kv {
54+
_ = tx.Put(bucket, []byte(key), getValue(value), 86_400_000)
55+
}
56+
}
57+
// multi value
58+
for i := 0; i < 200; i++ {
59+
_ = tx.Put("kv-bucket", []byte("key"), []byte(fmt.Sprintf("value-%d", i)), 86_400_000)
60+
}
61+
// multi key
62+
for i := 0; i < 200; i++ {
63+
_ = tx.Put("kv-bucket", []byte(fmt.Sprintf("key-%d", i)), []byte("value"), 86_400_000)
64+
}
65+
// multi bucket
66+
for i := 0; i < 200; i++ {
67+
_ = tx.Put(fmt.Sprintf("kv-bucket-%d", i), []byte("key"), []byte("value"), 86_400_000)
68+
}
69+
return nil
70+
})
71+
}
72+
73+
func initListData(db *nutsdb.DB, yamlData *initDataType) {
74+
_ = db.Update(func(tx *nutsdb.Tx) error {
75+
// init data from yaml
76+
for bucket, kv := range yamlData.List {
77+
for key, values := range kv {
78+
for _, value := range values {
79+
_ = tx.RPush(bucket, []byte(key), getValue(value))
80+
}
81+
}
82+
}
83+
// multi value
84+
for i := 0; i < 200; i++ {
85+
_ = tx.RPush("list-bucket", []byte("key"), []byte(fmt.Sprintf("value-%d", i)))
86+
}
87+
// multi key
88+
for i := 0; i < 200; i++ {
89+
_ = tx.RPush("list-bucket", []byte(fmt.Sprintf("key-%d", i)), []byte("value"))
90+
}
91+
// multi bucket
92+
for i := 0; i < 200; i++ {
93+
_ = tx.RPush(fmt.Sprintf("list-bucket-%d", i), []byte("key"), []byte("value"))
94+
}
95+
return nil
96+
})
97+
}
98+
99+
func initSetData(db *nutsdb.DB, yamlData *initDataType) {
100+
_ = db.Update(func(tx *nutsdb.Tx) error {
101+
// init data from yaml
102+
for bucket, kv := range yamlData.Set {
103+
for key, values := range kv {
104+
for _, value := range values {
105+
_ = tx.SAdd(bucket, []byte(key), getValue(value))
106+
}
107+
}
108+
}
109+
// multi value
110+
for i := 0; i < 200; i++ {
111+
_ = tx.SAdd("set-bucket", []byte("key"), []byte(fmt.Sprintf("value-%d", i)))
112+
}
113+
// multi key
114+
for i := 0; i < 200; i++ {
115+
_ = tx.SAdd("set-bucket", []byte(fmt.Sprintf("key-%d", i)), []byte("value"))
116+
}
117+
// multi bucket
118+
for i := 0; i < 200; i++ {
119+
_ = tx.SAdd(fmt.Sprintf("set-bucket-%d", i), []byte("key"), []byte("value"))
120+
}
121+
return nil
122+
})
123+
}
124+
125+
func initSortedSetData(db *nutsdb.DB, yamlData *initDataType) {
126+
_ = db.Update(func(tx *nutsdb.Tx) error {
127+
// init data from yaml
128+
for bucket, kv := range yamlData.ZSet {
129+
for key, values := range kv {
130+
for _, value := range values {
131+
_ = tx.ZAdd(bucket, []byte(key), value.Score, getValue(value))
132+
}
133+
}
134+
}
135+
timestamp := float64(time.Now().Unix())
136+
// multi value
137+
for i := 0; i < 200; i++ {
138+
_ = tx.ZAdd("sorted-set-bucket", []byte("key"), timestamp + float64(i), []byte(fmt.Sprintf("value-%d", i)))
139+
}
140+
// multi key
141+
for i := 0; i < 200; i++ {
142+
_ = tx.ZAdd("sorted-set-bucket", []byte(fmt.Sprintf("key-%d", i)), timestamp + float64(i), []byte("value"))
143+
}
144+
// multi bucket
145+
for i := 0; i < 200; i++ {
146+
_ = tx.ZAdd(fmt.Sprintf("sorted-set-bucket-%d", i), []byte("key"), timestamp + float64(i), []byte("value"))
147+
}
148+
return nil
149+
})
150+
}
151+
152+
func getValue(value initValueType) []byte {
153+
if len(value.Str) != 0 {
154+
return []byte(value.Str)
155+
} else if len(value.Base64) != 0 {
156+
bytes, err := base64.StdEncoding.DecodeString(value.Base64)
157+
if err != nil {
158+
panic(err)
159+
}
160+
return bytes
161+
}
162+
return []byte{}
163+
}

0 commit comments

Comments
 (0)